Filtrare gli eventi per Griglia di eventi

Questo articolo illustra come filtrare gli eventi quando si crea una sottoscrizione di Griglia di eventi. Per altre informazioni sulle opzioni per filtrare gli eventi, vedere Informazioni sui filtri eventi per le sottoscrizioni di Griglia di eventi.

Filtrare in base al tipo di evento

Quando si crea una sottoscrizione di Griglia di eventi, è possibile specificare quali tipi di evento inviare all'endpoint. Gli esempi in questa sezione creano sottoscrizioni di eventi per un gruppo di risorse, ma limitano gli eventi che vengono inviati a Microsoft.Resources.ResourceWriteFailure e Microsoft.Resources.ResourceWriteSuccess. Se è necessaria maggiore flessibilità quando si filtrano gli eventi in base ai tipi di evento, vedere Filtrare per operatori e dati.

Azure PowerShell

Per PowerShell, usare il parametro -IncludedEventType quando si crea la sottoscrizione.

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

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

Interfaccia della riga di comando di Azure

Per l'interfaccia della riga di comando di Azure, usare il parametro --included-event-types. L'esempio seguente usa l'interfaccia della riga di comando di Azure in una shell 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

Durante la creazione di una sottoscrizione di eventi a un argomento di sistema, usare l'elenco a discesa per selezionare i tipi di evento, come illustrato nell'immagine seguente.

Screenshot showing the Create Subscription page with event types selected.

Per una sottoscrizione esistente a un argomento di sistema, usare la scheda Filtri della pagina Sottoscrizione eventi, come illustrato nell'immagine seguente.

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

È possibile specificare i filtri durante la creazione di un argomento personalizzato selezionando Il collegamento Aggiungi tipo di evento, come illustrato nell'immagine seguente.

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

Per specificare un filtro per una sottoscrizione esistente per un argomento personalizzato, usare la scheda Filtri nella pagina Sottoscrizione eventi .

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

Modello di Azure Resource Manager

Per un modello di Resource Manager, usare la proprietà includedEventTypes.

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

Nota

Per altre informazioni su questi filtri (tipi di eventi, oggetto e avanzato), vedere Informazioni sul filtro degli eventi per le sottoscrizioni di Griglia di eventi.

Filtrare in base all'oggetto

È possibile filtrare gli eventi in base all'oggetto presente nei relativi dati. È possibile specificare un valore per cui identificare una corrispondenza in base all'inizio o alla fine dell'oggetto. Se è necessaria maggiore flessibilità quando si filtrano gli eventi in base all'oggetto, vedere Filtrare per operatori e dati.

Nell'esempio seguente di PowerShell si crea una sottoscrizione di eventi che applica un filtro in base all'inizio dell'oggetto. Si usa il parametro -SubjectBeginsWith per limitare gli eventi a quelli relativi a una risorsa specifica. Si passa l'ID risorsa di un gruppo di sicurezza di rete.

Azure PowerShell

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

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

L'esempio successivo di PowerShell crea una sottoscrizione per una risorsa di archiviazione BLOB e limita gli eventi a quelli con un oggetto che termina con .jpg.

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

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

Interfaccia della riga di comando di Azure

Nell'esempio seguente dell'interfaccia della riga di comando di Azure si crea una sottoscrizione di eventi che applica un filtro in base all'inizio dell'oggetto. Si usa il parametro --subject-begins-with per limitare gli eventi a quelli relativi a una risorsa specifica. Si passa l'ID risorsa di un gruppo di sicurezza di rete.

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

L'esempio successivo dell'interfaccia della riga di comando di Azure crea una sottoscrizione per una risorsa di archiviazione BLOB e limita gli eventi a quelli con un oggetto che termina con .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

Per una sottoscrizione di eventi esistente:

  1. Nella pagina Sottoscrizione eventi selezionare Abilita filtro soggetto.

  2. Immettere i valori per uno o più dei campi seguenti: l'oggetto inizia con e l'oggetto termina con . Nelle opzioni seguenti sono selezionate entrambe le opzioni.

    Screenshot of Event Subscription page with subject filtering example.

  3. Selezionare l'opzione di corrispondenza dell'oggetto con distinzione tra maiuscole e minuscole se si desidera che l'oggetto dell'evento corrisponda al caso dei filtri specificati.

Quando si crea una sottoscrizione di eventi, usare la scheda Filtri nella creazione guidata.

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

Modello di Azure Resource Manager

Nell'esempio seguente di un modello di Resource Manager si crea una sottoscrizione di eventi che applica un filtro in base all'inizio dell'oggetto. Si usa la proprietà subjectBeginsWith per limitare gli eventi a quelli relativi a una risorsa specifica. Si passa l'ID risorsa di un gruppo di sicurezza di rete.

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

L'esempio successivo di un modello di Resource Manager crea una sottoscrizione per una risorsa di archiviazione BLOB e limita gli eventi a quelli con un oggetto che termina con .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" ]
      }
    }
  }
]

Nota

Per altre informazioni su questi filtri (tipi di eventi, oggetto e avanzato), vedere Informazioni sul filtro degli eventi per le sottoscrizioni di Griglia di eventi.

Filtrare in base a operatori e dati

Per una maggiore flessibilità nell'applicazione di filtri è possibile usare gli operatori e le proprietà dei dati per filtrare gli eventi.

Creare una sottoscrizione con filtri avanzati

Per altre informazioni sugli operatori e sulle chiavi che è possibile usare per i filtri avanzati, vedere Filtri avanzati.

Questi esempi creano un argomento personalizzato. Sottoscrivono l'argomento personalizzato e filtrano in base a un valore nell'oggetto dati. Gli eventi che hanno la proprietà color impostata sul blue, red o green vengono inviati alla sottoscrizione.

Azure PowerShell

Per PowerShell, usare:

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

Interfaccia della riga di comando di Azure

Per l'interfaccia della riga di comando di Azure usare:

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

Si noti che per la sottoscrizione è impostata una data di scadenza.

Azure portal

  1. Nella pagina Sottoscrizione eventi selezionare Aggiungi nuovo filtro nella sezione FILTRI AVANZATI.

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

  2. Specificare una chiave, un operatore e un valore o valori da confrontare. Nell'esempio seguente, data.color viene usato come chiave, String è in come operatore e i valori blu, rosso e verde vengono specificati per i valori.

    Screenshot showing an example of an advanced filter.

    Nota

    Per altre informazioni sui filtri avanzati, vedere Informazioni sul filtro degli eventi per le sottoscrizioni di Griglia di eventi.

Testare il filtro

Per testare il filtro, inviare un evento con il campo color impostato su green. Poiché il verde è uno dei valori nel filtro, l'evento viene recapitato all'endpoint.

Azure PowerShell

Per PowerShell, usare:

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

Per testare uno scenario in cui non viene inviato l'evento, inviare un evento con il campo color impostato su yellow. Poiché yellow non è uno dei valori specificati nella sottoscrizione, l'evento non viene inviato alla sottoscrizione.

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

Interfaccia della riga di comando di Azure

Per l'interfaccia della riga di comando di Azure usare:

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

Per testare uno scenario in cui non viene inviato l'evento, inviare un evento con il campo color impostato su yellow. Poiché yellow non è uno dei valori specificati nella sottoscrizione, l'evento non viene inviato alla sottoscrizione.

Per l'interfaccia della riga di comando di Azure usare:

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

Passaggi successivi

Per altre informazioni sui filtri (tipi di evento, oggetto e avanzato), vedere Informazioni sul filtro degli eventi per le sottoscrizioni di Griglia di eventi.