Descripción del filtrado de eventos para suscripciones de Event Grid

En este artículo se describen las distintas formas de filtrar los eventos que se envían al punto de conexión. Al crear una suscripción de eventos, se le presentan tres opciones de filtrado:

  • Tipos de eventos
  • El asunto empieza o termina con
  • Operadores y campos avanzados

Plantilla del Administrador de recursos de Azure

Los ejemplos que se muestran en este artículo son fragmentos de código JSON para definir filtros en plantillas de Azure Resource Manager (ARM). Para obtener un ejemplo de una plantilla de ARM completa e implementarla, consulte Inicio rápido: Enrutamiento de eventos de Blob Storage al punto de conexión web mediante una plantilla de ARM. Estas son algunas secciones más sobre la sección filter del ejemplo del inicio rápido. La plantilla de ARM define los recursos siguientes.

  • Cuenta de almacenamiento de Azure
  • Tema del sistema para la cuenta de almacenamiento
  • Suscripción de eventos para el tema del sistema. Verá la subsección filter en la sección de suscripción de eventos.

En el ejemplo siguiente, la suscripción de eventos filtra los eventos Microsoft.Storage.BlobCreated y 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'))]"
      ]
    }
  ]
}

Filtrado de tipos de evento

De forma predeterminada, todos los tipos de evento del origen de eventos se envían al punto de conexión. Puede decidir enviar solo determinados tipos de eventos al punto de conexión. Por ejemplo, puede recibir una notificación de las actualizaciones de sus recursos pero no de otras operaciones, como las eliminaciones. En ese caso, filtre por el tipo de evento Microsoft.Resources.ResourceWriteSuccess. Proporcione una matriz con los tipos de eventos, o especifique All para obtener todos los tipos de evento para el origen del evento.

La sintaxis JSON para el filtrado por tipo de evento es:

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

Filtrado de asunto

Para filtrar solo por asunto, especifique un valor inicial o final para el asunto. Por ejemplo, puede especificar que el asunto termina con .txt para obtener solo los eventos relacionados con la carga de un archivo de texto a la cuenta de almacenamiento. O bien, puede filtrar que el sujeto empieza por /blobServices/default/containers/testcontainer para obtener todos los eventos de ese contenedor, pero no otros contenedores en la cuenta de almacenamiento.

Al publicar eventos en temas personalizados, cree asuntos para los eventos que faciliten que los suscriptores sepan si les interesa el evento. Los suscriptores usan la propiedad del asunto para filtrar y redirigir eventos. Considere la posibilidad de agregar la ruta de acceso de donde se produjo el evento, para que los suscriptores pueden filtrar por los segmentos de esa ruta de acceso. La ruta de acceso permite que los suscriptores filtren eventos de una manera más amplia o más restringida. Si proporciona una ruta de acceso de tres segmentos como /A/B/C en el asunto, los suscriptores pueden filtrar por el primer segmento /A para obtener un amplio conjunto de eventos. Esos suscriptores obtienen eventos con asuntos como /A/B/C o /A/D/E. Otros suscriptores pueden filtrar por /A/B para obtener un conjunto de eventos más reducido.

Ejemplos (eventos de Blob Storage)

Los eventos de blob se pueden filtrar por el tipo de evento, el nombre del contenedor o el nombre del objeto que se creó o eliminó.

El asunto de los eventos de Blob Storage utiliza el formato:

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

Para que coincida con todos los eventos de una cuenta de almacenamiento, los filtros de asunto se pueden dejar vacíos.

Para que coincida con eventos de blobs creados en un conjunto de contenedores que comparten un prefijo, utilice un filtro subjectBeginsWith como:

/blobServices/default/containers/containerprefix

Para que coincida con eventos de blobs creados en un contenedor concreto, utilice un filtro subjectBeginsWith como:

/blobServices/default/containers/containername/

Para que coincida con eventos de blobs creados en un contenedor concreto que comparten un prefijo de nombre de blob, utilice un filtro subjectBeginsWith como:

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

Para hacer coincidir eventos de blobs creados en una subcarpeta específica de un contenedor, use un filtro de subjectBeginsWith como:

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

Para que coincida con eventos de blobs creados en un contenedor concreto que comparten un sufijo de blob, utilice un filtro subjectEndsWith como ".log" o ".jpg".

Filtrado avanzado

Para filtrar por valores en los campos de datos y especificar el operador de comparación, use la opción de filtrado avanzada. En el filtrado avanzado, se especifica lo siguiente:

  • tipo de operador: el tipo de comparación.
  • clave: el campo de datos de evento que se usa para filtrar. Puede ser un número, un valor booleano, una cadena o una matriz.
  • valores: el valor o los valores que se compararán con la clave.

Clave

Clave es el campo de datos de evento que se usa para filtrar. Puede ser uno de los siguientes tipos:

  • Number

  • Boolean

  • String

  • Matriz. Debe establecer la propiedad enableAdvancedFilteringOnArrays en true para usar esta característica.

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

Para los eventos del esquema de Cloud Events, utilice los valores siguientes para la clave: eventid, source, eventtype, eventtypeversion o datos de evento (como data.key1).

Si usa el nivel básico de Event Grid, para eventos en el esquema de Event Grid, use los siguientes valores para la clave:ID, Topic, Subject, EventType, DataVersion o datos de eventos (como data.key1). Para el esquema de entrada personalizado, use los campos de datos de evento (como data.key1). Para acceder a los campos de la sección de datos, use la notación . (punto). Por ejemplo, data.siteName, data.appEventTypeDetail.action para acceder a siteName o action para el siguiente evento de ejemplo.

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

Nota:

Event Grid no admite el filtrado en una matriz de objetos. Solo permite cadenas, booleanos, números y matrices del mismo tipo (como matrices de enteros o matrices de cadenas).

Valores

Los valores pueden ser: número, cadena, booleano o matriz.

Operadores

Los operadores disponibles para los números son:

NumberIn

El operador NumberIn se evalúa en true si el valor de la clave es uno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data es 5 o 1.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a, b, c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberNotIn

El operador NumberNotIn se evalúa en true si el valor de la claveno es ninguno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data no es 41 y 0.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a, b, c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberLessThan

El operador NumberLessThan se evalúa en true si el valor de la clave es menor que el valor de filtro especificado. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data es menor que 100.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con el valor de filtro. Este es el pseudocódigo con la clave: [v1, v2, v3]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberGreaterThan

El operador NumberGreaterThan se evalúa en true si el valor de la clave es mayor que el valor de filtro especificado. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data es mayor que 20.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con el valor de filtro. Este es el pseudocódigo con la clave: [v1, v2, v3]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberLessThanOrEquals

El operador NumberLessThanOrEquals se evalúa en true si el valor de la clave es menor o igual que el valor de filtro especificado. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data es menor o igual que 100.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con el valor de filtro. Este es el pseudocódigo con la clave: [v1, v2, v3]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberGreaterThanOrEquals

El operador NumberGreaterThanOrEquals se evalúa en true si el valor de la clave es mayor o igual que el valor de filtro especificado. En el ejemplo siguiente, comprueba si el valor del atributo counter de la sección data es mayor o igual que 30.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con el valor de filtro. Este es el pseudocódigo con la clave: [v1, v2, v3]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberInRange

El operador NumberInRange se evalúa en true si el valor de la clave es uno de los intervalos de filtros especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data se encuentra dentro de uno de los dos intervalos: 3.14159 - 999.95, 3000 - 4000.

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

La propiedad values es una matriz de intervalos. En el ejemplo anterior, es una matriz de dos intervalos. Este es un ejemplo de una matriz con un intervalo para comprobar.

Matriz con un intervalo:

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y una matriz de intervalos como filtro. En este pseudocódigo, a y b son los valores inferior y superior de cada intervalo de la matriz. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

NumberNotInRange

El operador NumberNotInRange se evalúa en true si el valor de la claveno se encuentra dentro de ninguno de los intervalos de filtros especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data se encuentra dentro de uno de los dos intervalos: 3.14159 - 999.95, 3000 - 4000. Si es así, el operador devuelve false.

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

La propiedad values es una matriz de intervalos. En el ejemplo anterior, es una matriz de dos intervalos. Este es un ejemplo de una matriz con un intervalo para comprobar.

Matriz con un intervalo:

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y una matriz de intervalos como filtro. En este pseudocódigo, a y b son los valores inferior y superior de cada intervalo de la matriz. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

El operador disponible para los booleanos es:

BoolEquals

El operador BoolEquals se evalúa en true si el valor de la clave es el filtro del valor booleano especificado. En el ejemplo siguiente, comprueba si el valor del atributo isEnabled de la sección data es true.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con el valor booleano del filtro. Este es el pseudocódigo con la clave: [v1, v2, v3]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

Los operadores disponibles para las cadenas son:

StringContains

El operador StringContains se evalúa en true si el valor de la clavecontiene cualquiera de los valores de filtro especificados (como subcadenas). En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data contiene una de las subcadenas especificadas: microsoft o azure. Por ejemplo, azure data factory contiene azure.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringNotContains

El operador StringNotContains se evalúa en true si la claveno contiene los valores de filtro especificados como subcadenas. Si la clave contiene uno de los valores especificados como una subcadena, el operador se evalúa en false. En el ejemplo siguiente, el operador devuelve true solo si el valor del atributo key1 de la sección data no tiene contoso y fabrikam como subcadenas.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

Consulte la sección Limitaciones para ver las limitaciones actuales de este operador.

StringBeginsWith

El operador StringBeginsWith se evalúa en true si el valor de la clavecomienza por cualquiera de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data comienza por event o message. Por ejemplo, event hubs comienza por event.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringNotBeginsWith

El operador StringNotBeginsWith se evalúa en true si el valor de la claveno comienza por ninguno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data no comienza por event ni message.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringEndsWith

El operador StringEndsWith se evalúa en true si el valor de la clavetermina con uno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data termina con jpg, jpeg o png. Por ejemplo, eventgrid.png termina con png.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringNotEndsWith

El operador StringNotEndsWith se evalúa en true si el valor de la claveno termina con ninguno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data no termina con jpg, jpeg ni png.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringIn

El operador StringIn comprueba si el valor de la clavecoincide exactamente con alguno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data es contoso, fabrikam o factory.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

StringNotIn

El operador StringNotIn comprueba si el valor de la claveno coincide con ninguno de los valores de filtro especificados. En el ejemplo siguiente, comprueba si el valor del atributo key1 de la sección data no es aws ni bridge.

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

Si la clave es una matriz, todos los valores de la matriz se comprueban con la matriz de valores de filtro. Este es el pseudocódigo con la clave [v1, v2, v3] y el filtro [a,b,c]. Los valores de clave con tipos de datos que no coinciden con el tipo de datos del filtro se ignoran.

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

Las comparaciones de cadenas no distinguen mayúsculas de minúsculas.

Nota

Si el JSON del evento no contiene la clave de filtro avanzada, el filtro se evalúa como no coincidente para los operadores siguientes: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

El filtro se evalúa como coincidente para los operadores siguientes: NumberNotIn y StringNotIn.

IsNullOrUndefined

El operador IsNullOrUndefined se evalúa en true si el valor de la clave es NULL o no está definido.

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

En el ejemplo siguiente, falta key1, por lo que el operador se evaluaría en true.

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

En el ejemplo siguiente, key1 está establecido en NULL, por lo que el operador se evaluaría en true.

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

Si key1 tiene cualquier otro valor en estos ejemplos, el operador se evaluaría en false.

IsNotNull

El operador IsNotNull se evalúa en true si el valor de la clave no es NULL o no está definido.

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

OR y AND

Si especifica un único filtro con varios valores, se realiza una operación OR, por lo que el valor del campo de clave debe ser uno de estos valores. Este es un ejemplo:

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

Si especifica varios filtros diferentes, se realiza una operación AND, por lo que se debe cumplir cada condición de filtro. Este es un ejemplo:

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

CloudEvents

Para los eventos del esquema de CloudEvents, utilice los valores siguientes para la clave: eventid, source, eventtype, eventtypeversion o datos de evento (como data.key1).

También puede usar atributos de contexto de extensión en CloudEvents 1.0. En el ejemplo siguiente, comexampleextension1 y comexampleothervalue son atributos de contexto de extensión.

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

Este es un ejemplo del uso de un atributo de contexto de extensión en un filtro.

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

Limitaciones

El filtrado avanzado tiene las siguientes limitaciones:

  • 25 filtros avanzados y 25 valores de filtro en todos los filtros por suscripción de Event Grid
  • 512 caracteres por valor de cadena
  • Claves que incluyen el carácter . (punto) . Por ejemplo, http://schemas.microsoft.com/claims/authnclassreference o john.doe@contoso.com. Actualmente, las claves no admiten caracteres de escape.

La misma clave se puede usar en más de un filtro.

Pasos siguientes