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
При создании подписки на событие в системном разделе используйте раскрывающийся список, чтобы выбрать типы событий, как показано на следующем рисунке.
Для существующей подписки на системный раздел используйте вкладку "Фильтры" страницы "Подписка на события", как показано на следующем рисунке.
Фильтры можно указать при создании настраиваемого раздела , выбрав ссылку "Добавить тип события", как показано на следующем рисунке.
Чтобы указать фильтр для существующей подписки в пользовательском разделе, перейдите на вкладку "Фильтры " на странице "Подписка на события".
Шаблон 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
Для существующей подписки на события:
На странице Подписка на события выберите Включить фильтрацию тем.
Введите значения для одного или нескольких из следующих полей: Тема начинается с и Тема заканчивается на. В следующих параметрах выбраны оба варианта.
Выберите параметр Сопоставление тем с учетом регистра, если необходимо, чтобы тема события соответствовала регистру указанных фильтров.
При создании подписки на события используйте вкладку "Фильтры" в мастере создания.
Шаблон 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=@{operatorType="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
На странице Подписка на события выберите Добавить новый фильтр в разделе Дополнительные фильтры.
Укажите ключ, оператор, значение или значения для сравнения. В следующем примере 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".