Filtrování událostí pro Event Grid
Tento článek ukazuje, jak filtrovat události při vytváření odběru Event Gridu. Další informace o možnostech filtrování událostí najdete v tématu Vysvětlení filtrování událostí pro odběry event Gridu.
Filtrovat podle typu události
Při vytváření odběru služby Event Grid můžete určit, které typy událostí se mají odeslat do koncového bodu. Příklady v této části vytvářejí odběry událostí pro skupinu prostředků, ale omezují události odesílané do Microsoft.Resources.ResourceWriteFailure
a Microsoft.Resources.ResourceWriteSuccess
. Pokud při filtrování událostí podle typů událostí potřebujete větší flexibilitu, přečtěte si téma Filtrování podle operátorů a dat.
Azure PowerShell
Pro PowerShell použijte parametr -IncludedEventType
při vytváření předplatného.
$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"
New-AzEventGridSubscription `
-EventSubscriptionName demoSubToResourceGroup `
-ResourceGroupName myResourceGroup `
-Endpoint <endpoint-URL> `
-IncludedEventType $includedEventTypes
Azure CLI
Pro Azure CLI použijte --included-event-types
parametr. Následující příklad používá Azure CLI v prostředí 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
portál Azure
Při vytváření odběru událostí v systémovém tématu vyberte pomocí rozevíracího seznamu typy událostí, jak je znázorněno na následujícím obrázku.
U existujícího odběru systémového tématu použijte kartu Filtry na stránce Odběr události, jak je znázorněno na následujícím obrázku.
Filtry můžete zadat při vytváření vlastního tématu tak, že vyberete odkaz Přidat typ události, jak je znázorněno na následujícím obrázku.
Pokud chcete zadat filtr pro existující odběr vlastního tématu, použijte kartu Filtry na stránce Odběr události.
Šablona Azure Resource Manageru
Pro šablonu Resource Manageru includedEventTypes
použijte vlastnost.
"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"
]
}
}
}
]
Filtrovat podle předmětu
Události můžete filtrovat podle předmětu v datech události. Můžete zadat hodnotu, která se má shodovat pro začátek nebo konec předmětu. Pokud potřebujete větší flexibilitu při filtrování událostí podle předmětu, přečtěte si téma Filtrování podle operátorů a dat.
V následujícím příkladu PowerShellu vytvoříte odběr událostí, který filtruje podle začátku předmětu. Parametr použijete -SubjectBeginsWith
k omezení událostí na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.
Azure PowerShell
$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId
New-AzEventGridSubscription `
-Endpoint <endpoint-URL> `
-EventSubscriptionName demoSubscriptionToResourceGroup `
-ResourceGroupName myResourceGroup `
-SubjectBeginsWith $resourceId
Další příklad PowerShellu vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí ..jpg
$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id
New-AzEventGridSubscription `
-EventSubscriptionName demoSubToStorage `
-Endpoint <endpoint-URL> `
-ResourceId $storageId `
-SubjectEndsWith ".jpg"
Azure CLI
V následujícím příkladu Azure CLI vytvoříte odběr událostí, který filtruje podle začátku předmětu. Parametr použijete --subject-begins-with
k omezení událostí na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.
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
Další příklad Azure CLI vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí ..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"
portál Azure
U existujícího odběru událostí:
Na stránce Odběr události vyberte Povolit filtrování předmětu.
Zadejte hodnoty pro jedno nebo více z následujících polí: Předmět začíná a Předmět končí. V následujícíchmožnostch
Pokud chcete, aby předmět události odpovídal zadanému případu, vyberte možnost porovnávání předmětu s rozlišováním malých a velkých písmen.
Při vytváření odběru událostí použijte kartu Filtry v průvodci vytvořením.
Šablona Azure Resource Manageru
V následujícím příkladu šablony Resource Manageru vytvoříte odběr událostí, který filtruje podle začátku předmětu. Vlastnost slouží subjectBeginsWith
k omezení událostí na události pro konkrétní prostředek. Předáte ID prostředku skupiny zabezpečení sítě.
"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" ]
}
}
}
]
Další příklad šablony Resource Manageru vytvoří předplatné pro úložiště objektů blob. Omezuje události na události s předmětem, který končí ..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" ]
}
}
}
]
Filtrování podle operátorů a dat
Pro větší flexibilitu při filtrování můžete k filtrování událostí použít operátory a vlastnosti dat.
Přihlášení k odběru pomocí rozšířených filtrů
Další informace o operátorech a klíčích, které můžete použít pro rozšířené filtrování, najdete v tématu Rozšířené filtrování.
Tyto příklady vytvoří vlastní téma. Přihlásí se k odběru vlastního tématu a vyfiltrují podle hodnoty v datovém objektu. Události, které mají barevnou vlastnost nastavenou na modrou, červenou nebo zelenou, se odešlou do předplatného.
Azure PowerShell
Pokud používáte PowerShell, použijte:
$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
Pokud používáte Azure CLI, použijte:
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>"
Všimněte si, že je nastavené datum vypršení platnosti odběru.
portál Azure
Na stránce Odběr události vyberte Přidat nový filtr v části ROZŠÍŘENÉ FILTRY.
Zadejte klíč, operátor a hodnotu nebo hodnoty, které se mají porovnat. V následujícím příkladu se data.color používá jako klíč, řetězec je v operátoru a pro hodnoty jsou zadány modré, červené a zelené hodnoty.
Poznámka:
Další informace o rozšířených filtrech najdete v tématu Vysvětlení filtrování událostí pro odběry event Gridu.
Otestování filtru
Pokud chcete filtr otestovat, odešlete událost s barevným polem nastaveným na zelenou. Vzhledem k tomu, že zelená je jednou z hodnot ve filtru, událost se doručí do koncového bodu.
Azure PowerShell
Pokud používáte PowerShell, použijte:
$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}
Pokud chcete otestovat scénář, ve kterém se událost neodesílá, odešlete událost s barevným polem nastaveným na žlutou. Žlutá není jednou z hodnot zadaných v předplatném, takže se událost nedoručí do vašeho předplatného.
$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
Pokud používáte Azure CLI, použijte:
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
Pokud chcete otestovat scénář, ve kterém se událost neodesílá, odešlete událost s barevným polem nastaveným na žlutou. Žlutá není jednou z hodnot zadaných v předplatném, takže se událost nedoručí do vašeho předplatného.
Pokud používáte Azure CLI, použijte:
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
Další kroky
Další informace o filtrech (typy událostí, předmět a pokročilé) najdete v tématu Vysvětlení filtrování událostí pro odběry služby Event Grid.