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 enableAdvancedFilteringOnArrays till 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/authnclassreference eller john.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