Фильтрация событий для Сетки событий

В этой статье показано, как фильтровать события при создании подписки на Сетку событий. Дополнительные сведения о параметрах фильтрации событий см. в статье Understand event filtering for Event Grid subscriptions (Общие сведения о фильтрации событий для подписок на Сетку событий).

Фильтрация по типу события

При создании подписки на Сетку событий можно указать, какие типы событий будут отправляться в конечную точку. В приведенных в этом разделе примерах создаются подписки на события для группы ресурсов, но в Microsoft.Resources.ResourceWriteFailure и Microsoft.Resources.ResourceWriteSuccess отправляется ограниченное количество событий. Если вам нужно больше возможностей фильтрации событий по типу, см. сведения о фильтрации по дополнительным операторам и полям данных.

Azure PowerShell

В PowerShell при создании подписки используйте параметр -IncludedEventType.

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

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

Azure CLI

В Azure CLI используйте параметр --included-event-types. В приведенном ниже примере используется Azure CLI в оболочке 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

Портал Azure

  1. На странице Подписка на события перейдите на вкладку Фильтры.

  2. Выберите Добавить тип события рядом с элементом Filter to Event Types (Фильтровать по типам событий).

    Снимок экрана: страница &quot;Подписка на события&quot; с выбранной кнопкой &quot;Добавить тип события&quot;.

  3. Введите тип события и нажмите клавишу ВВОД. В следующем примере типом события является Microsoft.Resources.ResourceWriteSuccess.

    Снимок экрана: страница &quot;Подписка на события&quot; с примером типа события.

Шаблон Azure Resource Manager

В шаблоне Resource Manager используйте свойство 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"
        ]
      }
    }
  }
]

Примечание

Дополнительные сведения об этих фильтрах (типы событий, тема и расширенный) см. в разделе Общие сведения о фильтрации событий для подписок на службу "Сетка событий Azure".

Фильтрация по теме

Вы можете фильтровать события по теме данных. Можно указать значение, которое сопоставляется с началом или концом темы. Если вам нужно больше возможностей фильтрации событий по теме, см. сведения о фильтрации по дополнительным операторам и полям данных.

В приведенном ниже примере PowerShell создается подписка, которая позволяет фильтровать события по началу темы. Чтобы ограничить события, предназначенные для конкретного ресурса, используйте параметр -SubjectBeginsWith. Можно передать идентификатор ресурса группы безопасности сети.

Azure PowerShell

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

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

В следующем примере PowerShell создается подписка для хранилища BLOB-объектов. Она ограничивает события темой, которая заканчивается на .jpg.

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

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

Azure CLI

В приведенном ниже примере Azure CLI создается подписка, которая позволяет фильтровать события по началу темы. Чтобы ограничить события, предназначенные для конкретного ресурса, используйте параметр --subject-begins-with. Можно передать идентификатор ресурса группы безопасности сети.

resourceId=$(az resource show --name demoSecurityGroup --resource-group myResourceGroup --resource-type Microsoft.Network/networkSecurityGroups --query id --output tsv)

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

В следующем примере Azure CLI создается подписка для хранилища BLOB-объектов. Она ограничивает события темой, которая заканчивается на .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"

Портал Azure

  1. На странице Подписка на события выберите Включить фильтрацию тем.

  2. Введите значения для одного или нескольких из следующих полей: Тема начинается с и Тема заканчивается на. В следующих параметрах выбраны оба варианта.

    Снимок экрана: страница &quot;Подписка на события&quot; с примером фильтрации тем.

  3. Выберите параметр Сопоставление тем с учетом регистра, если необходимо, чтобы тема события соответствовала регистру указанных фильтров.

Шаблон Azure Resource Manager

В приведенном ниже примере шаблона Resource Manager создается подписка, которая позволяет фильтровать события по началу темы. Чтобы ограничить события, предназначенные для конкретного ресурса, используйте свойство subjectBeginsWith. Можно передать идентификатор ресурса группы безопасности сети.

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

В следующем примере шаблона Resource Manager создается подписка для хранилища BLOB-объектов. Она ограничивает события темой, которая заканчивается на .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" ]
      }
    }
  }
]

Примечание

Дополнительные сведения об этих фильтрах (типы событий, тема и расширенный) см. в разделе Общие сведения о фильтрации событий для подписок на службу "Сетка событий Azure".

Фильтрация по операторам и данным

Для большей гибкости при фильтрации используйте операторы и свойства данных для фильтрации событий.

Подписка с дополнительными фильтрами

Дополнительные сведения об операторах и ключах для расширенной фильтрации см. в разделе Advanced filtering (Расширенная фильтрация).

В этих примерах создается пользовательский раздел. Затем формируется подписка на этот раздел и выполняется фильтрация по значению в объекте данных. События со свойством, выделенным синим, красным или зеленым цветом, отправляются в подписку.

Azure PowerShell

Для PowerShell используйте команду:

$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)

Azure CLI

Для интерфейса командной строки Azure:

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

Обратите внимание, что задана дата окончания срока действия подписки.

Портал Azure

  1. На странице Подписка на события выберите Добавить новый фильтр в разделе Дополнительные фильтры.

    Снимок экрана: страница &quot;Подписка на события&quot; с выделенной ссылкой &quot;Добавить новый фильтр&quot;.

  2. Укажите ключ, оператор, значение или значения для сравнения. В следующем примере data.color использует в качестве ключа, Строка в — в качестве оператора, а blue (Синий), red (Красный) и green (Зеленый) указаны в качестве значений.

    Снимок экрана: пример расширенного фильтра.

    Примечание

    Дополнительные сведения о расширенных фильтрах см. в разделе Общие сведения о фильтрации событий для подписок на службу "Сетка событий Azure".

Тестирование фильтра

Чтобы протестировать фильтрацию, отправьте событие, выделенное зеленым цветом. Так как зеленым цветом выделено одно из значений в фильтре, событие отправляется в конечную точку.

Azure PowerShell

Для PowerShell используйте команду:

$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}

Чтобы протестировать сценарий, когда событие не отправлено, отправьте событие, выделенное желтым цветом. Среди допустимых значений подписки желтый цвет не указан, поэтому событие не будет отправлено.

$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}

Azure CLI

Для интерфейса командной строки Azure:

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

Чтобы протестировать сценарий, когда событие не отправлено, отправьте событие, выделенное желтым цветом. Среди допустимых значений подписки желтый цвет не указан, поэтому событие не будет отправлено.

Для интерфейса командной строки Azure:

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

Следующие шаги

Дополнительные сведения о фильтрах (типы событий, тема и расширенный) см. в разделе Общие сведения о фильтрации событий для подписок на службу "Сетка событий Azure".