Gebeurtenisfiltering voor Event Grid-abonnementen begrijpen
In dit artikel worden de verschillende manieren beschreven om te filteren welke gebeurtenissen naar uw eindpunt worden verzonden. Wanneer u een gebeurtenisabonnement maakt, hebt u drie opties voor het filteren:
- Gebeurtenistypen
- Onderwerp begint met of eindigt met
- Geavanceerde velden en operators
Azure Resource Manager-sjabloon
De voorbeelden in dit artikel zijn JSON-fragmenten voor het definiëren van filters in ARM-sjablonen (Azure Resource Manager). Zie Quickstart: Blob Storage-gebeurtenissen routeren naar een webeindpunt met behulp van een ARM-sjabloon voor een voorbeeld van een volledige ARM-sjabloon en het implementeren van een ARM-sjabloon. Hier volgen nog enkele secties rond de filter
sectie uit het voorbeeld in de quickstart. De ARM-sjabloon definieert de volgende resources.
- Azure-storageaccount
- Systeemonderwerp voor het opslagaccount
- Gebeurtenisabonnement voor het systeemonderwerp. U ziet de
filter
subsectie in de sectie gebeurtenisabonnement.
In het volgende voorbeeld filtert het gebeurtenisabonnement op Microsoft.Storage.BlobCreated
en Microsoft.Storage.BlobDeleted
gebeurtenissen.
{
"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'))]"
]
}
]
}
Filteren van gebeurtenistype
Standaard worden alle gebeurtenistypen voor de gebeurtenisbron naar het eindpunt verzonden. U kunt besluiten om alleen bepaalde gebeurtenistypen naar uw eindpunt te verzenden. U kunt bijvoorbeeld op de hoogte worden gesteld van updates voor uw resources, maar niet voor andere bewerkingen, zoals verwijderingen. Filter in dat geval op het Microsoft.Resources.ResourceWriteSuccess
gebeurtenistype. Geef een matrix op met de gebeurtenistypen of geef All
op om alle gebeurtenistypen voor de gebeurtenisbron op te halen.
De JSON-syntaxis voor filteren op gebeurtenistype is:
"filter": {
"includedEventTypes": [
"Microsoft.Resources.ResourceWriteFailure",
"Microsoft.Resources.ResourceWriteSuccess"
]
}
Onderwerpfiltering
Geef voor eenvoudig filteren op onderwerp een begin- of eindwaarde op voor het onderwerp. U kunt bijvoorbeeld opgeven dat het onderwerp eindigt om .txt
alleen gebeurtenissen op te halen die betrekking hebben op het uploaden van een tekstbestand naar een opslagaccount. U kunt het onderwerp /blobServices/default/containers/testcontainer
ook filteren om alle gebeurtenissen voor die container op te halen, maar niet andere containers in het opslagaccount.
Wanneer u gebeurtenissen publiceert naar aangepaste onderwerpen, maakt u onderwerpen voor uw gebeurtenissen waarmee abonnees gemakkelijk kunnen weten of ze geïnteresseerd zijn in de gebeurtenis. Abonnees gebruiken de onderwerpeigenschap om gebeurtenissen te filteren en te routeren. Overweeg het pad toe te voegen voor waar de gebeurtenis zich voordeed, zodat abonnees kunnen filteren op segmenten van dat pad. Met het pad kunnen abonnees gebeurtenissen smal of breed filteren. Als u een drie segmentpad opgeeft, zoals /A/B/C
in het onderwerp, kunnen abonnees filteren op het eerste segment /A
om een brede reeks gebeurtenissen op te halen. Deze abonnees krijgen gebeurtenissen met onderwerpen zoals /A/B/C
of /A/D/E
. Andere abonnees kunnen filteren /A/B
om een smallere set gebeurtenissen op te halen.
Voorbeelden (Blob Storage-gebeurtenissen)
Blobgebeurtenissen kunnen worden gefilterd op het gebeurtenistype, de containernaam of de naam van het object dat is gemaakt of verwijderd.
Het onderwerp van Blob Storage-gebeurtenissen maakt gebruik van de indeling:
/blobServices/default/containers/<containername>/blobs/<blobname>
Als u alle gebeurtenissen voor een opslagaccount wilt vergelijken, kunt u de onderwerpfilters leeg laten.
Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een set containers die een voorvoegsel delen, gebruikt u een subjectBeginsWith
filter zoals:
/blobServices/default/containers/containerprefix
Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container, gebruikt u een subjectBeginsWith
filter zoals:
/blobServices/default/containers/containername/
Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container die een blobnaamvoorvoegsel delen, gebruikt u een subjectBeginsWith
filter zoals:
/blobServices/default/containers/containername/blobs/blobprefix
Als u gebeurtenissen van blobs wilt vergelijken in een specifieke submap van een container, gebruikt u een subjectBeginsWith
filter zoals:
/blobServices/default/containers/{containername}/blobs/{subfolder}/
Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container die een blobachtervoegsel delen, gebruikt u een subjectEndsWith
filter zoals .log of .jpg.
Geavanceerd filteren
Als u wilt filteren op waarden in de gegevensvelden en de vergelijkingsoperator wilt opgeven, gebruikt u de geavanceerde filteroptie. Bij geavanceerd filteren geeft u het volgende op:
- operatortype : het type vergelijking.
- sleutel: het veld in de gebeurtenisgegevens die u gebruikt voor filteren. Dit kan een getal, booleaanse waarde, tekenreeks of matrix zijn.
- waarden: de waarde of waarden die moeten worden vergeleken met de sleutel.
Toets
Sleutel is het veld in de gebeurtenisgegevens die u gebruikt voor filteren. Dit kan een van de volgende typen zijn:
Aantal
Booleaans
String
Array. U moet de
enableAdvancedFilteringOnArrays
eigenschap instellen op True om deze functie te kunnen gebruiken."filter": { "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log", "subjectEndsWith": ".jpg", "enableAdvancedFilteringOnArrays": true }
Gebruik voor gebeurtenissen in het schema van cloudevenementen de volgende waarden voor de sleutel: eventid
, source
, eventtype
, eventtypeversion
of gebeurtenisgegevens (zoals data.key1
).
Als u de Basic-laag van Event Grid gebruikt, gebruikt u voor gebeurtenissen in het Event Grid-schema de volgende waarden voor de sleutel: ID
, Topic
, Subject
, EventType
of DataVersion
gebeurtenisgegevens (zoalsdata.key1
). Voor een aangepast invoerschema gebruikt u de gebeurtenisgegevensvelden (zoals data.key1
). Gebruik de .
notatie (punt) om toegang te krijgen tot velden in de gegevenssectie. Bijvoorbeeld, data.siteName
data.appEventTypeDetail.action
voor toegang tot siteName
of action
voor de volgende voorbeeldgebeurtenis.
"data": {
"appEventTypeDetail": {
"action": "Started"
},
"siteName": "<site-name>",
"clientRequestId": "None",
"correlationRequestId": "None",
"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
"address": "None",
"verb": "None"
},
Notitie
Event Grid biedt geen ondersteuning voor filteren op een matrix met objecten. Hiermee kunnen alleen tekenreeksen, Booleaanse waarden, getallen en matrix van dezelfde typen worden toegestaan (zoals een matrix met gehele getallen of tekenreeksmatrix).
Waarden
De waarden kunnen zijn: getal, tekenreeks, booleaanse waarde of matrix
Operatoren
De beschikbare operators voor getallen zijn:
NumberIn
De operator NumberIn resulteert in waar als de sleutelwaarde een van de opgegeven filterwaarden is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie 5 of 1 is.
"advancedFilters": [{
"operatorType": "NumberIn",
"key": "data.counter",
"values": [
5,
1
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a, b, c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
NumberNotIn
NumberNotIn resulteert in waar als de sleutelwaarde geen van de opgegeven filterwaarden is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie niet 41 en 0 is.
"advancedFilters": [{
"operatorType": "NumberNotIn",
"key": "data.counter",
"values": [
41,
0
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a, b, c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
NumberLessThan
De operator NumberLessThan resulteert in waar als de sleutelwaarde kleiner is dan de opgegeven filterwaarde . In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie kleiner is dan 100.
"advancedFilters": [{
"operatorType": "NumberLessThan",
"key": "data.counter",
"value": 100
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH key IN (v1, v2, v3)
IF key < filter
MATCH
NumberGreaterThan
De operator NumberGreaterThan evalueert waar als de sleutelwaarde groter is dan de opgegeven filterwaarde . In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie groter is dan 20.
"advancedFilters": [{
"operatorType": "NumberGreaterThan",
"key": "data.counter",
"value": 20
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH key IN (v1, v2, v3)
IF key > filter
MATCH
NumberLessThanOrEquals
De operator NumberLessThanOrEquals resulteert in waar als de sleutelwaarde kleiner is dan of gelijk is aan de opgegeven filterwaarde. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie kleiner is dan of gelijk is aan 100.
"advancedFilters": [{
"operatorType": "NumberLessThanOrEquals",
"key": "data.counter",
"value": 100
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH key IN (v1, v2, v3)
IF key <= filter
MATCH
NumberGreaterThanOrEquals
De operator NumberGreaterThanOrEquals resulteert in waar als de sleutelwaarde groter is dan of gelijk is aan de opgegeven filterwaarde. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter
kenmerk in de data
sectie groter is dan of gelijk is aan 30.
"advancedFilters": [{
"operatorType": "NumberGreaterThanOrEquals",
"key": "data.counter",
"value": 30
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH key IN (v1, v2, v3)
IF key >= filter
MATCH
NumberInRange
De operator NumberInRange resulteert in waar als de sleutelwaarde zich in een van de opgegeven filterbereiken bevindt. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie zich in een van de twee bereiken bevindt: 3.14159 - 999,95, 3000 - 4000.
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
De values
eigenschap is een matrix met bereiken. In het vorige voorbeeld is het een matrix van twee bereiken. Hier volgt een voorbeeld van een matrix met één bereik dat u wilt controleren.
Matrix met één bereik:
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: een matrix met bereiken. In deze pseudocode a
zijn b
lage en hoge waarden van elk bereik in de matrix. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
MATCH
NumberNotInRange
De operator NumberNotInRange resulteert in waar als de sleutelwaarde zich niet in een van de opgegeven filterbereiken bevindt. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie zich in een van de twee bereiken bevindt: 3.14159 - 999,95, 3000 - 4000. Als dat zo is, retourneert de operator onwaar.
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
De values
eigenschap is een matrix met bereiken. In het vorige voorbeeld is het een matrix van twee bereiken. Hier volgt een voorbeeld van een matrix met één bereik dat u wilt controleren.
Matrix met één bereik:
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: een matrix met bereiken. In deze pseudocode a
zijn b
lage en hoge waarden van elk bereik in de matrix. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
FAIL_MATCH
De beschikbare operator voor Booleaanse waarden is:
BoolEquals
De BoolEquals-operator evalueert waar als de sleutelwaarde het opgegeven booleaanse waardefilter is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het isEnabled
kenmerk in de data
sectie is true
.
"advancedFilters": [{
"operatorType": "BoolEquals",
"key": "data.isEnabled",
"value": true
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de booleaanse filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
De beschikbare operators voor tekenreeksen zijn:
StringContains
StringContains resulteert in waar als de sleutelwaarde een van de opgegeven filterwaarden (als subtekenreeksen) bevat. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie een van de opgegeven subtekenreeksen bevat: microsoft
of azure
. Heeft er bijvoorbeeld azure data factory
azure
een.
"advancedFilters": [{
"operatorType": "StringContains",
"key": "data.key1",
"values": [
"microsoft",
"azure"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
MATCH
StringNotContains
De operator StringNotContains resulteert in waar als de sleutel de opgegeven filterwaarden niet bevat als subtekenreeksen. Als de sleutel een van de opgegeven waarden als een subtekenreeks bevat, resulteert de operator in onwaar. In het volgende voorbeeld retourneert de operator alleen waar als de waarde van het key1
kenmerk in de data
sectie niet over en fabrikam
als subtekenreeksen beschiktcontoso
.
"advancedFilters": [{
"operatorType": "StringNotContains",
"key": "data.key1",
"values": [
"contoso",
"fabrikam"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
FAIL_MATCH
Zie de sectie Beperkingen voor de huidige beperking van deze operator.
StringBeginsWith
De operator StringBeginsWith resulteert in waar als de sleutelwaarde begint met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie begint met event
of message
. Begint bijvoorbeeld event hubs
met event
.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
MATCH
StringNotBeginsWith
De operator StringNotBeginsWith resulteert in waar als de sleutelwaarde niet begint met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie niet begint met event
of message
.
"advancedFilters": [{
"operatorType": "StringNotBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
FAIL_MATCH
StringEndsWith
De operator StringEndsWith resulteert in waar als de sleutelwaarde eindigt op een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie eindigt op jpg
of jpeg
.png
Eindigt bijvoorbeeld eventgrid.png
met png
.
"advancedFilters": [{
"operatorType": "StringEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
MATCH
StringNotEndsWith
De operator StringNotEndsWith resulteert in waar als de sleutelwaarde niet eindigt op een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie niet eindigt op jpg
ofjpeg
.png
"advancedFilters": [{
"operatorType": "StringNotEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
FAIL_MATCH
StringIn
De StringIn-operator controleert of de sleutelwaarde exact overeenkomt met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie is contoso
of fabrikam
.factory
"advancedFilters": [{
"operatorType": "StringIn",
"key": "data.key1",
"values": [
"contoso",
"fabrikam",
"factory"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
StringNotIn
De operator StringNotIn controleert of de sleutelwaarde niet overeenkomt met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1
kenmerk in de data
sectie niet aws
bridge
en .
"advancedFilters": [{
"operatorType": "StringNotIn",
"key": "data.key1",
"values": [
"aws",
"bridge"
]
}]
Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3]
en het filter: [a,b,c]
. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
Alle tekenreeksvergelijkingen zijn niet hoofdlettergevoelig.
Notitie
Als de gebeurtenis-JSON niet de geavanceerde filtersleutel bevat, wordt het filter geëvalueerd als niet overeenkomend voor de volgende operators: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringNotEndsWith, StringIn.
Het filter wordt geëvalueerd als overeenkomend voor de volgende operators: NumberNotIn, StringNotIn.
IsNullOrUndefined
De operator IsNullOrUndefined resulteert in waar als de waarde van de sleutel NULL is of niet is gedefinieerd.
{
"operatorType": "IsNullOrUndefined",
"key": "data.key1"
}
In het volgende voorbeeld ontbreekt key1, dus de operator zou waar zijn.
{
"data":
{
"key2": 5
}
}
In het volgende voorbeeld is key1 ingesteld op null, zodat de operator waar zou evalueren.
{
"data":
{
"key1": null
}
}
Als key1 een andere waarde in deze voorbeelden heeft, zou de operator onwaar opleveren.
IsNotNull
De operator IsNotNull resulteert in waar als de waarde van de sleutel niet NULL of niet gedefinieerd is.
{
"operatorType": "IsNotNull",
"key": "data.key1"
}
OF en AND
Als u één filter met meerdere waarden opgeeft, wordt een OR-bewerking uitgevoerd, dus de waarde van het sleutelveld moet een van deze waarden zijn. Hier volgt een voorbeeld:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/",
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
Als u meerdere verschillende filters opgeeft, wordt een AND-bewerking uitgevoerd, zodat aan elke filtervoorwaarde moet worden voldaan. Hier volgt een voorbeeld:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/"
]
},
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
CloudEvents
Gebruik voor gebeurtenissen in het CloudEvents-schema de volgende waarden voor de sleutel: eventid
, source
, eventtype
, eventtypeversion
of gebeurtenisgegevens (zoals data.key1
).
U kunt ook extensiecontextkenmerken gebruiken in CloudEvents 1.0. In het volgende voorbeeld comexampleextension1
comexampleothervalue
zijn extensiecontextkenmerken.
{
"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
}
}
Hier volgt een voorbeeld van het gebruik van een extensiecontextkenmerk in een filter.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "comexampleothervalue",
"values": [
"5",
"1"
]
}]
Beperkingen
Geavanceerd filteren heeft de volgende beperkingen:
- 25 geavanceerde filters en 25 filterwaarden voor alle filters per Event Grid-abonnement
- 512 tekens per tekenreekswaarde
- Toetsen met
.
(punt) in de toetsen. Bijvoorbeeld:http://schemas.microsoft.com/claims/authnclassreference
ofjohn.doe@contoso.com
. Op dit moment is er geen ondersteuning voor escape-tekens in sleutels.
Dezelfde sleutel kan in meer dan één filter worden gebruikt.
Volgende stappen
- Zie Gebeurtenissen filteren voor Event Grid voor meer informatie over het filteren van gebeurtenissen met PowerShell en Azure CLI.
- Zie Aangepaste gebeurtenissen maken en routeren met Azure Event Grid om snel aan de slag te gaan met Event Grid.