Memahami pemfilteran kejadian untuk langganan Azure Event Grid

Artikel ini menjelaskan berbagai cara untuk filter kejadian mana yang dikirim ke titik akhir Anda. Saat membuat langganan kejadian, Anda memiliki tiga opsi untuk memfilter:

  • Tipe peristiwa
  • Subjek dimulai dengan atau diakhiri dengan
  • Bidang dan operator tingkat lanjut

Templat Azure Resource Manager

Contoh yang ditunjukkan dalam artikel ini adalah cuplikan JSON untuk menentukan filter dalam templat Azure Resource Manager (ARM). Untuk contoh templat ARM lengkap dan penyebaran templat ARM, lihat Mulai Cepat: Merutekan peristiwa penyimpanan Blob ke titik akhir web menggunakan templat ARM. Berikut beberapa bagian lainnya di sekitar bagian filter dari contoh dalam mulai cepat. Templat ARM menentukan sumber daya berikut.

  • Akun penyimpanan Azure
  • Topik sistem untuk akun penyimpanan
  • Langganan peristiwa untuk topik sistem. Anda akan melihat subbagian filter di bagian langganan peristiwa.

Dalam contoh berikut, langganan peristiwa memfilter peristiwa Microsoft.Storage.BlobCreated dan Microsoft.Storage.BlobDeleted.

{
  "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'))]"
      ]
    }
  ]
}

Pemfilteran jenis kejadian

Secara default, semua jenis kejadian untuk sumber kejadian dikirim ke titik akhir. Anda dapat memutuskan untuk mengirim hanya jenis kejadian tertentu ke titik akhir Anda. Misalnya, Anda bisa mendapatkan pemberitahuan pembaruan untuk sumber daya Anda, tetapi tidak diberi tahu untuk operasi lain seperti penghapusan. Dalam hal ini, filter menurut Microsoft.Resources.ResourceWriteSuccess jenis kejadian. Sediakan array dengan jenis kejadian, atau tentukan All untuk mendapatkan semua jenis kejadian untuk sumber kejadian.

Sintaksis JSON untuk pemfilteran menurut jenis kejadian adalah:

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

Pemfilteran subjek

Untuk pemfilteran sederhana menurut subjek, tentukan nilai awal atau akhir untuk subjek. Misalnya, Anda dapat menentukan subjek yang diakhiri .txt untuk hanya mendapatkan kejadian yang terkait dengan mengunggah file teks ke akun penyimpanan. Atau, Anda dapat memfilter subjek dimulai untuk /blobServices/default/containers/testcontainer mendapatkan semua kejadian untuk kontainer itu tetapi bukan kontainer lain di akun penyimpanan.

Saat menerbitkan kejadian ke topik khusus, buat subjek untuk kejadian Anda yang memudahkan pelanggan untuk mengetahui apakah mereka tertarik dengan kejadian tersebut. Pelanggan menggunakan properti subjek untuk memfilter dan merutekan peristiwa. Pertimbangkan untuk menambahkan jalur tempat kejadian terjadi, sehingga pelanggan dapat memfilter berdasarkan segmen jalur tersebut. Jalur ini memungkinkan pelanggan untuk memfilter kejadian secara sempit atau luas. Jika Anda menyediakan jalur tiga segmen seperti dalam /A/B/C subjek, pelanggan dapat memfilter berdasarkan segmen pertama /A untuk mendapatkan serangkaian kejadian yang luas. Pelanggan tersebut mendapatkan peristiwa dengan subjek seperti /A/B/C atau /A/D/E. Pelanggan lain dapat memfilter berdasarkan /A/B untuk mendapatkan set peristiwa yang lebih sempit.

Contoh (peristiwa Blob Storage)

Peristiwa blob dapat difilter menurut jenis peristiwa, nama kontainer, atau nama objek yang dibuat atau dihapus.

Subjek kejadian penyimpanan Blob menggunakan format:

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

Untuk mencocokkan semua kejadian akun penyimpanan, Anda dapat membiarkan filter subjek kosong.

Untuk mencocokkan kejadian dari blob yang dibuat dalam sekumpulan kontainer berimbuhan sama, gunakan filter subjectBeginsWith seperti:

/blobServices/default/containers/containerprefix

Untuk mencocokkan kejadian dari blob yang dibuat dalam kontainer tertentu, gunakan filter subjectBeginsWith seperti:

/blobServices/default/containers/containername/

Untuk mencocokkan kejadian dari blob yang dibuat dalam kontainer berimbuhan nama blob sama, gunakan filter subjectBeginsWith seperti:

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

Untuk mencocokkan peristiwa dari blob yang dibuat di subfolder kontainer tertentu, gunakan subjectBeginsWith filter seperti:

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

Untuk mencocokkan kejadian dari blob yang dibuat dalam kontainer berimbuhan blob sama, gunakan filter subjectEndsWith seperti ".log" atau ".jpg".

Pemfilteran tingkat lanjut

Untuk memfilter menurut nilai di bidang data dan menentukan operator perbandingan, gunakan opsi pemfilteran tingkat lanjut. Dalam pemfilteran tingkat lanjut, Anda menentukan:

  • jenis operator - Jenis perbandingan.
  • key - Bidang dalam data kejadian yang Anda gunakan untuk pemfilteran. Ini bisa menjadi angka, boolean, string, atau array.
  • nilai - Nilai atau nilai untuk dibandingkan dengan kunci.

Tombol

key - Bidang dalam data kejadian yang Anda gunakan untuk pemfilteran. Hal ini dapat berupa salah satu dari jenis berikut:

  • Angka

  • Boolean

  • String

  • Array. Anda perlu mengatur enableAdvancedFilteringOnArrays properti ke true untuk menggunakan fitur ini.

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

Untuk kejadian dalam skema Events Cloud, gunakan nilai berikut untuk kunci: eventid, source, eventtype, eventtypeversion, atau data kejadian (seperti data.key1).

Jika Anda menggunakan tingkat dasar Event Grid, untuk peristiwa dalam skema Event Grid, gunakan nilai berikut untuk kunci: ID, , Topic, EventTypeSubject, DataVersionatau data peristiwa (seperti data.key1). Untuk skema input kustom, gunakan bidang data kejadian (seperti data.key1). Untuk mengakses bidang di bagian data, gunakan . notasi (titik). Misalnya, data.siteName, data.appEventTypeDetail.action untuk mengakses siteName atau action untuk contoh kejadian berikut.

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

Catatan

Event Grid tidak mendukung pemfilteran pada array objek. Ini hanya memungkinkan String, Boolean, Numbers, dan Array dari jenis yang sama (seperti array bilangan bulat atau array string).

Nilai

Nilainya bisa: angka, string, boolean, atau array

Operator

Operator yang tersedia untuk nomor adalah:

NumberIn

Operator NumberIn mengevaluasi ke true jika nilai kunci adalah salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai counter atribut dalam data bagian adalah 5 atau 1.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a, b, c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberNotIn

NumberNotIn mengevaluasi ke true jika nilai kunci bukan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai counter atribut dalam data bagian adalah 41 atau 0.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a, b, c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberLessThan

Operator NumberLessThan mengevaluasi ke true jika nilai kuncikurang dari nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai counter atribut dalam data bagian adalah 100 atau 1.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut kode pseudo dengan kunci: [v1, v2, v3]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberGreaterThan

Operator NumberGreaterThan mengevaluasi ke true jika nilai kuncilebih besar dari nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai counter atribut dalam data bagian adalah 20 atau 1.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut kode pseudo dengan kunci: [v1, v2, v3]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberLessThanOrEquals

Operator NumberGreaterThan mengevaluasi ke true jika nilai kuncilebih besar dari nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai counter atribut dalam data bagian adalah 100 atau 1.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut kode pseudo dengan kunci: [v1, v2, v3]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberLessThanOrEquals

Operator NumberGreaterThan mengevaluasi ke true jika nilai kuncilebih besar dari nilai filter yang ditentukan. Dalam contoh berikut, ini memeriksa apakah nilai counteratribut di data bagian lebih besar dari atau sama dengan 30.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut kode pseudo dengan kunci: [v1, v2, v3]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberInRange

Operator NumberIn mengevaluasi ke true jika nilai kunci adalah salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1atribut di bagian data ada di salah satu dari dua rentang: 3.14159 - 999.95, 3000 - 4000.

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

Properti values adalah array rentang. Dalam contoh sebelumnya, ini adalah array dari dua rentang. Berikut ini contoh array dengan satu rentang untuk diperiksa.

Array dengan satu rentang:

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: array rentang. Dalam kode pseudo ini, a dan b adalah nilai rendah dan tinggi dari setiap rentang dalam array. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

NumberNotInRange

Operator NumberNotInRange mengevaluasi ke true jika nilai kunci tidak berada dalam salah satu rentang filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1atribut di bagian data ada di salah satu dari dua rentang: 3.14159 - 999.95, 3000 - 4000. Jika ya, operator mengembalikan false.

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

Properti values adalah array rentang. Dalam contoh sebelumnya, ini adalah array dari dua rentang. Berikut ini contoh array dengan satu rentang untuk diperiksa.

Array dengan satu rentang:

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: array rentang. Dalam kode pseudo ini, a dan b adalah nilai rendah dan tinggi dari setiap rentang dalam array. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

Operator yang tersedia untuk booleans adalah:

BoolEquals

Operator BoolEquals mengevaluasi ke true jika nilai kuncinya adalah filter nilai boolean yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai atribut isEnabled di bagian data adalah true.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut kode pseudo dengan kunci: [v1, v2, v3]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

Operator yang tersedia untuk string adalah:

StringContains

StringContains mengevaluasi ke true jika nilai kunci berisi salah satu nilai filter yang ditentukan (sebagai substring). Dalam contoh berikut, ia memeriksa apakah nilai key1 atribut dalam data bagian berisi salah satu substring yang ditentukan: microsoft atau azure. Misalnya, azure data factory ada di azure dalamnya.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringNotContains

Operator StringNotContains mengevaluasi ke true jika kuncitidak berisi nilai filter yang ditentukan sebagai substring. Jika kunci berisi salah satu nilai yang ditentukan sebagai substring, operator mengevaluasi ke false. Dalam contoh berikut, operator mengembalikan true hanya jika nilai key1 atribut di bagian data tidak memiliki contoso dan fabrikam sebagai substring.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

Lihat Pembatasan untuk batasan operator ini saat ini.

StringBeginsWith

Operator StringBeginsWith mengevaluasi ke true jika nilai kuncidimulai dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1atribut data di bagian diawali dengan event atau message. event hubsMisalnya, dimulai dengan event.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringNotBeginsWith

Operator StringBeginsWith mengevaluasi ke true jika nilai kuncidimulai dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1 atribut di data bagian diawali dengan event atau message.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringEndsWith

Operator StringEndsWith mengevaluasi ke true jika nilai kuncidiakhiri dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ini memeriksa apakah nilai key1 atribut di data bagian diakhiri dengan jpg atau jpeg atau png. Misalnya, eventgrid.png diakhiri dengan png.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringNotEndsDengan

Operator StringBeginsWith mengevaluasi ke true jika nilai kuncidimulai dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ini memeriksa apakah nilai key1atribut di data bagian tidak diakhiri dengan jpg atau jpeg atau png.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringIn

Operator StringIn memeriksa apakah nilai kunci sama persis dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1 atribut di data bagian adalah contoso atau fabrikam atau factory.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

StringNotIn

Operator StringNotIn memeriksa apakah nilai kuncitidak cocok dengan salah satu nilai filter yang ditentukan. Dalam contoh berikut, ia memeriksa apakah nilai key1 atribut di data bagian bukan aws dan bridge.

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

Jika kunci adalah array, semua nilai dalam array dicentang terhadap array nilai filter. Berikut adalah kode pseudo dengan kunci: [v1, v2, v3] dan filter: [a,b,c]. Nilai kunci apa pun dengan jenis data yang tidak cocok dengan jenis data filter diabaikan.

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

Semua perbandingan string tidak peka huruf besar/kecil.

Catatan

Jika JSON peristiwa tidak berisi kunci filter tingkat lanjut, filter dievaluasi sebagai tidak cocok untuk operator berikut: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Filter dievaluasi sebagaimana dicocokkan untuk operator berikut: NumberNotIn, StringNotIn.

IsNullOrUndefined

Operator IsNullOrUndefined mengevaluasi ke true jika nilai kunci adalah NULL atau tidak terdefinisi.

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

Dalam contoh berikut, key1 hilang, sehingga operator akan mengevaluasi ke true.

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

Dalam contoh berikut, key1 hilang, sehingga operator akan mengevaluasi ke true.

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

Jika key1 memiliki nilai lain dalam contoh ini, operator akan mengevaluasi ke false.

IsNotNull

Operator IsNotNull mengevaluasi ke true jika nilai kunci tidak NULL atau tidak terdefinisi.

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

OR dan AND

Jika Anda menentukan filter tunggal dengan beberapa nilai, operasi OR dilakukan, sehingga nilai bidang kunci harus menjadi salah satu nilai ini. Berikut contohnya:

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

Jika Anda menentukan beberapa filter berbeda, operasi AND selesai, sehingga setiap kondisi filter harus terpenuhi. Berikut contohnya:

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

CloudEvents

Untuk kejadian dalam skema CloudEvents, gunakan nilai berikut untuk kunci: eventid, source, eventtype, eventtypeversion, atau data kejadian (seperti data.key1).

Anda juga dapat menggunakan atribut konteks ekstensi di CloudEvents 1.0. Dalam contoh berikut, comexampleextension1 dan comexampleothervalue merupakan atribut konteks ekstensi.

{
    "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
    }
}

Berikut ini contoh penggunaan atribut konteks ekstensi dalam filter.

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

Batasan

Pemfilteran tingkat lanjut memiliki batasan berikut:

  • 25 filter lanjutan dan 25 nilai filter di semua filter per langganan Event Grid
  • 512 karakter per nilai string
  • Kunci dengan . karakter (titik) di dalamnya. Sebagai contoh: http://schemas.microsoft.com/claims/authnclassreference atau john.doe@contoso.com. Saat ini, tidak ada dukungan untuk karakter escape di kunci.

Kunci yang sama dapat digunakan di lebih dari satu filter.

Langkah berikutnya