Filtrowanie zdarzeń dla usługi Event Grid
W tym artykule pokazano, jak filtrować zdarzenia podczas tworzenia subskrypcji usługi Event Grid. Aby dowiedzieć się więcej o opcjach filtrowania zdarzeń, zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.
Filtruj według typu zdarzenia
Podczas tworzenia subskrypcji usługi Event Grid można określić typy zdarzeń, które mają być wysyłane do punktu końcowego. Przykłady w tej sekcji tworzą subskrypcje zdarzeń dla grupy zasobów, ale ograniczają zdarzenia wysyłane do Microsoft.Resources.ResourceWriteFailure
i Microsoft.Resources.ResourceWriteSuccess
. Jeśli potrzebujesz większej elastyczności podczas filtrowania zdarzeń według typów zdarzeń, zobacz Filtrowanie według operatorów i danych.
Azure PowerShell
W przypadku programu PowerShell użyj parametru -IncludedEventType
podczas tworzenia subskrypcji.
$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"
New-AzEventGridSubscription `
-EventSubscriptionName demoSubToResourceGroup `
-ResourceGroupName myResourceGroup `
-Endpoint <endpoint-URL> `
-IncludedEventType $includedEventTypes
Interfejs wiersza polecenia platformy Azure
W przypadku interfejsu wiersza polecenia platformy Azure użyj parametru --included-event-types
. W poniższym przykładzie użyto interfejsu wiersza polecenia platformy Azure w powłoce powłoki 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 Portal
Podczas tworzenia subskrypcji zdarzeń do tematu systemowego użyj listy rozwijanej, aby wybrać typy zdarzeń, jak pokazano na poniższej ilustracji.
W przypadku istniejącej subskrypcji tematu systemowego użyj karty Filtry na stronie Subskrypcja zdarzeń, jak pokazano na poniższej ilustracji.
Filtry można określić podczas tworzenia tematu niestandardowego, wybierając link Dodaj typ zdarzenia, jak pokazano na poniższej ilustracji.
Aby określić filtr istniejącej subskrypcji dla tematu niestandardowego, użyj karty Filtry na stronie Subskrypcja zdarzeń.
Szablon usługi Azure Resource Manager
W przypadku szablonu usługi Resource Manager użyj includedEventTypes
właściwości .
"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"
]
}
}
}
]
Uwaga
Aby dowiedzieć się więcej na temat tych filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.
Filtruj według tematu
Zdarzenia można filtrować według podmiotu w danych zdarzenia. Można określić wartość, która ma być zgodna z początkiem lub końcem tematu. Jeśli potrzebujesz większej elastyczności podczas filtrowania zdarzeń według tematu, zobacz Filtrowanie według operatorów i danych.
W poniższym przykładzie programu PowerShell utworzysz subskrypcję zdarzeń, która filtruje według początku tematu. Parametr służy -SubjectBeginsWith
do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.
Azure PowerShell
$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId
New-AzEventGridSubscription `
-Endpoint <endpoint-URL> `
-EventSubscriptionName demoSubscriptionToResourceGroup `
-ResourceGroupName myResourceGroup `
-SubjectBeginsWith $resourceId
W następnym przykładzie programu PowerShell zostanie utworzona subskrypcja dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .jpg
.
$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id
New-AzEventGridSubscription `
-EventSubscriptionName demoSubToStorage `
-Endpoint <endpoint-URL> `
-ResourceId $storageId `
-SubjectEndsWith ".jpg"
Interfejs wiersza polecenia platformy Azure
W poniższym przykładzie interfejsu wiersza polecenia platformy Azure utworzysz subskrypcję zdarzeń filtrającą według początku tematu. Parametr służy --subject-begins-with
do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.
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
Następny przykład interfejsu wiersza polecenia platformy Azure tworzy subskrypcję dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .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 Portal
W przypadku istniejącej subskrypcji zdarzeń:
Na stronie Subskrypcja zdarzeń wybierz pozycję Włącz filtrowanie tematów.
Wprowadź wartości dla co najmniej jednego z następujących pól: Temat zaczyna się od i Temat kończy się. W poniższych opcjach wybrano obie opcje.
Wybierz opcję Dopasowywanie podmiotu z uwzględnieniem wielkości liter, jeśli chcesz, aby temat zdarzenia był zgodny z określonym przypadkiem filtrów.
Podczas tworzenia subskrypcji zdarzeń użyj karty Filtry w kreatorze tworzenia.
Szablon usługi Azure Resource Manager
W poniższym przykładzie szablonu usługi Resource Manager utworzysz subskrypcję zdarzeń filtrającą według początku tematu. Właściwość służy subjectBeginsWith
do ograniczania zdarzeń do tych dla określonego zasobu. Należy przekazać identyfikator zasobu sieciowej grupy zabezpieczeń.
"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" ]
}
}
}
]
Następny przykładowy szablon usługi Resource Manager tworzy subskrypcję dla magazynu obiektów blob. Ogranicza zdarzenia do tych z tematem, który kończy się na .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" ]
}
}
}
]
Uwaga
Aby dowiedzieć się więcej na temat tych filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.
Filtrowanie według operatorów i danych
Aby uzyskać większą elastyczność filtrowania, można użyć operatorów i właściwości danych do filtrowania zdarzeń.
Subskrybowanie za pomocą filtrów zaawansowanych
Aby dowiedzieć się więcej o operatorach i kluczach, których można użyć do zaawansowanego filtrowania, zobacz Filtrowanie zaawansowane.
Te przykłady umożliwiają utworzenie tematu niestandardowego. Subskrybują temat niestandardowy i filtrują według wartości w obiekcie danych. Zdarzenia, które mają właściwość color ustawioną na niebieską, czerwoną lub zieloną, są wysyłane do subskrypcji.
Azure PowerShell
W przypadku programu PowerShell użyj polecenia:
$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)
Interfejs wiersza polecenia platformy Azure
W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:
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>"
Należy zauważyć, że ustawiono datę wygaśnięcia subskrypcji.
Azure Portal
Na stronie Subskrypcja zdarzeń wybierz pozycję Dodaj nowy filtr w sekcji FILTRY ZAAWANSOWANE.
Określ klucz, operator i wartość lub wartości do porównania. W poniższym przykładzie parametr data.color jest używany jako klucz, ciąg jest w postaci operatora, a dla wartości określono wartości niebieskie, czerwone i zielone.
Uwaga
Aby dowiedzieć się więcej na temat filtrów zaawansowanych, zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.
Testowanie filtru
Aby przetestować filtr, wyślij zdarzenie z polem koloru ustawionym na zielony. Ponieważ zielony jest jedną z wartości w filtrze, zdarzenie jest dostarczane do punktu końcowego.
Azure PowerShell
W przypadku programu PowerShell użyj polecenia:
$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}
Aby przetestować scenariusz, w którym zdarzenie nie jest wysyłane, wyślij zdarzenie z polem koloru ustawionym na żółty. Żółty nie jest jedną z wartości określonych w subskrypcji, więc zdarzenie nie jest dostarczane do subskrypcji.
$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}
Interfejs wiersza polecenia platformy Azure
W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:
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
Aby przetestować scenariusz, w którym zdarzenie nie jest wysyłane, wyślij zdarzenie z polem koloru ustawionym na żółty. Żółty nie jest jedną z wartości określonych w subskrypcji, więc zdarzenie nie jest dostarczane do subskrypcji.
W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia:
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
Następne kroki
Aby dowiedzieć się więcej na temat filtrów (typów zdarzeń, tematu i zaawansowanych), zobacz Omówienie filtrowania zdarzeń dla subskrypcji usługi Event Grid.