Event Grid abonelikleri için olay filtrelemeyi anlama

Bu makalede, uç noktanıza hangi olayların gönderileceğini filtrelemenin farklı yolları açıklanmaktadır. Olay aboneliği oluştururken filtreleme için üç seçeneğiniz vardır:

  • Olay tipleri
  • Konu ile başlar veya ile biter
  • Gelişmiş alanlar ve işleçler

Azure Resource Manager şablonu

Bu makalede gösterilen örnekler, Azure Resource Manager (ARM) şablonlarında filtre tanımlamaya yönelik JSON kod parçacıklarıdır. Eksiksiz bir ARM şablonu ve ARM şablonu dağıtma örneği için bkz . Hızlı Başlangıç: ARM şablonu kullanarak Blob depolama olaylarını web uç noktasına yönlendirme. Hızlı başlangıçtaki örnekte yer alan bölümün filter bazı bölümleri aşağıda verilmiştir. ARM şablonu aşağıdaki kaynakları tanımlar.

  • Azure depolama hesabı
  • Depolama hesabı için sistem konusu
  • Sistem konusu için olay aboneliği. Alt bölümü olay aboneliği bölümünde görürsünüz filter .

Aşağıdaki örnekte, ve olayları için Microsoft.Storage.BlobCreated Microsoft.Storage.BlobDeleted olay aboneliği filtrelenir.

{
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.EventGrid/systemTopics",
      "apiVersion": "2021-12-01",
      "name": "[parameters('systemTopicName')]",
      "location": "[parameters('location')]",
      "properties": {
        "source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "topicType": "Microsoft.Storage.StorageAccounts"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
      "apiVersion": "2021-12-01",
      "name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
      "properties": {
        "destination": {
          "properties": {
            "endpointUrl": "[parameters('endpoint')]"
          },
          "endpointType": "WebHook"
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Storage.BlobCreated",
            "Microsoft.Storage.BlobDeleted"
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
      ]
    }
  ]
}

Olay türü filtreleme

Varsayılan olarak, olay kaynağı için tüm olay türleri uç noktaya gönderilir. Uç noktanıza yalnızca belirli olay türlerini göndermeye karar vekleyebilirsiniz. Örneğin, kaynaklarınızdaki güncelleştirmeler için bildirim alabilir, ancak silme işlemleri gibi diğer işlemler için bildirim alamayabilirsiniz. Bu durumda, olay türüne Microsoft.Resources.ResourceWriteSuccess göre filtreleyin. Olay türlerini içeren bir dizi sağlayın veya olay kaynağı için tüm olay türlerini almak üzere belirtin All .

Olay türüne göre filtrelemeye yönelik JSON söz dizimi şöyledir:

"filter": {
  "includedEventTypes": [
    "Microsoft.Resources.ResourceWriteFailure",
    "Microsoft.Resources.ResourceWriteSuccess"
  ]
}

Konu filtreleme

Konuya göre basit filtreleme için konu için bir başlangıç veya bitiş değeri belirtin. Örneğin, yalnızca bir metin dosyasını depolama hesabına yüklemeyle .txt ilgili olayları almak için konu sonu değerini belirtebilirsiniz. Alternatif olarak, konu /blobServices/default/containers/testcontainer başlığını filtreleyebilir ve bu kapsayıcının tüm olaylarını alabilir ancak depolama hesabındaki diğer kapsayıcıları alamayabilirsiniz.

Olayları özel konulara yayımlarken, abonelerin olayla ilgilenip ilgilenmediklerini bilmelerini kolaylaştıran etkinlikleriniz için konular oluşturun. Aboneler olayları filtrelemek ve yönlendirmek için subject özelliğini kullanır. Abonelerin bu yolun segmentlerine göre filtrelemesi için olayın gerçekleştiği yerin yolunu eklemeyi göz önünde bulundurun. Yol, abonelerin olayları dar veya geniş kapsamlı bir şekilde filtrelemesini sağlar. Konuda olduğu gibi /A/B/C üç segment yolu sağlarsanız, aboneler geniş bir olay kümesi elde etmek için ilk segmente /A göre filtreleyebilir. Bu aboneler veya /A/D/Egibi /A/B/C konularla ilgili olaylar alır. Diğer aboneler, daha dar bir olay kümesi elde etmek için ölçütüne göre filtreleyebilir /A/B .

Örnekler (Blob Depolama olayları)

Blob olayları, oluşturulan veya silinen nesnenin olay türüne, kapsayıcı adına veya adına göre filtrelenebilir.

Blob depolama olaylarının konusu şu biçimi kullanır:

/blobServices/default/containers/<containername>/blobs/<blobname>

Depolama hesabının tüm olaylarını eşleştirmek için konu filtrelerini boş bırakabilirsiniz.

Ön eki paylaşan bir kapsayıcı kümesinde oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/containerprefix

Belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/containername/

Blob adı ön ekini paylaşan belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/containername/blobs/blobprefix

Kapsayıcının belirli bir alt klasöründe oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/{containername}/blobs/{subfolder}/

Blob sonekini paylaşan belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için ".log" veya ".jpg" gibi bir subjectEndsWith filtre kullanın.

Gelişmiş filtreleme

Veri alanlarındaki değerlere göre filtrelemek ve karşılaştırma işlecini belirtmek için gelişmiş filtreleme seçeneğini kullanın. Gelişmiş filtrelemede şunları belirtirsiniz:

  • işleç türü - Karşılaştırma türü.
  • key - Filtreleme için kullandığınız olay verilerindeki alan. Bir sayı, boole, dize veya dizi olabilir.
  • values - Anahtarla karşılaştıracak değer veya değerler.

Tuş

Anahtar, filtreleme için kullandığınız olay verilerindeki alandır. Aşağıdaki türlerden biri olabilir:

  • Sayı

  • Boolean

  • String

  • Dizi. Bu özelliği kullanmak için özelliğini true olarak ayarlamanız enableAdvancedFilteringOnArrays gerekir.

    "filter":
    {
        "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log",
        "subjectEndsWith": ".jpg",
        "enableAdvancedFilteringOnArrays": true
    }
    

Bulut Olayları şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: eventid, source, eventtype, veya eventtypeversionolay verileri (gibidata.key1).

Event Grid temel katmanını kullanıyorsanız, Event Grid şemasındaki olaylar için anahtar için şu değerleri kullanın: ID, Topic, Subject, EventType, , DataVersionveya olay verileri (gibidata.key1). Özel giriş şeması için olay verisi alanlarını (gibi data.key1) kullanın. Veri bölümündeki alanlara erişmek için (nokta) gösterimini . kullanın. Örneğin, data.siteNamedata.appEventTypeDetail.action erişmek siteName için veya action aşağıdaki örnek olay için .

	"data": {
		"appEventTypeDetail": {
			"action": "Started"
		},
		"siteName": "<site-name>",
		"clientRequestId": "None",
		"correlationRequestId": "None",
		"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
		"address": "None",
		"verb": "None"
	},

Dekont

Event Grid, bir nesne dizisinde filtrelemeyi desteklemez. Yalnızca aynı türlerdeki Dize, Boole, Sayılar ve Dizi'ye (tamsayı dizisi veya dize dizisi gibi) izin verir.

Değerler

Değerler şunlar olabilir: sayı, dize, boole veya dizi

İşleçler

Sayılar için kullanılabilir işleçler şunlardır:

NumberIn

Anahtar değeri belirtilen filtre değerlerinden biriyse NumberIn işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin counter 5 mi yoksa 1 mi olduğunu denetler.

"advancedFilters": [{
    "operatorType": "NumberIn",
    "key": "data.counter",
    "values": [
        5,
        1
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

NumberNotIn

Anahtar değeri belirtilen filtre değerlerinden biri değilse NumberNotIn değeri true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin counter 41 ve 0 olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "NumberNotIn",
    "key": "data.counter",
    "values": [
        41,
        0
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

NumberLessThan

Anahtar değeri belirtilen filtre değerinden küçükse NumberLessThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 100'den data küçük olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "NumberLessThan",
    "key": "data.counter",
    "value": 100
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH key IN (v1, v2, v3)
    IF key < filter
        MATCH

NumberGreaterThan

Anahtar değeri belirtilen filtre değerinden büyükse NumberGreaterThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 20'den data büyük olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.counter",
    "value": 20
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH key IN (v1, v2, v3)
    IF key > filter
        MATCH

NumberLessThanOrEquals

Anahtar değeri belirtilen filtre değerinden küçük veya buna eşitse NumberLessThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 100'den data küçük veya buna eşit olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "NumberLessThanOrEquals",
    "key": "data.counter",
    "value": 100
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH key IN (v1, v2, v3)
    IF key <= filter
        MATCH

NumberGreaterThanOrEquals

Anahtar değeri belirtilen filtre değerinden büyük veya buna eşitse NumberGreaterThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 30'dan data büyük veya buna eşit olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "NumberGreaterThanOrEquals",
    "key": "data.counter",
    "value": 30
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH key IN (v1, v2, v3)
    IF key >= filter
        MATCH

NumberInRange

Anahtar değeri belirtilen filtre aralıklarından birindeyse NumberInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki data özniteliğin değerinin key1 iki aralık arasında olup olmadığını denetler: 3.14159 - 999.95, 3000 - 4000.

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklı bir dizidir. Denetlenecek tek aralıklı bir dizi örneği aşağıda verilmiştir.

Tek aralıklı dizi:

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtara sahip sahte kod ve [v1, v2, v3] filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
       IF key >= a AND key <= b
           MATCH

NumberNotInRange

Anahtar değeri belirtilen filtre aralıklarından birinde değilse NumberNotInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki data özniteliğin değerinin key1 iki aralık arasında olup olmadığını denetler: 3.14159 - 999.95, 3000 - 4000. Bu ise, işleç false döndürür.

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklı bir dizidir. Denetlenecek tek aralıklı bir dizi örneği aşağıda verilmiştir.

Tek aralıklı dizi:

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtara sahip sahte kod ve [v1, v2, v3] filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
        IF key >= a AND key <= b
            FAIL_MATCH

Boole'lar için kullanılabilir işleç şu şekildedir:

BoolEquals

Anahtar değeri belirtilen boole değeri filtresiyse BoolEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki trueözniteliğin data değerinin isEnabled olup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "BoolEquals",
    "key": "data.isEnabled",
    "value": true
}]

Anahtar bir diziyse, dizideki tüm değerler filtre boole değeriyle denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH key IN (v1, v2, v3)
    IF filter == key
        MATCH

Dizeler için kullanılabilir işleçler şunlardır:

StringContains

Anahtar değeri belirtilen filtre değerlerinden herhangi birini içeriyorsa StringContains true olarak değerlendirilir (alt dizeler olarak). Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 belirtilen alt dizelerden birini içerip içermediğini denetler: microsoft veya azure. Örneğin, azure data factory içinde var azure .

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data.key1",
    "values": [
        "microsoft", 
        "azure"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            MATCH

StringNotContains

Anahtar, belirtilen filtre değerlerini alt dize olarak içermiyorsa StringNotContains işleci true olarak değerlendirilir. Anahtar, alt dize olarak belirtilen değerlerden birini içeriyorsa, işleç false olarak değerlendirilir. Aşağıdaki örnekte, işleç yalnızca bölümdeki özniteliğin değerinin key1 ve fabrikam alt dizeleri yoksa contoso true döndürür.data

"advancedFilters": [{
    "operatorType": "StringNotContains",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            FAIL_MATCH

Bu işlecin geçerli sınırlaması için Sınırlamalar bölümüne bakın.

StringBeginsWith

Anahtar değeri belirtilen filtre değerlerinden biriyle başlıyorsa StringBeginsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya messageile event başlayıp başlamayacağını denetler. Örneğin, event hubs ile eventbaşlar.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            MATCH

StringNotBeginsWith

Anahtar değeri belirtilen filtre değerlerinden herhangi biriyle başlamazsa StringNotBeginsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya messageile event başlayıp başlamadığını denetler.

"advancedFilters": [{
    "operatorType": "StringNotBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            FAIL_MATCH

StringEndsWith

Anahtar değeri belirtilen filtre değerlerinden biriyle bitiyorsa StringEndsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya pngjpeg ile jpg bitip bitmediğini denetler. Örneğin, eventgrid.png ile pngbiter.

"advancedFilters": [{
    "operatorType": "StringEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            MATCH

StringNotEndsWith

Anahtar değeri belirtilen filtre değerlerinden herhangi biriyle bitmezse StringNotEndsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya pngjpeg ile jpg bitip bitmediğini denetler.

"advancedFilters": [{
    "operatorType": "StringNotEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            FAIL_MATCH

StringIn

StringIn işleci anahtar değerinin belirtilen filtre değerlerinden biriyle tam olarak eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, bölümündeki contoso özniteliğin data değerinin key1 veya fabrikam factoryolup olmadığını denetler.

"advancedFilters": [{
    "operatorType": "StringIn",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam", 
        "factory"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

StringNotIn

StringNotIn işleci, anahtar değerinin belirtilen filtre değerlerinden herhangi biriyle eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin key1 ve bridgeolup olmadığını aws denetler.data

"advancedFilters": [{
    "operatorType": "StringNotIn",
    "key": "data.key1",
    "values": [
        "aws", 
        "bridge"
    ]
}]

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3] [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

Tüm dize karşılaştırmaları büyük/küçük harfe duyarlı değildir.

Dekont

Olay JSON gelişmiş filtre anahtarını içermiyorsa, filtre şu işleçler için eşleşmemiş olarak değerlendirilir: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Filtre, aşağıdaki işleçler için eşleştirildi olarak değerlendirilir: NumberNotIn, StringNotIn.

IsNullOrUndefined

IsNullOrUndefined işleci, anahtarın değeri NULL veya tanımsız olduğunda true olarak değerlendirilir.

{
    "operatorType": "IsNullOrUndefined",
    "key": "data.key1"
}

Aşağıdaki örnekte anahtar1 eksik olduğundan işleç true olarak değerlendirilir.

{ 
    "data": 
    { 
        "key2": 5 
    } 
}

Aşağıdaki örnekte anahtar1 null olarak ayarlandığından işleç true olarak değerlendirilir.

{
    "data": 
    { 
        "key1": null
    }
}

Anahtar1 bu örneklerde başka bir değere sahipse işleç false olarak değerlendirilir.

Isnotnull

Anahtarın değeri NULL veya tanımsız değilse IsNotNull işleci true olarak değerlendirilir.

{
    "operatorType": "IsNotNull",
    "key": "data.key1"
}

OR and AND

Birden çok değer içeren tek bir filtre belirtirseniz, bir OR işlemi gerçekleştirilir, bu nedenle anahtar alanının değeri bu değerlerden biri olmalıdır. Bir örnek aşağıda verilmiştir:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/",
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

Birden çok farklı filtre belirtirseniz, bir AND işlemi yapılır, bu nedenle her filtre koşulu karşılanmalıdır. Bir örnek aşağıda verilmiştir:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/"
        ]
    },
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

CloudEvents

CloudEvents şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: eventid, source, eventtype, eventtypeversionveya olay verileri (gibidata.key1).

CloudEvents 1.0'da uzantı bağlamı özniteliklerini de kullanabilirsiniz. Aşağıdaki örnekte comexampleextension1 ve comexampleothervalue uzantı bağlamı öznitelikleridir.

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "subject": null,
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}

Aşağıda, bir filtrede uzantı bağlam özniteliği kullanma örneği verilmiştır.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "comexampleothervalue",
    "values": [
        "5", 
        "1"
    ]
}]

Sınırlamalar

Gelişmiş filtreleme aşağıdaki sınırlamalara sahiptir:

  • Event Grid aboneliği başına tüm filtreler arasında 25 gelişmiş filtre ve 25 filtre değeri
  • Dize değeri başına 512 karakter
  • . İçlerinde (nokta) karakter bulunan tuşlar. Örneğin: http://schemas.microsoft.com/claims/authnclassreference veya john.doe@contoso.com. Şu anda anahtarlarda kaçış karakterleri için destek yoktur.

Aynı anahtar birden fazla filtrede kullanılabilir.

Sonraki adımlar

  • PowerShell ve Azure CLI ile olayları filtreleme hakkında bilgi edinmek için bkz . Event Grid için olayları filtreleme.
  • Event Grid'i kullanmaya hızlı bir şekilde başlamak için bkz . Azure Event Grid ile özel olaylar oluşturma ve yönlendirme.