Filtrar eventos para a Grelha de Eventos

Este artigo mostra como filtrar eventos ao criar uma assinatura da Grade de Eventos. Para saber mais sobre as opções de filtragem de eventos, consulte Compreender a filtragem de eventos para subscrições da Grelha de Eventos.

Filtrar por tipo de evento

Ao criar uma assinatura de Grade de Eventos, você pode especificar quais tipos de evento enviar para o ponto de extremidade. Os exemplos nesta seção criam assinaturas de eventos para um grupo de recursos, mas limitam os eventos enviados para Microsoft.Resources.ResourceWriteFailure e Microsoft.Resources.ResourceWriteSuccess. Se precisar de mais flexibilidade ao filtrar eventos por tipos de evento, consulte Filtrar por operadores e dados.

Azure PowerShell

Para o PowerShell, use o -IncludedEventType parâmetro ao criar a assinatura.

$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -Endpoint <endpoint-URL> `
  -IncludedEventType $includedEventTypes

CLI do Azure

Para a CLI do Azure, use o --included-event-types parâmetro. O exemplo a seguir usa a CLI do Azure em um shell Bash:

includedEventTypes="Microsoft.Resources.ResourceWriteFailure Microsoft.Resources.ResourceWriteSuccess"

az eventgrid event-subscription create \
  --name demoSubToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --included-event-types $includedEventTypes

Portal do Azure

Ao criar uma assinatura de evento para um tópico do sistema, use a lista suspensa para selecionar os tipos de evento, conforme mostrado na imagem a seguir.

Screenshot showing the Create Subscription page with event types selected.

Para uma assinatura existente de um tópico do sistema, use a guia Filtros da página Assinatura de Evento, conforme mostrado na imagem a seguir.

Screenshot showing the Event Subscription page with the Filters tab selected.

Você pode especificar filtros ao criar um tópico personalizado selecionando Adicionar link Tipo de Evento , conforme mostrado na imagem a seguir.

Screenshot showing the Create Event Subscription page for a custom topic.

Para especificar um filtro para uma assinatura existente para um tópico personalizado, use a guia Filtros na página Assinatura de Evento .

Screenshot of the Event Subscription page with Add Event Type button selected.

Modelo Azure Resource Manager

Para um modelo do Gerenciador de Recursos, use a includedEventTypes propriedade.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [
          "Microsoft.Resources.ResourceWriteFailure",
          "Microsoft.Resources.ResourceWriteSuccess"
        ]
      }
    }
  }
]

Nota

Para saber mais sobre esses filtros (tipos de evento, assunto e avançados), consulte Compreender a filtragem de eventos para assinaturas da Grade de Eventos.

Filtrar por assunto

Você pode filtrar eventos pelo assunto nos dados do evento. Você pode especificar um valor a ser correspondido para o início ou o fim do assunto. Se precisar de mais flexibilidade ao filtrar eventos por assunto, consulte Filtrar por operadores e dados.

No exemplo do PowerShell a seguir, você cria uma assinatura de evento que filtra pelo início do assunto. Você usa o parâmetro para limitar eventos -SubjectBeginsWith a eventos para um recurso específico. Você passa a ID de recurso de um grupo de segurança de rede.

Azure PowerShell

$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId

New-AzEventGridSubscription `
  -Endpoint <endpoint-URL> `
  -EventSubscriptionName demoSubscriptionToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -SubjectBeginsWith $resourceId

O próximo exemplo do PowerShell cria uma assinatura para um armazenamento de blob. Limita os eventos àqueles com um assunto que termina em .jpg.

$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToStorage `
  -Endpoint <endpoint-URL> `
  -ResourceId $storageId `
  -SubjectEndsWith ".jpg"

CLI do Azure

No exemplo da CLI do Azure a seguir, você cria uma assinatura de evento que filtra pelo início do assunto. Você usa o parâmetro para limitar eventos --subject-begins-with a eventos para um recurso específico. Você passa a ID de recurso de um grupo de segurança de rede.

resourceId=$(az network nsg show -g myResourceGroup -n demoSecurityGroup --query id --output tsv)

az eventgrid event-subscription create \
  --name demoSubscriptionToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --subject-begins-with $resourceId

O próximo exemplo da CLI do Azure cria uma assinatura para um armazenamento de blob. Limita os eventos àqueles com um assunto que termina em .jpg.

storageid=$(az storage account show --name $storageName --resource-group myResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --resource-id $storageid \
  --name demoSubToStorage \
  --endpoint <endpoint-URL> \
  --subject-ends-with ".jpg"

Portal do Azure

Para uma subscrição de evento existente:

  1. Na página Subscrição de Eventos , selecione Ativar filtragem de assuntos.

  2. Insira valores para um ou mais dos seguintes campos: Assunto começa com e Assunto termina com. Nas opções a seguir, ambas as opções são selecionadas.

    Screenshot of Event Subscription page with subject filtering example.

  3. Selecione a opção Correspondência de assunto que diferencia maiúsculas de minúsculas se quiser que o assunto do evento corresponda ao caso dos filtros especificados.

Ao criar uma assinatura de evento, use a guia Filtros no assistente de criação.

Screenshot of Create Event Subscription page with the Filters tab selected.

Modelo Azure Resource Manager

No exemplo de modelo do Gerenciador de Recursos a seguir, você cria uma assinatura de evento que filtra pelo início do assunto. Você usa a propriedade para limitar eventos a subjectBeginsWith eventos para um recurso específico. Você passa a ID de recurso de um grupo de segurança de rede.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "[resourceId('Microsoft.Network/networkSecurityGroups','demoSecurityGroup')]",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

O próximo exemplo de modelo do Resource Manager cria uma assinatura para um armazenamento de blob. Limita os eventos àqueles com um assunto que termina em .jpg.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
    "name": "[concat(parameters('storageName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectEndsWith": ".jpg",
        "subjectBeginsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

Nota

Para saber mais sobre esses filtros (tipos de evento, assunto e avançados), consulte Compreender a filtragem de eventos para assinaturas da Grade de Eventos.

Filtrar por operadores e dados

Para obter mais flexibilidade na filtragem, você pode usar operadores e propriedades de dados para filtrar eventos.

Subscrever com filtros avançados

Para saber mais sobre os operadores e as chaves que você pode usar para filtragem avançada, consulte Filtragem avançada.

Estes exemplos criam um tópico personalizado. Eles assinam o tópico personalizado e filtram por um valor no objeto de dados. Os eventos que têm a propriedade color definida como azul, vermelho ou verde são enviados para a assinatura.

Azure PowerShell

Para o PowerShell, utilize:

$topicName = <your-topic-name>
$endpointURL = <endpoint-URL>

New-AzResourceGroup -Name gridResourceGroup -Location eastus2
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location eastus2 -Name $topicName

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Id

$expDate = '<mm/dd/yyyy hh:mm:ss>' | Get-Date
$AdvFilter1=@{operator="StringIn"; key="Data.color"; Values=@('blue', 'red', 'green')}

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint $endpointURL `
  -ExpirationDate $expDate `
  -AdvancedFilter @($AdvFilter1)

CLI do Azure

Para a CLI do Azure, utilize:

topicName=<your-topic-name>
endpointURL=<endpoint-URL>

az group create -n gridResourceGroup -l eastus2
az eventgrid topic create --name $topicName -l eastus2 -g gridResourceGroup

topicid=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  -n demoAdvancedSub \
  --advanced-filter data.color stringin blue red green \
  --endpoint $endpointURL \
  --expiration-date "<yyyy-mm-dd>"

Observe que está definida uma data de expiração para a subscrição.

Portal do Azure

  1. Na página Subscrição de Eventos , selecione Adicionar novo filtro na secção FILTROS AVANÇADOS .

    Screenshot showing the Event Subscription page with Add new filter link highlighted.

  2. Especifique uma chave, um operador e um valor ou valores a serem comparados. No exemplo a seguir, data.color é usado como uma chave, String está em como um operador e valores azuis, vermelhos e verdes são especificados para valores.

    Screenshot showing an example of an advanced filter.

    Nota

    Para saber mais sobre filtros avançados, consulte Compreender a filtragem de eventos para subscrições da Grelha de Eventos.

Testar o filtro

Para testar o filtro, envie um evento com o campo de cor definido como verde. Como o verde é um dos valores no filtro, o evento é entregue ao ponto de extremidade.

Azure PowerShell

Para o PowerShell, utilize:

$endpoint = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name $topicName

$eventID = Get-Random 99999
$eventDate = Get-Date -Format s

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="green"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

Para testar um cenário em que o evento não é enviado, envie um evento com o campo de cor definido como amarelo. Amarelo não é um dos valores especificados na assinatura, portanto, o evento não é entregue à sua assinatura.

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="yellow"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

CLI do Azure

Para a CLI do Azure, utilize:

topicEndpoint=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicName -g gridResourceGroup --query "key1" --output tsv)

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "green"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint

Para testar um cenário em que o evento não é enviado, envie um evento com o campo de cor definido como amarelo. Amarelo não é um dos valores especificados na assinatura, portanto, o evento não é entregue à sua assinatura.

Para a CLI do Azure, utilize:

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "yellow"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint

Próximos passos

Para saber mais sobre filtros (tipos de eventos, assunto e avançados), consulte Compreender a filtragem de eventos para subscrições da Grelha de Eventos.