Comprendre le filtrage d’événements pour les abonnements Event Grid

Cet article décrit les différentes façons de filtrer les événements qui sont envoyés à votre point de terminaison. Quand vous créez un abonnement à un événement, trois options de filtrage s’offrent à vous :

  • Types d’événements
  • Objet commençant ou se terminant par
  • Opérateurs et champs avancés

Modèle Azure Resource Manager

Les exemples présentés dans cet article sont des extraits de code JSON pour définir des filtres dans des modèles Azure Resource Manager (ARM). Pour obtenir un exemple de modèle ARM complet et le déploiement d’un modèle ARM, consultez Démarrage rapide : Acheminer des événements de stockage Blob vers un point de terminaison web à l’aide d’un modèle ARM. Voici quelques sections supplémentaires relative à la section filter de l’exemple dans le démarrage rapide. Le modèle ARM définit les ressources suivantes.

  • Compte Azure Storage
  • Rubrique système pour le compte de stockage
  • Abonnement aux événements pour la rubrique système. La sous-section filter de la section d’abonnement aux événements s’affiche.

Dans l’exemple suivant, l’abonnement aux événements filtre les événements Microsoft.Storage.BlobCreated et Microsoft.Storage.BlobDeleted.

{
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.EventGrid/systemTopics",
      "apiVersion": "2021-12-01",
      "name": "[parameters('systemTopicName')]",
      "location": "[parameters('location')]",
      "properties": {
        "source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "topicType": "Microsoft.Storage.StorageAccounts"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
      "apiVersion": "2021-12-01",
      "name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
      "properties": {
        "destination": {
          "properties": {
            "endpointUrl": "[parameters('endpoint')]"
          },
          "endpointType": "WebHook"
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Storage.BlobCreated",
            "Microsoft.Storage.BlobDeleted"
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
      ]
    }
  ]
}

Filtrage par type d’événement

Par défaut, tous les types d’événements pour la source de l’événement sont envoyés au point de terminaison. Vous pouvez décider d’envoyer uniquement certains types d’événements à votre point de terminaison. Par exemple, vous pouvez être notifié des mises à jour de vos ressources, mais ne pas être notifié d’autres opérations comme les suppressions. Dans ce cas, effectuez le filtrage par type d’événement Microsoft.Resources.ResourceWriteSuccess. Fournissez un tableau avec les types d’événements, ou spécifiez All pour obtenir tous les types d’événements de la source de l’événement.

La syntaxe JSON pour le filtrage par type d’événement est :

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

Filtrage par objet

Pour le filtrage simple par objet, spécifiez une valeur de départ ou de fin pour l’objet. Par exemple, vous pouvez spécifier que l’objet se termine par .txt pour obtenir uniquement les événements liés au chargement d’un fichier texte sur le compte de stockage. Ou vous pouvez filtrer sur l’objet commençant par /blobServices/default/containers/testcontainer pour obtenir tous les événements pour ce conteneur, mais pas pour d’autres conteneurs du compte de stockage.

Lorsque vous publiez des événements dans des rubriques personnalisées, créez des objets pour vos événements permettant aux abonnés de savoir facilement si l’événement les intéresse. Les abonnés utilisent la propriété d’objet pour filtrer et router des événements. Envisagez d’ajouter le chemin à l’origine de l’événement, de sorte que les abonnés puissent filtrer sur des segments de ce chemin. Le chemin d’accès permet aux abonnés de filtrer les événements avec précision ou à grande échelle. Si vous fournissez un chemin de trois segments comme /A/B/C dans l’objet, les abonnés peuvent filtrer sur le premier segment /A pour obtenir un vaste ensemble d’événements. Ces abonnés obtiennent des événements avec des objets tels que /A/B/C ou /A/D/E. Les autres abonnés peuvent filtrer par /A/B pour obtenir un ensemble plus restreint d’événements.

Exemples (événements de stockage Blob)

Les événements d’objets BLOB peuvent être filtrés par le type d’événement, le nom du conteneur ou le nom de l’objet qui a été créé/supprimé.

Le sujet des événements de stockage d’objets Blob utilise le format suivant :

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

Pour faire correspondre tous les événements pour un compte de stockage, vous pouvez laisser les filtres de sujet vides.

Pour faire correspondre les événements à partir d’objets Blob créés dans un ensemble de conteneurs partageant un préfixe, utilisez un filtre subjectBeginsWith, comme :

/blobServices/default/containers/containerprefix

Pour faire correspondre les événements d’objet Blob créés dans un conteneur spécifique, utilisez un filtre subjectBeginsWith, comme :

/blobServices/default/containers/containername/

Pour faire correspondre les événements d’objet Blob créés dans un conteneur spécifique partageant un préfixe de nom d’objet Blob, utilisez un filtre subjectBeginsWith, comme :

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

Pour faire correspondre les événements des objets blob créés dans un sous-dossier spécifique d’un conteneur, utilisez un filtre subjectBeginsWith comme suit :

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

Pour faire correspondre les événements d’objet Blob créés dans un conteneur spécifique partageant un suffixe d’objet Blob, utilisez un filtre subjectEndsWith, comme « .log » ou « .jpg ».

Filtrage avancé

Pour filtrer sur des valeurs dans les champs de données et spécifier l’opérateur de comparaison, utilisez l’option de filtrage avancé. Dans le filtrage avancé, vous spécifiez les éléments suivants :

  • type d'opérateur : type de comparaison.
  • clé : champ des données d’événement que vous utilisez pour le filtrage. Il peut s’agir d’un nombre, d’une valeur booléenne, d’une chaîne ou d’un tableau.
  • valeurs : valeur ou valeurs à comparer à la clé.

Clé

La clé est le champ des données d’événement que vous utilisez pour le filtrage. Les types possibles sont les suivants :

  • Number

  • Boolean

  • String

  • Array. Vous devez définir la propriété enableAdvancedFilteringOnArrays sur true pour utiliser cette fonctionnalité.

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

Pour les événements dans le schéma des événements cloud, utilisez les valeurs suivantes pour la clé : eventid, source, eventtype, eventtypeversion ou événement de données (comme data.key1).

Si vous utilisez le niveau de base d’Event Grid, pour les événements dans le schéma Event Grid, utilisez les valeurs suivantes pour la clé : ID, Topic, Subject, EventType, DataVersion ou données d’événement (comme data.key1). Pour le schéma d’entrée personnalisé, utilisez les champs de données d’événement (comme data.key1). Pour accéder aux champs de la section de données, utilisez la notation . (point). Par exemple, data.siteName, data.appEventTypeDetail.action pour accéder à siteName ou action pour l’exemple d’événement suivant.

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

Notes

Event Grid ne prend pas en charge le filtrage sur un tableau d’objets. Il autorise uniquement les chaînes, booléens, chiffres et tableaux des mêmes types (comme un tableau entier ou un tableau de chaînes).

Valeurs

Les valeurs peuvent être : nombre, chaîne, booléen ou tableau

Opérateurs

Les opérateurs disponibles pour les nombres sont les suivants :

NumberIn

L’opérateur NumberIn prend la valeur true si la valeur de clé est l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est 5 ou 1.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a, b, c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberNotIn

L’opérateur NumberNotIn prend la valeur true si la valeur de clé n’est pas l’une des valeurs de filere spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data n’est pas 41 ou 0.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a, b, c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberLessThan

L’opérateur NumberLessThan prend la valeur true si la valeur de clé est inférieure à la valeur de filtre spécifiée. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est inférieure à 100.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberGreaterThan

L’opérateur NumberGreaterThan prend la valeur true si la valeur de clé est supérieure à la valeur de filtre spécifiée. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est supérieure à 20.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberLessThanOrEquals

L’opérateur NumberLessThanOrEquals prend la valeur true si la valeur de clé est inférieure ou égale à la valeur de filtre spécifiée. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est inférieure ou égale à 100.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberGreaterThanOrEquals

L’opérateur NumberGreaterThanOrEquals prend la valeur true si la valeur de clé est supérieure ou égale à la valeur de filtre spécifiée. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est supérieure ou égale à 30.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberInRange

L’opérateur NumberInRange prend la valeur true si la valeur de clé est dans l’une des plages de filtres spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est dans l’une de ces deux plages : 3.14159 - 999.95, 3000 - 4000.

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

La propriété values est un tableau de plages. Dans l’exemple précédent, il s’agit d’un tableau de deux plages. Voici un exemple de tableau avec une plage à vérifier.

Tableau avec une plage :

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : un tableau de plages. Dans ce pseudo-code, a et b sont des valeurs basses et élevées de chaque plage du tableau. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

NumberNotInRange

L’opérateur NumberNotInRange prend la valeur true si la valeur de clé n’est pas dans l’une des plages de filtres spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est dans l’une de ces deux plages : 3.14159 - 999.95, 3000 - 4000. Si c’est le cas, l’opérateur retourne false.

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

La propriété values est un tableau de plages. Dans l’exemple précédent, il s’agit d’un tableau de deux plages. Voici un exemple de tableau avec une plage à vérifier.

Tableau avec une plage :

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : un tableau de plages. Dans ce pseudo-code, a et b sont des valeurs basses et élevées de chaque plage du tableau. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

L’opérateur disponible pour les valeurs booléennes est :

BoolEquals

L’opérateur BoolEquals prend la valeur true si la valeur de clé est le filtrede valeur booléenne spécifié. Dans l’exemple suivant, il vérifie si la valeur de l'attribut isEnabled dans la section data est true.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur booléenne du filtre. Voici le pseudo-code avec la clé : [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

Les opérateurs disponibles pour les chaînes sont les suivants :

StringContains

L’opérateur StringContains prend la valeur true si la valeur de clécontient une des valeurs de filtre spécifiées (sous forme de substrings). Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data contient l’une des substrings spécifiées : microsoft ou azure. Par exemple, azure data factory contient azure.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringNotContains

L’opérateur StringNotContains prend la valeur true si la clé ne contient pas les valeurs de filtre spécifiées sous la forme de substrings. Si la clé contient une des valeurs spécifiées sous la forme d’une substring, l’opérateur prend la valeur false. Dans l’exemple suivant, l’opérateur retourne true uniquement si la valeur de l'attribut key1 dans la section data ne contient pas contoso et fabrikam comme substrings.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

Pour connaître les limites actuelles de cet opérateur, consultez la section Limites.

StringBeginsWith

L’opérateur StringBeginsWith prend la valeur true si la valeur de clécommence par l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data commence par event ou message. Par exemple, event hubs commence par event.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringNotBeginsWith

L’opérateur StringNotBeginsWith prend la valeur true si la valeur de cléne commence pas par l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data commence par event ou message.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringEndsWith

L’opérateur StringEndsWith prend la valeur true si la valeur de clése termine par l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data se termine par jpg ou jpeg ou png. Par exemple, eventgrid.png se termine par png .

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringNotEndsWith

L’opérateur StringNotEndsWith prend la valeur true si la valeur de cléne se termine pas par l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data ne se termine pas par jpg ou jpeg ou png.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringIn

L’opérateur StringIn vérifie si la valeur de clécorrespond exactement à l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est contoso ou fabrikam ou factory.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

StringNotIn

L’opérateur StringNotIn vérifie si la valeur de cléne correspond à l’une des valeurs de filtre spécifiées. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data n’est pas aws et bridge.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.

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

Les comparaisons de chaînes ne respectent pas toutes la casse.

Notes

Si le JSON de l’événement ne contient pas de clé de filtre avancée, le filtre est évalué comme non-correspondant pour les opérateurs suivants : NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Le filtre est évalué comme correspondant pour les opérateurs suivants : NumberNotIn, StringNotIn.

IsNullOrUndefined

L’opérateur IsNullOrUndefined prend la valeur true si la valeur de la clé est NULL ou non définie.

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

Dans l’exemple suivant, key1 est manquant, donc l’opérateur prend la valeur true.

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

Dans l’exemple suivant, key1 est défini sur null, donc l’opérateur prend la valeur true.

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

Si key1 a une autre valeur dans ces exemples, l’opérateur prend la valeur false.

IsNotNull

L’opérateur IsNotNull prend la valeur true si la valeur de la clé n’est pas NULL ou n’est pas définie.

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

OR et AND

Si vous spécifiez un seul filtre avec plusieurs valeurs, une opération OU est effectuée : la valeur du champ clé doit donc être une de ces valeurs. Voici un exemple :

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

Si vous spécifiez plusieurs filtres différents, une opération ET est effectuée : chaque condition du filtre doit donc être satisfaite. Voici un exemple :

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

CloudEvents

Pour les événements dans le schéma des événements cloud, utilisez les valeurs suivantes pour la clé : eventid, source, eventtype, eventtypeversion ou événement de données (comme data.key1).

Vous pouvez également utiliser des attributs de contexte d’extension dans CloudEvents 1.0. Dans l’exemple suivant, comexampleextension1 et comexampleothervalue sont des attributs de contexte d’extension.

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

Voici un exemple d’utilisation d’un attribut de contexte d’extension dans un filtre.

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

Limites

Le filtrage avancé présente les limites suivantes :

  • 25 filtres avancés et 25 valeurs de filtre pour tous les filtres par abonnement Event Grid
  • 512 caractères par valeur de type chaîne
  • Clés contenant le signe . (point) . Par exemple, http://schemas.microsoft.com/claims/authnclassreference ou john.doe@contoso.com. Actuellement, les caractères d’échappement ne sont pas pris en charge dans les clés.

La même clé peut être utilisée dans plusieurs filtres.

Étapes suivantes