Filtrera händelser för Event Grid

Den här artikeln visar hur du filtrerar händelser när du skapar en Event Grid-prenumeration. Mer information om alternativen för händelsefiltrering finns i Förstå händelsefiltrering för Event Grid-prenumerationer.

Filtrera efter händelsetyp

När du skapar en Event Grid-prenumeration kan du ange vilka händelsetyper som ska skickas till slutpunkten. Exemplen i det här avsnittet skapar händelseprenumerationer för en resursgrupp men begränsar de händelser som skickas till Microsoft.Resources.ResourceWriteFailure och Microsoft.Resources.ResourceWriteSuccess. Om du behöver mer flexibilitet när du filtrerar händelser efter händelsetyper kan du läsa Filtrera efter operatorer och data.

Azure PowerShell

För PowerShell använder du parametern -IncludedEventType när du skapar prenumerationen.

$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -Endpoint <endpoint-URL> `
  -IncludedEventType $includedEventTypes

Azure CLI

Använd parametern för --included-event-types Azure CLI. I följande exempel används Azure CLI i ett Bash-gränssnitt:

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

När du skapar en händelseprenumeration på ett systemämne använder du listrutan för att välja händelsetyperna enligt följande bild.

Screenshot showing the Create Subscription page with event types selected.

För en befintlig prenumeration på ett systemavsnitt använder du fliken Filtersidan Händelseprenumeration enligt följande bild.

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

Du kan ange filter när du skapar ett anpassat ämne genom att välja länken Lägg till händelsetyp enligt följande bild.

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

Om du vill ange ett filter för en befintlig prenumeration till ett anpassat ämne använder du fliken Filtersidan Händelseprenumeration .

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

Azure Resource Manager-mall

Använd egenskapen för includedEventTypes en Resource Manager-mall.

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

Kommentar

Mer information om dessa filter (händelsetyper, ämne och avancerat) finns i Förstå händelsefiltrering för Event Grid-prenumerationer.

Filtrera efter ämne

Du kan filtrera händelser efter ämne i händelsedata. Du kan ange ett värde som ska matchas för början eller slutet av ämnet. Om du behöver mer flexibilitet när du filtrerar händelser efter ämne kan du läsa Filtrera efter operatorer och data.

I följande PowerShell-exempel skapar du en händelseprenumeration som filtrerar i början av ämnet. Du använder parametern -SubjectBeginsWith för att begränsa händelser till händelser för en specifik resurs. Du skickar resurs-ID:t för en nätverkssäkerhetsgrupp.

Azure PowerShell

$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId

New-AzEventGridSubscription `
  -Endpoint <endpoint-URL> `
  -EventSubscriptionName demoSubscriptionToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -SubjectBeginsWith $resourceId

I nästa PowerShell-exempel skapas en prenumeration för en bloblagring. Den begränsar händelser till händelser med ett ämne som slutar i .jpg.

$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToStorage `
  -Endpoint <endpoint-URL> `
  -ResourceId $storageId `
  -SubjectEndsWith ".jpg"

Azure CLI

I följande Azure CLI-exempel skapar du en händelseprenumeration som filtreras i början av ämnet. Du använder parametern --subject-begins-with för att begränsa händelser till händelser för en specifik resurs. Du skickar resurs-ID:t för en nätverkssäkerhetsgrupp.

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

I nästa Azure CLI-exempel skapas en prenumeration för en bloblagring. Den begränsar händelser till händelser med ett ämne som slutar i .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

För en befintlig händelseprenumeration:

  1. På sidan Händelseprenumeration väljer du Aktivera ämnesfiltrering.

  2. Ange värden för ett eller flera av följande fält: Ämne börjar med och Ämne slutar med. I följande alternativ är båda alternativen markerade.

    Screenshot of Event Subscription page with subject filtering example.

  3. Välj alternativet Skiftlägeskänslig ämnesmatchning om du vill att ämnet för händelsen ska matcha fallet med de angivna filtren.

När du skapar en händelseprenumeration använder du fliken Filter i guiden skapa.

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

Azure Resource Manager-mall

I följande Resource Manager-mallexempel skapar du en händelseprenumeration som filtreras i början av ämnet. Du använder subjectBeginsWith egenskapen för att begränsa händelser till händelser för en specifik resurs. Du skickar resurs-ID:t för en nätverkssäkerhetsgrupp.

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

I nästa Resource Manager-mallexempel skapas en prenumeration för en bloblagring. Den begränsar händelser till händelser med ett ämne som slutar i .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" ]
      }
    }
  }
]

Kommentar

Mer information om dessa filter (händelsetyper, ämne och avancerat) finns i Förstå händelsefiltrering för Event Grid-prenumerationer.

Filtrera efter operatorer och data

Om du vill ha mer flexibilitet i filtreringen kan du använda operatorer och dataegenskaper för att filtrera händelser.

Prenumerera med avancerade filter

Mer information om de operatorer och nycklar som du kan använda för avancerad filtrering finns i Avancerad filtrering.

De här exemplen skapar ett anpassat ämne. De prenumererar på det anpassade ämnet och filtrerar efter ett värde i dataobjektet. Händelser som har färgegenskapen inställd på blå, röd eller grön skickas till prenumerationen.

Azure PowerShell

Om du använder PowerShell använder du:

$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

Om du använder Azure CLI använder du:

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>"

Observera att ett förfallodatum har angetts för prenumerationen.

Azure Portal

  1. På sidan Händelseprenumeration väljer du Lägg till nytt filter i avsnittet AVANCERADE FILTER .

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

  2. Ange en nyckel, operator och ett värde eller värden som ska jämföras. I följande exempel används data.color som en nyckel, Sträng är i som operator och blå, röd och grön anges för värden.

    Screenshot showing an example of an advanced filter.

    Kommentar

    Mer information om avancerade filter finns i Förstå händelsefiltrering för Event Grid-prenumerationer.

Testa filtret

Om du vill testa filtret skickar du en händelse med färgfältet inställt på grönt. Eftersom grönt är ett av värdena i filtret levereras händelsen till slutpunkten.

Azure PowerShell

Om du använder PowerShell använder du:

$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}

Om du vill testa ett scenario där händelsen inte skickas skickar du en händelse med färgfältet inställt på gult. Gult är inte ett av de värden som anges i prenumerationen, så händelsen levereras inte till din prenumeration.

$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

Om du använder Azure CLI använder du:

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

Om du vill testa ett scenario där händelsen inte skickas skickar du en händelse med färgfältet inställt på gult. Gult är inte ett av de värden som anges i prenumerationen, så händelsen levereras inte till din prenumeration.

Om du använder Azure CLI använder du:

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

Nästa steg

Mer information om filter (händelsetyper, ämne och avancerat) finns i Förstå händelsefiltrering för Event Grid-prenumerationer.