Dela via


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.

Skärmbild som visar sidan Skapa prenumeration med valda händelsetyper.

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

Skärmbild som visar sidan Händelseprenumeration med fliken Filter markerad.

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.

Skärmbild som visar sidan Skapa händelseprenumeration för ett anpassat ämne.

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

Skärmbild av sidan Händelseprenumeration med knappen Lägg till händelsetyp markerad.

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 exempel väljs båda alternativen.

    Skärmbild av sidan Händelseprenumeration med exempel på ämnesfiltrering.

  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.

Skärmbild av sidan Skapa händelseprenumeration med fliken Filter markerad.

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

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 .

    Skärmbild som visar sidan Händelseprenumeration med länken Lägg till nytt filter markerat.

  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.

    Skärmbild som visar ett exempel på ett avancerat 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

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