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.

Screenshot showing the Create Subscription page with event types selected.

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.

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

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.

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

Pokud chcete zadat filtr pro existující odběr vlastního tématu, použijte kartu Filtry na stránce Odběr události.

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

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

Poznámka:

Další informace o těchtofiltrch

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í:

  1. Na stránce Odběr události vyberte Povolit filtrování předmětu.

  2. 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

    Screenshot of Event Subscription page with subject filtering example.

  3. 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.

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

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

Poznámka:

Další informace o těchtofiltrch

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=@{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

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

  1. Na stránce Odběr události vyberte Přidat nový filtr v části ROZŠÍŘENÉ FILTRY.

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

  2. 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.

    Screenshot showing an example of an advanced filter.

    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.