Grundlegendes zur Ereignisfilterung für Event Grid-Abonnements
Dieser Artikel beschreibt die verschiedenen Möglichkeiten, um zu filtern, welche Ereignisse an den Endpunkt gesendet werden. Beim Erstellen eines Ereignisabonnements haben Sie drei Optionen zum Filtern:
- Ereignistypen
- Betreff beginnt oder endet mit
- Erweiterte Felder und Operatoren
Azure Resource Manager-Vorlage
Die in diesem Artikel gezeigten Beispiele sind JSON-Schnipsel zum Definieren von Filtern in ARM-Vorlagen (Azure Resource Manager). Ein Beispiel für eine vollständige ARM-Vorlage und für die Bereitstellung einer ARM-Vorlage finden Sie unter Schnellstart: Weiterleiten von Blobspeicherereignissen an Webendpunkt mithilfe einer ARM-Vorlage. Hier finden Sie einige weitere Abschnitte zum Abschnitt filter
aus dem Beispiel im Schnellstart. Die ARM-Vorlage definiert die folgenden Ressourcen.
- Azure-Speicherkonto
- Systemthema für das Speicherkonto
- Ereignisabonnement für das Systemthema. Der Unterabschnitt
filter
wird im Abschnitt „Ereignisabonnement“ angezeigt.
Im folgenden Beispiel filtert das Ereignisabonnement nach Microsoft.Storage.BlobCreated
- und Microsoft.Storage.BlobDeleted
-Ereignissen.
{
"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'))]"
]
}
]
}
Ereignistypfilterung
Standardmäßig werden alle Ereignistypen für die Ereignisquelle an den Endpunkt gesendet. Sie können entscheiden, nur bestimmte Ereignistypen an Ihren Endpunkt zu senden. Beispielsweise können Sie sich bezüglich Aktualisierungen Ihrer Ressourcen benachrichtigen lassen, aber nicht zu anderen Vorgängen, wie z.B. das Löschen. Filtern Sie in diesem Fall nach dem Ereignistyp Microsoft.Resources.ResourceWriteSuccess
. Geben Sie ein Array mit den Ereignistypen an oder geben Sie All
an, um alle Ereignistypen für die Ereignisquelle zu erhalten.
Die JSON-Syntax für das Filtern nach Ereignistyp lautet:
"filter": {
"includedEventTypes": [
"Microsoft.Resources.ResourceWriteFailure",
"Microsoft.Resources.ResourceWriteSuccess"
]
}
Betrefffilterung
Zum einfachen Filtern nach Betreff geben Sie einen Start- oder Endwert für den Betreff ein. Sie können beispielsweise angeben, dass der Betreff mit .txt
endet, um nur Ereignisse im Zusammenhang mit dem Hochladen einer Textdatei in das Speicherkonto zu erhalten. Oder Sie können nach Betreffs filtern, die mit /blobServices/default/containers/testcontainer
beginnen, um alle Ereignisse für diesen Container abzurufen, aber nicht für andere Container des Speicherkontos.
Erstellen Sie beim Veröffentlichen von Ereignissen für benutzerdefinierte Themen Betreffinformationen für Ihre Ereignisse, an denen Abonnenten einfach erkennen können, ob Interesse am Ereignis besteht. Abonnenten verwenden die Betreff-Eigenschaft zum Filtern und Weiterleiten von Ereignissen. Erwägen Sie, den Pfad zum Ereignisort hinzuzufügen, damit Abonnenten nach Segmenten dieses Pfads filtern können. Mit dem Pfad können Abonnenten Ereignisse speziell oder allgemein filtern. Wenn Sie einen Pfad mit drei Segmenten im Betreff angeben, z.B. /A/B/C
, können Abonnenten nach dem ersten Segment /A
filtern, um eine umfassendere Gruppe von Ereignissen angezeigt zu bekommen. Diese Abonnenten erhalten Ereignisse mit Betreffinformationen wie /A/B/C
oder /A/D/E
. Andere Abonnenten können nach /A/B
filtern, um eine eingeschränktere Gruppe mit Ereignissen zu erhalten.
Beispiele (Blob Storage-Ereignisse)
Blob-Ereignisse können durch den Ereignistyp, den Containernamen oder den Namen des Objekts gefiltert werden, das erstellt bzw. gelöscht wurde.
Der Betreff von Blob Storage-Ereignissen verwendet das Format:
/blobServices/default/containers/<containername>/blobs/<blobname>
Zur Übereinstimmung mit allen Ereignissen für ein Speicherkonto können Sie den Betrefffilter leer lassen.
Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem Satz von Containern erstellt wurden und ein gemeinsames Präfix verwenden, einen subjectBeginsWith
-Filter wie:
/blobServices/default/containers/containerprefix
Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden, einen subjectBeginsWith
-Filter wie:
/blobServices/default/containers/containername/
Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden und ein gemeinsames Blobnamenspräfix verwenden, einen subjectBeginsWith
-Filter wie:
/blobServices/default/containers/containername/blobs/blobprefix
Um Ereignisse aus Blobs abzugleichen, die in einem bestimmten Unterordner eines Containers erstellt werden, verwenden Sie einen subjectBeginsWith
-Filter wie:
/blobServices/default/containers/{containername}/blobs/{subfolder}/
Verwenden Sie zur Übereinstimmung mit Ereignissen aus Blobs, die in einem bestimmten Container erstellt wurden und ein gemeinsames Blobsuffix verwenden, einen subjectEndsWith
-Filter wie „.log“ oder „.jpg“.
Erweiterte Filterung
Um nach Werten in den Datenfeldern zu filtern und den Vergleichsoperator anzugeben, verwenden Sie die erweiterte Filteroption. Bei der erweiterten Filterung können Sie folgende Informationen angeben:
- Operatortyp – Typ des Vergleichs.
- Schlüssel – Feld in den Ereignisdaten, die Sie für die Filterung verwenden. Dabei kann es sich um eine Zahl, einen booleschen Wert, eine Zeichenfolge oder ein Array handeln.
- Werte – Werte, die mit dem Schlüssel verglichen werden sollen.
Schlüssel
Das Feld „key“ in den Ereignisdaten wird für die Filterung verwendet. Mögliche Typen:
Number
Boolean
String
Array. Legen Sie die Eigenschaft
enableAdvancedFilteringOnArrays
auf „true“ fest, wenn Sie dieses Feature verwenden möchten."filter": { "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log", "subjectEndsWith": ".jpg", "enableAdvancedFilteringOnArrays": true }
Verwenden Sie für Ereignisse im CloudEvents-Schema die folgenden Werte für „key“: eventid
, source
, eventtype
, eventtypeversion
oder Ereignisdaten wie data.key1
.
Wenn Sie die Basisversion für Ereignisse im Event Grid-Schema von Event Grid verwenden, verwenden Sie die folgenden Werte für „Schlüssel“: ID
, Topic
, Subject
, EventType
, DataVersion
oder Ereignisdaten wie data.key1
. Verwenden Sie für ein benutzerdefiniertes Eingabeschema die Ereignisdatenfelder wie data.key1
. Verwenden Sie den Punktoperator (.
), um auf Felder im Datenabschnitt zuzugreifen. Verwenden Sie beispielsweise data.siteName
oder data.appEventTypeDetail.action
, um auf siteName
oder action
im folgenden Beispielereignis zuzugreifen.
"data": {
"appEventTypeDetail": {
"action": "Started"
},
"siteName": "<site-name>",
"clientRequestId": "None",
"correlationRequestId": "None",
"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
"address": "None",
"verb": "None"
},
Hinweis
Event Grid unterstützt keine Filterung auf ein Array von Objekten. Es erlaubt nur String, Boolean, Zahlen und Array desselben Typs (wie Integer-Array oder String-Array).
Werte
Zulässige Werte sind Zahlen, Zeichenfolgen, boolesche Werte oder Arrays.
Operatoren
Die verfügbaren Operatoren für Zahlen sind:
NumberIn
Der NumberIn-Operator wird als „true“ ausgewertet, wenn der key-Wert einem der angegebenen filter-Werte entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
5 oder 1 ist.
"advancedFilters": [{
"operatorType": "NumberIn",
"key": "data.counter",
"values": [
5,
1
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a, b, c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
NumberNotIn
Der NumberNotIn-Operator wird als „true“ ausgewertet, wenn der key-Wert keinem der angegebenen filter-Werte entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
nicht 41 und nicht 0 ist.
"advancedFilters": [{
"operatorType": "NumberNotIn",
"key": "data.counter",
"values": [
41,
0
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a, b, c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
NumberLessThan
Der NumberLessThan-Operator wird als „true“ ausgewertet, wenn der key-Wert kleiner als der angegebene filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
kleiner als 100 ist.
"advancedFilters": [{
"operatorType": "NumberLessThan",
"key": "data.counter",
"value": 100
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH key IN (v1, v2, v3)
IF key < filter
MATCH
NumberGreaterThan
Der NumberGreaterThan-Operator wird als „true“ ausgewertet, wenn der key-Wert größer als der angegebene filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
größer als 20 ist.
"advancedFilters": [{
"operatorType": "NumberGreaterThan",
"key": "data.counter",
"value": 20
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH key IN (v1, v2, v3)
IF key > filter
MATCH
NumberLessThanOrEquals
Der NumberLessThanOrEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert kleiner oder gleich dem angegebenen filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
kleiner oder gleich 100 ist.
"advancedFilters": [{
"operatorType": "NumberLessThanOrEquals",
"key": "data.counter",
"value": 100
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH key IN (v1, v2, v3)
IF key <= filter
MATCH
NumberGreaterThanOrEquals
Der NumberGreaterThanOrEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert größer oder gleich dem angegebenen filter-Wert ist. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs counter
im Abschnitt data
größer oder gleich 30 ist.
"advancedFilters": [{
"operatorType": "NumberGreaterThanOrEquals",
"key": "data.counter",
"value": 30
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den filter-Werten verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH key IN (v1, v2, v3)
IF key >= filter
MATCH
NumberInRange
Der NumberInRange-Operator wird als „true“ ausgewertet, wenn der key-Wert in einem der angegebenen filter-Bereiche liegt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
im Bereich von 3,14159 bis 999,95 oder von 3000 bis 4000 liegt.
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
Die Eigenschaft values
ist ein Array, das aus Bereichen besteht. Im vorherigen Beispiel handelt es sich um ein Array aus zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem zu überprüfenden Bereich.
Array mit einem Bereich:
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und filter-Werten, die ein Array aus Bereichen darstellen. In diesem Pseudo entsprechen a
und b
dem Mindest- bzw. Maximalwert jedes Bereichs im Array. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
MATCH
NumberNotInRange
Der NumberNotInRange-Operator wird als „true“ ausgewertet, wenn der key-Wert in keinem der angegebenen filter-Bereiche liegt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
im Bereich von 3,14159 bis 999,95 oder von 3000 bis 4000 liegt. Wenn das der Fall ist, gibt der Operator „false“ zurück.
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
Die Eigenschaft values
ist ein Array, das aus Bereichen besteht. Im vorherigen Beispiel handelt es sich um ein Array aus zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem zu überprüfenden Bereich.
Array mit einem Bereich:
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und filter-Werten, die ein Array aus Bereichen darstellen. In diesem Pseudo entsprechen a
und b
dem Mindest- bzw. Maximalwert jedes Bereichs im Array. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
FAIL_MATCH
Der verfügbare Operator für boolesche Werte ist:
BoolEquals
Der BoolEquals-Operator wird als „true“ ausgewertet, wenn der key-Wert dem für filter angegebenen booleschen Wert entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs isEnabled
im Abschnitt data
true
ist.
"advancedFilters": [{
"operatorType": "BoolEquals",
"key": "data.isEnabled",
"value": true
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit den booleschen Werten für „filter“ verglichen. Hier sehen Sie den Pseudocode mit den key-Werten [v1, v2, v3]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
Die verfügbaren Operatoren für Zeichenfolgen sind:
StringContains
Der StringContains-Operator wird als „true“ ausgewertet, wenn der key-Wert einen der angegebenen filter-Werte als Teilzeichenfolge enthält. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
eine der angegebenen Teilzeichenfolgen (microsoft
oder azure
) enthält. azure data factory
enthält beispielsweise azure
.
"advancedFilters": [{
"operatorType": "StringContains",
"key": "data.key1",
"values": [
"microsoft",
"azure"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
MATCH
StringNotContains
Der StringNotContains-Operator wird als „true“ ausgewertet, wenn der key-Wert keinen der angegebenen filter-Werte als Teilzeichenfolge enthält. Wenn der Schlüssel einen der angegebenen Werte als Teilzeichenfolge enthält, wird der Operator als „false“ ausgewertet. Im folgenden Beispiel gibt der Operator nur „true“ zurück, wenn der Wert des Attributs key1
im Abschnitt data
weder die Teilzeichenfolge contoso
noch fabrikam
enthält.
"advancedFilters": [{
"operatorType": "StringNotContains",
"key": "data.key1",
"values": [
"contoso",
"fabrikam"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
FAIL_MATCH
Weitere Informationen zur aktuellen Einschränkung dieses Operators finden Sie im Abschnitt Einschränkungen.
StringBeginsWith
Der StringBeginsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert mit einem der angegebenen filter-Werte beginnt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
mit event
oder message
beginnt. event hubs
beginnt beispielsweise mit event
.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
MATCH
StringNotBeginsWith
Der StringNotBeginsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht mit einem der angegebenen filter-Werte beginnt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
nicht mit event
oder message
beginnt.
"advancedFilters": [{
"operatorType": "StringNotBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
FAIL_MATCH
StringEndsWith
Der StringEndsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert mit einem der angegebenen filter-Werte endet. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
mit jpg
, jpeg
oder png
endet. eventgrid.png
endet beispielsweise mit png
.
"advancedFilters": [{
"operatorType": "StringEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
MATCH
StringNotEndsWith
Der StringNotEndsWith-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht mit einem der angegebenen filter-Werte endet. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
nicht mit jpg
, jpeg
oder png
endet.
"advancedFilters": [{
"operatorType": "StringNotEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
FAIL_MATCH
StringIn
Der StringIn-Operator überprüft, ob der key-Wert exakt mit einem der angegebenen filter-Werte übereinstimmt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
genau contoso
, fabrikam
oder factory
ist.
"advancedFilters": [{
"operatorType": "StringIn",
"key": "data.key1",
"values": [
"contoso",
"fabrikam",
"factory"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
StringNotIn
Der StringNotIn-Operator überprüft, ob der key-Wert mit keinem der angegebenen filter-Werte übereinstimmt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs key1
im Abschnitt data
nicht aws
und nicht bridge
ist.
"advancedFilters": [{
"operatorType": "StringNotIn",
"key": "data.key1",
"values": [
"aws",
"bridge"
]
}]
Wenn es sich bei „key“ um ein Array handelt, werden alle Werte im Array mit dem Array der filter-Werte verglichen. Hier sehen Sie Pseudocode mit den key-Werten [v1, v2, v3]
und den filter-Werten [a,b,c]
. Sämtliche Werte von „key“, deren Datentypen nicht mit den Datentypen von „filter“ übereinstimmen, werden ignoriert.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
Bei sämtlichen Zeichenfolgenvergleichen wird die Groß-/Kleinschreibung nicht beachtet.
Hinweis
Wenn der JSON-Code für das Ereignis den erweiterten Filterschlüssel nicht enthält, wird der Filter von den folgenden Operatoren als nicht übereinstimmend ausgewertet: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith und StringIn.
Der Filter wird für die folgenden Operatoren als übereinstimmend ausgewertet: NumberNotIn und StringNotIn.
IsNullOrUndefined
Der IsNullOrUndefined-Operator wird als „true“ ausgewertet, wenn der key-Wert NULL lautet oder undefiniert ist.
{
"operatorType": "IsNullOrUndefined",
"key": "data.key1"
}
Im folgenden Beispiel fehlt key1, deshalb wird der Operator als „true“ ausgewertet.
{
"data":
{
"key2": 5
}
}
Im folgenden Beispiel ist key1 auf NULL festgelegt, deshalb wird der Operator als „true“ ausgewertet.
{
"data":
{
"key1": null
}
}
Wenn Schlüssel 1 in diesen Beispielen einen anderen Wert aufweisen würde, würde der Operator als „falsch“ ausgewertet werden.
IsNotNull
Der IsNotNull-Operator wird als „true“ ausgewertet, wenn der key-Wert nicht NULL lautet oder nicht undefiniert ist.
{
"operatorType": "IsNotNull",
"key": "data.key1"
}
OR und AND
Wenn Sie einen einzelnen Filter mit mehreren Werten angeben, wird ein OR-Vorgang ausgeführt, daher muss das Schlüsselfeld einen der folgenden Werte aufweisen. Hier sehen Sie ein Beispiel:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/",
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
Wenn Sie mehrere verschiedene Filter angeben, wird ein AND-Vorgang ausgeführt, sodass jede Filterbedingung erfüllt sein muss. Hier sehen Sie ein Beispiel:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/"
]
},
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
CloudEvents
Verwenden Sie für Ereignisse im CloudEvents-Schema die folgenden Werte für „key“: eventid
, source
, eventtype
, eventtypeversion
oder Ereignisdaten wie data.key1
.
Sie können auch die Erweiterungskontextattribute in CloudEvents 1.0 verwenden. Im folgenden Beispiel entsprechen comexampleextension1
und comexampleothervalue
den Erweiterungskontextattributen.
{
"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 sehen Sie ein Beispiel für die Verwendung eines Erweiterungskontextattributs in einem Filter.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "comexampleothervalue",
"values": [
"5",
"1"
]
}]
Einschränkungen
Für die erweiterte Filterung gelten folgende Einschränkungen:
- 25 erweiterte Filter und 25 Filterwerte für alle Filter pro Event Grid-Abonnement
- 512 Zeichen pro Zeichenfolgenwert
- Schlüssel mit enthaltenem
.
(Punktzeichen) . Zum Beispiel:http://schemas.microsoft.com/claims/authnclassreference
oderjohn.doe@contoso.com
. Derzeit gibt es keine Unterstützung für Escapezeichen in Schlüsseln.
Der gleiche Schlüssel kann in mehr als einem Filter verwendet werden.
Nächste Schritte
- Informationen zum Filtern von Ereignissen mit PowerShell und Azure CLI finden Sie unter Filtern von Ereignissen für Event Grid.
- Um sich schnell mit der Verwendung von Event Grid vertraut zu machen, lesen Sie Erstellen und Weiterleiten benutzerdefinierter Ereignisse mit Azure Event Grid.