Filtrar eventos de grade de eventos

Este artigo mostra como filtrar eventos ao criar uma assinatura de grade de eventos. Para saber mais sobre as opções de filtragem de eventos, consulte Entender a filtragem de eventos para assinaturas de grade de eventos.

Filtrar por tipo de evento

Ao criar uma assinatura da Grade de Eventos, você pode especificar quais tipos de eventos devem enviar para o terminal. Os exemplos nesta seção criam assinaturas de eventos para um grupo de recursos, mas limitam os eventos que são enviados para Microsoft.Resources.ResourceWriteFailure e Microsoft.Resources.ResourceWriteSuccess. Se você precisar de mais flexibilidade ao filtrar eventos pelo tipo, consulte Filtrar por operadores avançados e campos de dados.

PowerShell do Azure

Para o PowerShell, use o parâmetro -IncludedEventType 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

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 eventos, conforme mostrado na imagem a seguir.

Screenshot showing the Create Subscription page with event types selected.

Para obter uma assinatura existente para um tópico do sistema, use a guia Filtros da página Assinatura de Eventos, 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 o link Adicionar 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 do Azure Resource Manager

Para um modelo do Resource Manager, use a propriedade includedEventTypes.

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

Observação

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

Filtrar por assunto

Você pode filtrar eventos pelo assunto nos dados do evento. Você pode especificar um valor para corresponder ao início ou fim do assunto. Se você precisar de mais flexibilidade ao filtrar eventos por assunto, consulte Filtrar por operadores avançados e campos de dados.

No seguinte exemplo do PowerShell, você cria uma inscrição de evento que filtra no início do assunto. Você usa o parâmetro -SubjectBeginsWith para limitar eventos aos de um recurso específico. Você passa o ID do 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 blobs. Ele limita eventos para aqueles 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 seguinte exemplo de CLI do Azure, você cria uma inscrição de evento que filtra no início do assunto. Você usa o parâmetro --subject-begins-with para limitar eventos aos de um recurso específico. Você passa o ID do 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 de CLI do Azure cria uma inscrição para um armazenamento de blobs. Ele limita eventos para aqueles 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 assinatura de evento existente:

  1. Na página Assinatura do Evento, selecione Habilitar filtragem por assunto.

  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 estão selecionadas.

    Screenshot of Event Subscription page with subject filtering example.

  3. Selecione a opção de Correspondência de assunto que diferencia maiúsculas de minúsculas se desejar que o assunto do evento corresponda à diferenciação de maiúsculas de minúsculas 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 do Azure Resource Manager

No seguinte exemplo de modelo do Resource Manager, você cria uma inscrição de evento que filtra no início do assunto. Você usa a propriedade subjectBeginsWith para limitar eventos aos de um recurso específico. Você passa o ID do 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 blobs. Ele limita eventos para aqueles 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" ]
      }
    }
  }
]

Observação

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

Filtrar por dados e operadores

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

Inscreva-se com filtros avançados

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

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

Azure PowerShell

Para o PowerShell, use:

$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, use:

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 uma data de expiração está definida para a assinatura.

Portal do Azure

  1. Na página Assinatura do Evento, selecione Adicionar novo filtro na seçã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, A cadeia de caracteres está em como um operador, e os valoresblue, red, e green são especificados como valores.

    Screenshot showing an example of an advanced filter.

    Observação

    Para saber mais sobre filtros avançados, consulte Compreender a filtragem para assinaturas da Grade de Eventos.

Testar o filtro

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

Azure PowerShell

Para o PowerShell, use:

$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 cores 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, use:

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 cores 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, use:

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óximas etapas

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