Filtrare gli eventi per Griglia di eventi

Questo articolo ti mostra come filtrare gli eventi che Event Grid consegna al tuo endpoint quando crei un abbonamento agli eventi. Puoi filtrare per tipo di evento, per soggetto, oppure per campi e operatori avanzati, così che solo gli eventi che ti interessano raggiungano il tuo gestore.

Gli esempi utilizzano Azure PowerShell, interfaccia della riga di comando di Azure, il portale Azure e i template Azure Resource Manager (ARM). Usa lo strumento che si adatta al tuo flusso di lavoro. Per approfondire le opzioni di filtraggio disponibili, consulta Comprendere il filtraggio degli eventi per gli abbonamenti a Event Grid.

Prerequisiti

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. I seguenti esempi creano abbonamenti agli eventi per un gruppo di risorse ma limitano gli eventi 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

Portale di Azure

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 che mostra la pagina Crea sottoscrizione con i tipi di evento selezionati.

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

Screenshot che mostra la pagina Sottoscrizione eventi con la scheda Filtri selezionata.

Specifica i filtri mentre crei un argomento personalizzato selezionando il link Aggiungi Tipo di Evento come mostrato nell'immagine seguente.

Screenshot che mostra la pagina Crea sottoscrizione di eventi per un argomento personalizzato.

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

Screenshot della pagina Sottoscrizione eventi con il pulsante Aggiungi tipo di evento selezionato.

Modello di Azure Resource Manager

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

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2025-02-15",
    "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 da far corrispondere 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 della 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 della 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"

Portale di Azure

Per una sottoscrizione di eventi esistente:

  1. Nella pagina Sottoscrizione eventi, selezionare Abilita il filtro per soggetto.

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

    Schermata della pagina di sottoscrizione degli eventi con esempio di filtro per oggetto.

  3. Selezionare l'opzione Corrispondenza del soggetto con distinzione tra maiuscole e minuscole se si desidera che il soggetto dell'evento corrisponda esattamente all'uso di maiuscole e minuscole dei filtri specificati.

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

Screenshot della pagina Crea sottoscrizione di eventi con la scheda Filtri selezionata.

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 della risorsa di un gruppo di sicurezza di rete.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2025-02-15",
    "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": "2025-02-15",
    "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 su blu, rosso o verde 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=@{operatorType="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.

Portale di Azure

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

    Screenshot che mostra la pagina Sottoscrizione eventi con il collegamento Aggiungi nuovo filtro evidenziato.

  2. Specifica una chiave, un operatore e uno o più 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 che mostra un esempio di filtro avanzato.

    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é giallo non è uno dei valori specificati nella sottoscrizione, l'evento non viene recapitato 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. Giallo non è uno dei valori specificati nella sottoscrizione, quindi l'evento non viene recapitato 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