Förstå händelsefiltrering för Event Grid prenumerationer
I den här artikeln beskrivs olika sätt att filtrera vilka händelser som skickas till din slutpunkt. När du skapar en händelseprenumeration har du tre filtreringsalternativ:
- Händelsetyper
- Ämne börjar med eller slutar med
- Avancerade fält och operatorer
Filtrering av händelsetyp
Som standard skickas alla händelsetyper för händelsekällan till slutpunkten. Du kan välja att endast skicka vissa händelsetyper till din slutpunkt. Du kan till exempel få ett meddelande om uppdateringar av dina resurser, men inte meddelas om andra åtgärder som borttagningar. I så fall filtrerar du efter Microsoft.Resources.ResourceWriteSuccess händelsetyp. Ange en matris med händelsetyperna eller ange för All att hämta alla händelsetyper för händelsekällan.
JSON-syntaxen för filtrering efter händelsetyp är:
"filter": {
"includedEventTypes": [
"Microsoft.Resources.ResourceWriteFailure",
"Microsoft.Resources.ResourceWriteSuccess"
]
}
Ämnesfiltrering
För enkel filtrering efter ämne anger du ett start- eller slutvärde för ämnet. Du kan till exempel ange att ämnet slutar med för .txt att bara hämta händelser relaterade till uppladdning av en textfil till lagringskontot. Eller så kan du filtrera ämnet börjar med för /blobServices/default/containers/testcontainer att hämta alla händelser för den containern, men inte andra containrar i lagringskontot.
När du publicerar händelser till anpassade ämnen skapar du ämnen för dina händelser som gör det enkelt för prenumeranter att veta om de är intresserade av händelsen. Prenumeranter använder ämnesegenskapen för att filtrera och dirigera händelser. Överväg att lägga till sökvägen för var händelsen inträffade, så att prenumeranter kan filtrera efter segment för den sökvägen. Sökvägen gör det möjligt för prenumeranter att filtrera händelser på ett smalt eller brett sätt. Om du anger en tre segmentsökväg som i ämnet kan prenumeranter filtrera efter det första /A/B/C segmentet för att få en bred uppsättning /A händelser. Dessa prenumeranter får händelser med ämnen /A/B/C som eller /A/D/E . Andra prenumeranter /A/B kan filtrera efter för att få en smalare uppsättning händelser.
JSON-syntaxen för filtrering efter ämne är:
"filter": {
"subjectBeginsWith": "/blobServices/default/containers/mycontainer/log",
"subjectEndsWith": ".jpg"
}
Avancerad filtrering
Om du vill filtrera efter värden i datafälten och ange jämförelseoperatorn använder du alternativet för avancerad filtrering. I avancerad filtrering anger du:
- operatortyp – Jämförelsetypen.
- key – Fältet i händelsedata som du använder för filtrering. Det kan vara ett tal, ett booleskt tal, en sträng eller en matris.
- values – Det värde eller de värden som ska jämföras med nyckeln.
Nyckel
Nyckel är fältet i de händelsedata som du använder för filtrering. Det kan vara någon av följande typer:
Antal
Boolesk
Sträng
Array. Du måste ange egenskapen
enableAdvancedFilteringOnArraystill true för att använda den här funktionen."filter": { "subjectBeginsWith": "/blobServices/default/containers/mycontainer/log", "subjectEndsWith": ".jpg", "enableAdvancedFilteringOnArrays": true }
För händelser i Event Grid schema använder du följande värden för nyckeln: , , , ID , eller Topic Subject EventType DataVersion händelsedata (till exempel data.key1 ).
För händelser i Cloud Events-schemat använder du följande värden för nyckeln: eventid , , , eller source eventtype eventtypeversion händelsedata (till exempel data.key1 ).
För anpassat indataschema använder du händelsedatafälten (till exempel data.key1 ). Om du vill komma åt fält i dataavsnittet använder . du notationen (punkt). Till exempel data.sitename , för att komma åt eller för följande data.appEventTypeDetail.action sitename action exempelhändelse.
"data": {
"appEventTypeDetail": {
"action": "Started"
},
"siteName": "<site-name>",
"clientRequestId": "None",
"correlationRequestId": "None",
"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
"address": "None",
"verb": "None"
},
Värden
Värdena kan vara: tal, sträng, boolesk eller matris
Operatorer
Tillgängliga operatorer för tal är:
NumberIn
Operatorn NumberIn utvärderas som true om nyckelvärdet är ett av de angivna filtervärdena. I följande exempel kontrolleras om värdet för attributet counter i avsnittet data är 5 eller 1.
"advancedFilters": [{
"operatorType": "NumberIn",
"key": "data.counter",
"values": [
5,
1
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a, b, c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
NumberNotIn
NumberNotIn utvärderas som sant om nyckelvärdet inte är något av de angivna filtervärdena. I följande exempel kontrolleras om värdet för counter attributet i data avsnittet inte är 41 och 0.
"advancedFilters": [{
"operatorType": "NumberNotIn",
"key": "data.counter",
"values": [
41,
0
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a, b, c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
NumberLessThan
Operatorn NumberLessThan utvärderas till true om nyckelvärdet är mindre än det angivna filtervärdet. I följande exempel kontrolleras om värdet för attributet counter i avsnittet är mindre än data 100.
"advancedFilters": [{
"operatorType": "NumberLessThan",
"key": "data.counter",
"value": 100
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot filtervärdet. Här är pseudokoden med nyckeln: [v1, v2, v3] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH key IN (v1, v2, v3)
IF key < filter
MATCH
NumberGreaterThan
Operatorn NumberGreaterThan utvärderas till true om nyckelvärdet är större än det angivna filtervärdet. I följande exempel kontrolleras om värdet för attributet counter i avsnittet är större än data 20.
"advancedFilters": [{
"operatorType": "NumberGreaterThan",
"key": "data.counter",
"value": 20
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot filtervärdet. Här är pseudokoden med nyckeln: [v1, v2, v3] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH key IN (v1, v2, v3)
IF key > filter
MATCH
NumberLessThanOrEquals
Operatorn NumberLessThanOrEquals utvärderas till true om nyckelvärdet är mindre än eller lika med det angivna filtervärdet. I följande exempel kontrolleras om värdet för attributet i avsnittet är counter mindre än eller lika med data 100.
"advancedFilters": [{
"operatorType": "NumberLessThanOrEquals",
"key": "data.counter",
"value": 100
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot filtervärdet. Här är pseudokoden med nyckeln: [v1, v2, v3] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH key IN (v1, v2, v3)
IF key <= filter
MATCH
NumberGreaterThanOrEquals
Operatorn NumberGreaterThanOrEquals utvärderas till true om nyckelvärdet är större än eller lika med det angivna filtervärdet. I följande exempel kontrolleras om värdet för attributet i avsnittet är counter större än eller lika med data 30.
"advancedFilters": [{
"operatorType": "NumberGreaterThanOrEquals",
"key": "data.counter",
"value": 30
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot filtervärdet. Här är pseudokoden med nyckeln: [v1, v2, v3] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH key IN (v1, v2, v3)
IF key >= filter
MATCH
NumberInRange
Operatorn NumberInRange utvärderas som true om nyckelvärdet ligger inom något av de angivna filterintervallen. I följande exempel kontrolleras om värdet för attributet i avsnittet finns i något av de två key1 data intervallen: 3,14159– 999,95, 3000–4000.
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
Egenskapen values är en matris med intervall. I föregående exempel är det en matris med två intervall. Här är ett exempel på en matris med ett intervall att kontrollera.
Matris med ett intervall:
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln och [v1, v2, v3] filtret: en matris med intervall. I den här pseudokoden a är och låga och höga värden för varje intervall i b matrisen. Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
MATCH
NumberNotInRange
Operatorn NumberNotInRange utvärderas till true om nyckelvärdet inte finns i något av de angivna filterintervallen. I följande exempel kontrolleras om värdet för attributet i avsnittet finns i något av de två key1 data intervallen: 3,14159– 999,95, 3000 –4000. Om det är det returnerar operatorn false.
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
Egenskapen values är en matris med intervall. I föregående exempel är det en matris med två intervall. Här är ett exempel på en matris med ett intervall att kontrollera.
Matris med ett intervall:
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln och [v1, v2, v3] filtret: en matris med intervall. I den här pseudokoden a är och låga och höga värden för varje intervall i b matrisen. Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
FAIL_MATCH
Den tillgängliga operatorn för booleska booleska booleska är:
BoolEquals
Operatorn BoolEquals utvärderas till true om nyckelvärdet är det angivna booleska värdefiltret. I följande exempel kontrolleras om värdet för isEnabled attributet i data avsnittet är true .
"advancedFilters": [{
"operatorType": "BoolEquals",
"key": "data.isEnabled",
"value": true
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot filtrets booleska värde. Här är pseudokoden med nyckeln: [v1, v2, v3] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
Tillgängliga operatorer för strängar är:
StringContains
StringContains utvärderas som sant om nyckelvärdet innehåller något av de angivna filtervärdena (som delsträngar). I följande exempel kontrolleras om värdet för attributet i avsnittet innehåller någon av de angivna key1 data delsträngarna: microsoft eller azure . Till exempel azure data factory har azure i den.
"advancedFilters": [{
"operatorType": "StringContains",
"key": "data.key1",
"values": [
"microsoft",
"azure"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
MATCH
StringNotContains
Operatorn StringNotContains utvärderas till true om nyckeln inte innehåller de angivna filtervärdena som delsträngar. Om nyckeln innehåller ett av de angivna värdena som en delsträng utvärderas operatorn till false. I följande exempel returnerar operatorn true endast om värdet för attributet i avsnittet key1 inte har och som data contoso fabrikam delsträngar.
"advancedFilters": [{
"operatorType": "StringNotContains",
"key": "data.key1",
"values": [
"contoso",
"fabrikam"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
FAIL_MATCH
Se avsnittet Begränsningar för aktuell begränsning för den här operatorn.
StringBeginsWith
Operatorn StringBeginsWith utvärderas till true om nyckelvärdet börjar med något av de angivna filtervärdena. I följande exempel kontrolleras om värdet för attributet key1 i avsnittet börjar med eller data event grid . Börjar till event hubs exempel med event .
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
MATCH
StringNotBeginsWith
Operatorn StringNotBeginsWith utvärderas till true om nyckelvärdet inte börjar med något av de angivna filtervärdena. I följande exempel kontrolleras om värdet för key1 attributet i data avsnittet inte börjar med eller event message .
"advancedFilters": [{
"operatorType": "StringNotBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
FAIL_MATCH
StringEndsWith
Operatorn StringEndsWith utvärderas till true om nyckelvärdet slutar med ett av de angivna filtervärdena. I följande exempel kontrolleras om värdet för attributet key1 i avsnittet slutar med eller eller data jpg jpeg png . Slutar till exempel eventgrid.png med png .
"advancedFilters": [{
"operatorType": "StringEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
MATCH
StringNotEndsWith
Operatorn StringNotEndsWith utvärderas till true om nyckelvärdet inte slutar med något av de angivna filtervärdena. I följande exempel kontrolleras om värdet för key1 attributet i data avsnittet inte slutar med eller eller jpg jpeg png .
"advancedFilters": [{
"operatorType": "StringNotEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
FAIL_MATCH
StringIn
Operatorn StringIn kontrollerar om nyckelvärdet exakt matchar ett av de angivna filtervärdena. I följande exempel kontrollerar den om värdet för key1 attributet i data avsnittet är eller eller contoso fabrikam factory .
"advancedFilters": [{
"operatorType": "StringIn",
"key": "data.key1",
"values": [
"contoso",
"fabrikam",
"factory"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
StringNotIn
StringNotIn-operatorn kontrollerar om nyckelvärdet inte matchar något av de angivna filtervärdena. I följande exempel kontrolleras om värdet för key1 attributet i data avsnittet inte är aws och bridge .
"advancedFilters": [{
"operatorType": "StringNotIn",
"key": "data.key1",
"values": [
"aws",
"bridge"
]
}]
Om nyckeln är en matris kontrolleras alla värden i matrisen mot matrisen med filtervärden. Här är pseudokoden med nyckeln: [v1, v2, v3] och filtret: [a,b,c] . Alla nyckelvärden med datatyper som inte matchar filtrets datatyp ignoreras.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
Alla strängjämförelser är inte fallkänsliga.
Anteckning
Om JSON-händelsen inte innehåller den avancerade filternyckeln avdunstningsfilter som inte matchade för följande operatorer: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.
Filtret avdunstning matchas för följande operatorer: NumberNotIn, StringNotIn.
IsNullOrUndefined
Operatorn IsNullOrUndefined utvärderas till true om nyckelns värde är NULL eller odefinierat.
{
"operatorType": "IsNullOrUndefined",
"key": "data.key1"
}
I följande exempel saknas key1, så operatorn skulle utvärderas till true.
{
"data":
{
"key2": 5
}
}
I följande exempel är key1 inställt på null, så operatorn skulle utvärderas till true.
{
"data":
{
"key1": null
}
}
Om key1 har något annat värde i de här exemplen utvärderas operatorn till false.
IsNotNull
IsNotNull-operatorn utvärderas som true om nyckelns värde inte är NULL eller odefinierat.
{
"operatorType": "IsNotNull",
"key": "data.key1"
}
OR and AND
Om du anger ett enda filter med flera värden utförs en OR-åtgärd, så värdet för nyckelfältet måste vara ett av dessa värden. Här är ett exempel:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/",
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
Om du anger flera olika filter utförs en AND-åtgärd, så varje filtervillkor måste uppfyllas. Här är ett exempel:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/"
]
},
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
CloudEvents
För händelser i CloudEvents-schemat använder du följande värden för nyckeln: eventid , , , eller source eventtype eventtypeversion händelsedata (t.ex. data.key1 ).
Du kan också använda attribut för tilläggskontext i CloudEvents 1.0. I följande exempel är och comexampleextension1 attribut comexampleothervalue för tilläggskontext.
{
"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
}
}
Här är ett exempel på hur du använder ett tilläggskontextattribut i ett filter.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "comexampleothervalue",
"values": [
"5",
"1"
]
}]
Begränsningar
Avancerad filtrering har följande begränsningar:
- 5 avancerade filter och 25 filtervärden för alla filter per Event Grid-prenumeration
- 512 tecken per strängvärde
- Fem värden för i och inte i operatorer
- Operatorn
StringNotContainsär för närvarande inte tillgänglig i portalen. - Nycklar med
.(punkt) tecken i sig. Till exempel:http://schemas.microsoft.com/claims/authnclassreferenceellerjohn.doe@contoso.com. För närvarande finns det inget stöd för escape-tecken i nycklar.
Samma nyckel kan användas i fler än ett filter.
Nästa steg
- Mer information om filtrering av händelser med PowerShell och Azure CLI finns i Filtrera händelser för Event Grid.
- Information om hur du snabbt kommer igång Event Grid finns i Skapa och dirigera anpassade händelser med Azure Event Grid.