Filter events for Event Grid (Фильтрация событий для Сетки событий)

В этой статье показано, как фильтровать события при создании подписки на Сетку событий. Дополнительные сведения о параметрах фильтрации событий см. в статье 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

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

Screenshot showing the Create Subscription page with event types selected.

Для существующей подписки на системный раздел используйте вкладку "Фильтры" страницы "Подписка на события", как показано на следующем рисунке.

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

Фильтры можно указать при создании настраиваемого раздела , выбрав ссылку "Добавить тип события", как показано на следующем рисунке.

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

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

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

Шаблон 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 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

В следующем примере 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. Введите значения для одного или нескольких из следующих полей: Тема начинается с и Тема заканчивается на. В следующих параметрах выбраны оба варианта.

    Screenshot of Event Subscription page with subject filtering example.

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

При создании подписки на события используйте вкладку "Фильтры" в мастере создания.

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

Шаблон 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. На странице Подписка на события выберите Добавить новый фильтр в разделе Дополнительные фильтры.

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

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

    Screenshot showing an example of an advanced filter.

    Примечание.

    Дополнительные сведения о расширенных фильтрах см. в разделе Общие сведения о фильтрации событий для подписок на службу "Сетка событий 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".