Informazioni sui filtri eventi per le sottoscrizioni di Griglia di eventi

Questo articolo descrive i diversi modi per filtrare gli eventi che vengono inviati all'endpoint. Quando si crea una sottoscrizione di eventi, sono disponibili tre opzioni di filtro:

  • Tipi di evento
  • L'oggetto inizia o termina con
  • Operatori e campi avanzati

Modello di Azure Resource Manager

Gli esempi illustrati in questo articolo sono frammenti di codice JSON per la definizione di filtri nei modelli di Azure Resource Manager (ARM). Per un esempio di modello di Resource Manager completo e distribuzione di un modello di Resource Manager, vedere Avvio rapido: Instradare gli eventi di archiviazione BLOB all'endpoint Web usando un modello di Resource Manager. Ecco altre sezioni relative alla filter sezione dell'esempio nell'argomento di avvio rapido. Il modello di Resource Manager definisce le risorse seguenti.

  • Account di archiviazione di Azure
  • Argomento di sistema per l'account di archiviazione
  • Sottoscrizione di eventi per l'argomento di sistema. La sottosezione verrà visualizzata filter nella sezione sottoscrizione di eventi.

Nell'esempio seguente la sottoscrizione di eventi filtra gli Microsoft.Storage.BlobCreated eventi e 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'))]"
      ]
    }
  ]
}

Filtro in base al tipo di evento

Per impostazione predefinita, tutti i tipi di evento dell'origine eventi vengono inviati all'endpoint. È possibile decidere di inviare all'endpoint solo determinati tipi di evento. È ad esempio possibile ricevere una notifica in caso di aggiornamenti delle risorse, ma non per altre operazioni, come le eliminazioni. In tal caso, filtrare in base al tipo di evento Microsoft.Resources.ResourceWriteSuccess. Fornire una matrice con i tipi di evento o specificare All per ottenere tutti i tipi di evento per l'origine eventi.

La sintassi JSON per l'applicazione di un filtro in base al tipo di evento è la seguente:

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

Filtro in base all'oggetto

Per applicare un filtro semplice in base all'oggetto, specificare un valore iniziale o finale per l'oggetto. È ad esempio possibile specificare che l'oggetto termina con .txt per ottenere solo gli eventi correlati al caricamento di un file di testo in un account di archiviazione. È anche possibile specificare che l'oggetto inizia con /blobServices/default/containers/testcontainer per ottenere tutti gli eventi per il contenitore specificato, ma non per altri contenitori nell'account di archiviazione.

Quando si pubblicano eventi in argomenti personalizzati, creare oggetti per gli eventi in modo che i sottoscrittori possano sapere più facilmente se sono interessati all'evento. I Sottoscrittori usano la proprietà subject per filtrare e instradare gli eventi. È consigliabile aggiungere il percorso in cui si è verificato l'evento, in modo che i sottoscrittori possano filtrare in base ai segmenti di tale percorso. Il percorso consente ai sottoscrittori di filtrare gli eventi in modo più ampio o ristretto. Se ad esempio si specifica un percorso di tre segmenti, come /A/B/C nell'oggetto, i sottoscrittori possono filtrare in base al primo segmento /A per ottenere un ampio set di eventi. Tali sottoscrittori ricevono eventi con oggetti come /A/B/C o /A/D/E. Altri sottoscrittori possono filtrare in base a /A/B per ottenere un set di eventi più ristretto.

Esempi (eventi di Archiviazione BLOB)

Gli eventi BLOB possono essere filtrati in base al tipo di evento, al nome del contenitore o al nome dell'oggetto creato o eliminato.

L'oggetto di eventi di archiviazione BLOB usa il formato:

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

Per trovare la corrispondenza di tutti gli eventi per un account di archiviazione, è possibile non impostare alcun filtro dell'oggetto.

Per trovare la corrispondenza di eventi da BLOB creati in un set di contenitori che condividono un prefisso, usare un filtro subjectBeginsWith come:

/blobServices/default/containers/containerprefix

Per trovare la corrispondenza di eventi da BLOB creati in un contenitore specifico, usare un filtro subjectBeginsWith come:

/blobServices/default/containers/containername/

Per trovare la corrispondenza di eventi da BLOB creati in un contenitore specifico che condividono un prefisso di nome di BLOB, usare un filtro subjectBeginsWith come:

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

Per trovare una corrispondenza con gli eventi dei BLOB creati in una sottocartella specifica di un contenitore, usare un subjectBeginsWith filtro simile al seguente:

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

Per trovare la corrispondenza di eventi da BLOB creati in un contenitore specifico che condividono un suffisso di BLOB, usare un filtro subjectEndsWith, ad esempio ".log" o ".jpg".

Filtro avanzato

Per filtrare i valori nei campi dati e specificare l'operatore di confronto, usare l'opzione di filtro avanzato. Nel filtro avanzato specificare:

  • operator type: il tipo di confronto.
  • key: il campo nei dati dell'evento che viene usato per il filtro. Può essere un numero, un valore booleano, una stringa o una matrice.
  • values : valore o valori da confrontare con la chiave.

Key

Key è il campo nei dati dell'evento usati per filtrare. Può essere uno dei tipi seguenti:

  • Numero

  • Boolean

  • Stringa

  • Matrice. Per usare questa funzionalità, è necessario impostare la enableAdvancedFilteringOnArrays proprietà su true.

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

Per gli eventi nello schema Degli eventi cloud, usare i valori seguenti per la chiave: eventid, source, eventtypeeventtypeversion, o i dati dell'evento , ad esempio data.key1.

Se si usa il livello di base di Griglia di eventi, per gli eventi nello schema di Griglia di eventi, usare i valori seguenti per la chiave: ID, SubjectTopic, EventType, DataVersion, o i dati dell'evento , ad esempio data.key1. Per lo schema di input personalizzato, usare i campi dati dell'evento ( ad esempio data.key1). Per accedere ai campi nella sezione dati, usare la . notazione (punto). Ad esempio, data.siteName, data.appEventTypeDetail.action per accedere siteName o action per l'evento di esempio seguente.

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

Nota

Griglia di eventi non supporta il filtro in base a una matrice di oggetti. Consente solo String, Boolean, Numbers e Array degli stessi tipi (ad esempio matrice integer o matrice di stringhe).

Valori

I valori possono essere: number, string, boolean o array

Operatori

Gli operatori disponibili per i numeri sono:

NumberIn

L'operatore NumberIn restituisce true se il valore della chiave è uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione è 5 o 1.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a, b, c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberNotIn

NumberNotIn restituisce true se il valore della chiave non è uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione non è 41 e 0.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a, b, c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberLessThan

L'operatore NumberLessThan restituisce true se il valore della chiave è minore del valore del filtro specificato. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione è minore di 100.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto al valore del filtro. Di seguito è riportato lo pseudocoded con la chiave : [v1, v2, v3]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberGreaterThan

L'operatore NumberGreaterThan restituisce true se il valore della chiave è maggiore del valore del filtro specificato. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione è maggiore di 20.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto al valore del filtro. Di seguito è riportato lo pseudocoded con la chiave : [v1, v2, v3]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberLessThanOrEquals

L'operatore NumberLessThanOrEquals restituisce true se il valore della chiave è minore o uguale al valore del filtro specificato. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione è minore o uguale a 100.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto al valore del filtro. Di seguito è riportato lo pseudocoded con la chiave : [v1, v2, v3]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberGreaterThanOrEquals

L'operatore NumberGreaterThanOrEquals restituisce true se il valore della chiave è maggiore o uguale al valore di filtro specificato. Nell'esempio seguente viene verificato se il valore dell'attributo counter nella data sezione è maggiore o uguale a 30.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto al valore del filtro. Di seguito è riportato lo pseudocoded con la chiave : [v1, v2, v3]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberInRange

L'operatore NumberInRange restituisce true se il valore della chiave si trova in uno degli intervalli di filtri specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione si trova in uno dei due intervalli: 3.14159 - 999.95, 3000 - 4000.

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

La values proprietà è una matrice di intervalli. Nell'esempio precedente si tratta di una matrice di due intervalli. Ecco un esempio di matrice con un intervallo da controllare.

Matrice con un intervallo:

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Ecco lo pseudo-codice con la chiave: [v1, v2, v3] e il filtro: una matrice di intervalli. In questo pseudo codice a e b sono valori bassi e alti di ogni intervallo nella matrice. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

NumberNotInRange

L'operatore NumberNotInRange restituisce true se il valore della chiave non si trova in uno degli intervalli di filtri specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione si trova in uno dei due intervalli: 3.14159 - 999.95, 3000 - 4000. In caso affermativo, l'operatore restituisce false.

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

La values proprietà è una matrice di intervalli. Nell'esempio precedente si tratta di una matrice di due intervalli. Ecco un esempio di matrice con un intervallo da controllare.

Matrice con un intervallo:

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Ecco lo pseudo-codice con la chiave: [v1, v2, v3] e il filtro: una matrice di intervalli. In questo pseudo codice a e b sono valori bassi e alti di ogni intervallo nella matrice. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

L'operatore disponibile per i valori booleani è:

BoolEquals

L'operatore BoolEquals restituisce true se il valore della chiave è il filtro valore booleano specificato. Nell'esempio seguente viene verificato se il valore dell'attributo isEnabled nella data sezione è true.

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

Se la chiave è una matrice, tutti i valori nella matrice vengono controllati rispetto al valore booleano del filtro. Di seguito è riportato lo pseudocoded con la chiave : [v1, v2, v3]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

Gli operatori disponibili per le stringhe sono:

StringContains

StringContains restituisce true se il valore della chiave contiene uno dei valori di filtro specificati (come sottostringhe). Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione contiene una delle sottostringhe specificate: microsoft o azure. Ad esempio, azure data factory ha azure in esso.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringNotContains

L'operatore StringNotContains restituisce true se la chiave non contiene i valori di filtro specificati come sottostringhe. Se la chiave contiene uno dei valori specificati come sottostringa, l'operatore restituisce false. Nell'esempio seguente l'operatore restituisce true solo se il valore dell'attributo key1 nella data sezione non ha contoso e fabrikam come sottostringhe.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

Vedere la sezione Limitazioni per la limitazione corrente di questo operatore.

StringBeginsWith

L'operatore StringBeginsWith restituisce true se il valore della chiave inizia con uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione inizia con event o message. Ad esempio, event hubs inizia con event.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringNotBeginsWith

L'operatore StringNotBeginsWith restituisce true se il valore della chiave non inizia con uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione non inizia con event o message.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringEndsWith

L'operatore StringEndsWith restituisce true se il valore della chiave termina con uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione termina con jpg o jpeg o png. Ad esempio, eventgrid.png termina con png.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringNotEndsWith

L'operatore StringNotEndsWith restituisce true se il valore della chiave non termina con uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione non termina con jpg o jpeg o png.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringIn

L'operatore StringIn controlla se il valore della chiave corrisponde esattamente a uno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione è contoso o fabrikamfactory.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

StringNotIn

L'operatore StringNotIn controlla se il valore della chiave non corrisponde ad alcuno dei valori di filtro specificati. Nell'esempio seguente viene verificato se il valore dell'attributo key1 nella data sezione non aws è e bridge.

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

Se la chiave è una matrice, tutti i valori della matrice vengono controllati rispetto alla matrice di valori di filtro. Di seguito è riportato lo pseudocode con la chiave : [v1, v2, v3] e il filtro : [a,b,c]. Tutti i valori chiave con tipi di dati che non corrispondono al tipo di dati del filtro vengono ignorati.

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

Tutti i confronti tra stringhe non fanno distinzione tra maiuscole e minuscole.

Nota

Se json dell'evento non contiene la chiave di filtro avanzata, il filtro viene valutato come non corrispondente per gli operatori seguenti: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringNotEndsWith, StringIn.

Il filtro viene valutato come corrispondente per gli operatori seguenti: NumberNotIn, StringNotIn.

IsNullOrUndefined

L'operatore IsNullOrUndefined restituisce true se il valore della chiave è NULL o non definito.

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

Nell'esempio seguente, key1 è mancante, quindi l'operatore restituisce true.

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

Nell'esempio seguente key1 è impostato su Null, quindi l'operatore restituisce true.

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

Se key1 ha qualsiasi altro valore in questi esempi, l'operatore restituirà false.

IsNotNull

L'operatore IsNotNull restituisce true se il valore della chiave non è NULL o non definito.

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

OR and AND

Se si specifica un singolo filtro con più valori, viene eseguita un'operazione OR , pertanto il valore del campo chiave deve essere uno di questi valori. Ecco un esempio:

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

Se si specificano più filtri diversi, viene eseguita un'operazione AND , quindi ogni condizione di filtro deve essere soddisfatta. Ecco un esempio:

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

CloudEvents

Per gli eventi nello schema CloudEvents, usare i valori seguenti per la chiave: eventid, source, eventtypeeventtypeversion, o i dati dell'evento , ad esempio data.key1.

È anche possibile usare gli attributi del contesto dell'estensione in CloudEvents 1.0. Nell'esempio comexampleextension1 seguente e comexampleothervalue sono attributi del contesto di estensione.

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

Ecco un esempio di uso di un attributo del contesto di estensione in un filtro.

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

Limiti

I filtri avanzati presentano le limitazioni seguenti:

  • 25 filtri avanzati e 25 valori di filtro in tutti i filtri per ogni sottoscrizione di Griglia di eventi
  • 512 caratteri per ogni valore stringa
  • Chiavi con . carattere (punto) in esse. Ad esempio, http://schemas.microsoft.com/claims/authnclassreference o john.doe@contoso.com. Attualmente non è disponibile alcun supporto per i caratteri di escape nelle chiavi.

È possibile usare l'elemento key in più filtri.

Passaggi successivi