Principy filtrování událostí pro Event Grid předplatná

Tento článek popisuje různé způsoby filtrování událostí odesílaných do vašeho koncového bodu. Při vytváření odběru událostí máte tři možnosti filtrování:

  • Typy událostí
  • Předmět začíná na nebo končí na
  • Pokročilá pole a operátory

Filtrování typů událostí

Ve výchozím nastavení se všechny typy událostí pro zdroj událostí odesílané do koncového bodu. Můžete se rozhodnout, že do koncového bodu odešlete jenom určité typy událostí. Můžete například dostávat oznámení o aktualizacích vašich prostředků, ale ne na jiné operace, jako je odstranění. V takovém případě filtrujte podle Microsoft.Resources.ResourceWriteSuccess typu události. Zadejte pole s typy událostí nebo zadejte , abyste All získali všechny typy událostí pro zdroj událostí.

Syntaxe JSON pro filtrování podle typu události je:

"filter": {
  "includedEventTypes": [
    "Microsoft.Resources.ResourceWriteFailure",
    "Microsoft.Resources.ResourceWriteSuccess"
  ]
}

Filtrování předmětu

Pro jednoduché filtrování podle předmětu zadejte počáteční nebo koncovou hodnotu předmětu. Můžete například zadat předmět končící na a získat pouze události související s nahrání .txt textového souboru do účtu úložiště. Nebo můžete filtrovat předmět, který začíná na , a získat všechny události pro tento kontejner, ale ne jiné kontejnery /blobServices/default/containers/testcontainer v účtu úložiště.

Při publikování událostí do vlastních témat vytvořte pro své události předměty, které předplatitelům udělují informace o tom, jestli se o událost zajímají. Odběratelé používají vlastnost subject k filtrování a směrování událostí. Zvažte přidání cesty pro místo, kde došlo k události, aby odběratelé mohli filtrovat podle segmentů této cesty. Cesta umožňuje odběratelům úzce nebo obecně filtrovat události. Pokud v předmětu zadáte cestu se třemi segmenty, jako je , mohou odběratelé filtrovat podle prvního segmentu a získat tak širokou /A/B/C /A škálu událostí. Tito odběratelé se dočtou událostí s tématy, jako /A/B/C jsou nebo /A/D/E . Ostatní odběratelé mohou filtrovat podle /A/B a získat užší sadu událostí.

Syntaxe JSON pro filtrování podle předmětu je:

"filter": {
  "subjectBeginsWith": "/blobServices/default/containers/mycontainer/log",
  "subjectEndsWith": ".jpg"
}

Rozšířené filtrování

Pokud chcete filtrovat podle hodnot v datových polích a zadat operátor porovnání, použijte možnost rozšířeného filtrování. V rozšířeném filtrování zadáte:

  • operator type – typ porovnání.
  • key – pole v datech událostí, které používáte k filtrování. Může to být číslo, logická hodnota, řetězec nebo pole.
  • values – hodnota nebo hodnoty, které se budou porovnávat s klíčem.

Klíč

Klíč je pole v datech událostí, které používáte k filtrování. Může to být jeden z následujících typů:

  • Číslo

  • Logická hodnota

  • Řetězec

  • Pole. Abyste tuto funkci enableAdvancedFilteringOnArrays měli, musíte vlastnost nastavit na true.

    "filter":
    {
        "subjectBeginsWith": "/blobServices/default/containers/mycontainer/log",
        "subjectEndsWith": ".jpg",
        "enableAdvancedFilteringOnArrays": true
    }
    

Pro události ve schématu Event Grid použijte pro klíč následující ID hodnoty: , Topic , , , , nebo data událostí Subject EventType DataVersion (například data.key1 ).

Pro události ve schématu cloudových událostí použijte pro klíč následující eventid hodnoty: , source , , nebo data událostí eventtype eventtypeversion (například data.key1 ).

Pro vlastní vstupní schéma použijte datová pole události (například data.key1 ). Pokud chcete získat přístup k polím v datové části, použijte . zápis (tečka). Například pro data.sitename přístup k nebo pro následující data.appEventTypeDetail.action sitename action ukázkovou událost.

    "data": {
        "appEventTypeDetail": {
            "action": "Started"
        },
        "siteName": "<site-name>",
        "clientRequestId": "None",
        "correlationRequestId": "None",
        "requestId": "292f499d-04ee-4066-994d-c2df57b99198",
        "address": "None",
        "verb": "None"
    },

Hodnoty

Hodnoty mohou být: číslo, řetězec, logická hodnota nebo pole.

Operátory

Dostupné operátory pro čísla jsou:

Číslo v

Operátor NumberIn se vyhodnotí jako true, pokud je hodnota klíče jednou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v counter data oddílu 5 nebo 1.

"advancedFilters": [{
    "operatorType": "NumberIn",
    "key": "data.counter",
    "values": [
        5,
        1
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a, b, c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

NumberNotIn

NumberNotIn se vyhodnotí jako true, pokud hodnota klíče není žádná ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu není counter data 41 a 0.

"advancedFilters": [{
    "operatorType": "NumberNotIn",
    "key": "data.counter",
    "values": [
        41,
        0
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a, b, c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

NumberLessThan

Operátor NumberLessThan se vyhodnotí jako true, pokud je hodnota klíče menší než zadaná hodnota filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v counter oddílu menší než data 100.

"advancedFilters": [{
    "operatorType": "NumberLessThan",
    "key": "data.counter",
    "value": 100
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti hodnotě filtru. Tady je pseudokód s klíčem : [v1, v2, v3] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH key IN (v1, v2, v3)
    IF key < filter
        MATCH

NumberGreaterThan

Operátor NumberGreaterThan se vyhodnotí jako true, pokud je hodnota klíče větší než zadaná hodnota filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v counter oddílu větší než data 20.

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.counter",
    "value": 20
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti hodnotě filtru. Tady je pseudokód s klíčem : [v1, v2, v3] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH key IN (v1, v2, v3)
    IF key > filter
        MATCH

NumberLessThanOrEquals

Operátor NumberLessThanOrEquals se vyhodnotí jako true, pokud je hodnota klíče menší nebo rovna zadané hodnotě filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v oddílu menší než nebo rovna counter data 100.

"advancedFilters": [{
    "operatorType": "NumberLessThanOrEquals",
    "key": "data.counter",
    "value": 100
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti hodnotě filtru. Tady je pseudokód s klíčem : [v1, v2, v3] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH key IN (v1, v2, v3)
    IF key <= filter
        MATCH

NumberGreaterThanOrEquals

Operátor NumberGreaterThanOrEquals se vyhodnotí jako true, pokud je hodnota klíče větší nebo rovna zadané hodnotě filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v oddílu větší než nebo counter data rovna 30.

"advancedFilters": [{
    "operatorType": "NumberGreaterThanOrEquals",
    "key": "data.counter",
    "value": 30
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti hodnotě filtru. Tady je pseudokód s klíčem : [v1, v2, v3] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH key IN (v1, v2, v3)
    IF key >= filter
        MATCH

NumberInRange

Operátor NumberInRange se vyhodnotí jako true, pokud je hodnota klíče v jednom ze zadaných rozsahů filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v oddílu v jednom ze dvou key1 data rozsahů: 3,14159 – 999,95, 3000 – 4000.

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Vlastnost values je pole rozsahů. V předchozím příkladu je to pole dvou rozsahů. Tady je příklad pole s jedním rozsahem ke kontrole.

Pole s jedním rozsahem:

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: pole rozsahů. V tomto pseudokódu a jsou a nízké a vysoké hodnoty každého rozsahu v b poli. Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
       IF key >= a AND key <= b
           MATCH

NumberNotInRange

Operátor NumberNotInRange se vyhodnotí jako true, pokud hodnota klíče není v žádném ze zadaných rozsahů filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v oddílu v jednom ze dvou key1 data rozsahů: 3,14159 – 999,95, 3000 – 4000. Pokud je, vrátí operátor hodnotu false.

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Vlastnost values je pole rozsahů. V předchozím příkladu je to pole dvou rozsahů. Tady je příklad pole s jedním rozsahem ke kontrole.

Pole s jedním rozsahem:

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: pole rozsahů. V tomto pseudokódu a jsou a nízké a vysoké hodnoty každého rozsahu v b poli. Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
        IF key >= a AND key <= b
            FAIL_MATCH

Operátor dostupný pro logické hodnoty je:

BoolEquals

Operátor BoolEquals se vyhodnotí jako true, pokud je hodnota klíče zadaným logickým filtrem . V následujícím příkladu zkontroluje, jestli je hodnota isEnabled atributu v data oddílu true .

"advancedFilters": [{
    "operatorType": "BoolEquals",
    "key": "data.isEnabled",
    "value": true
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti logické hodnotě filtru. Tady je pseudokód s klíčem : [v1, v2, v3] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH key IN (v1, v2, v3)
    IF filter == key
        MATCH

Dostupné operátory pro řetězce jsou:

StringContains

Hodnota StringContains se vyhodnotí jako true, pokud hodnota klíče obsahuje libovolnou zadanou hodnotu filtru (jako podřetězce). V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu obsahuje jeden ze key1 data zadaných podřetězců: microsoft nebo azure . Například obsahuje azure data factory azure .

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data.key1",
    "values": [
        "microsoft", 
        "azure"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            MATCH

StringNotContains

Operátor StringNotContains se vyhodnotí jako true, pokud klíč neobsahuje zadané hodnoty filtru jako podřetězce. Pokud klíč obsahuje jednu ze zadaných hodnot jako podřetězec, operátor se vyhodnotí jako false. V následujícím příkladu vrátí operátor hodnotu true pouze v případě, že hodnota atributu v oddílu nemá podřetězce a key1 data contoso fabrikam .

"advancedFilters": [{
    "operatorType": "StringNotContains",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            FAIL_MATCH

Aktuální omezení tohoto operátoru najdete v části Omezení.

StringBeginsWith

Operátor StringBeginsWith se vyhodnotí jako true, pokud hodnota klíče začíná libovolnou zadanou hodnotou filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v key1 oddílu začíná na nebo data event grid . Například začíná event hubs na event .

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            MATCH

StringNotBeginsWith

Operátor StringNotBeginsWith se vyhodnotí jako true, pokud hodnota klíče nezačíná žádnou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu key1 data nezačíná řetězcem event nebo message .

"advancedFilters": [{
    "operatorType": "StringNotBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            FAIL_MATCH

ŘetězecEndsWith

Operátor StringEndsWith se vyhodnotí jako true, pokud hodnota klíče končí jednou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu key1 data končí na nebo jpg jpeg png . Například končí eventgrid.png na png .

"advancedFilters": [{
    "operatorType": "StringEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            MATCH

StringNotEndsWith

Operátor StringNotEndsWith se vyhodnotí jako true, pokud hodnota klíče nekončí žádnou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu nekončí key1 data na nebo jpg jpeg png .

"advancedFilters": [{
    "operatorType": "StringNotEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            FAIL_MATCH

ŘetězecV

Operátor StringIn zkontroluje, jestli hodnota klíče přesně odpovídá jedné ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli je hodnota atributu v key1 data oddílu nebo contoso fabrikam factory .

"advancedFilters": [{
    "operatorType": "StringIn",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam", 
        "factory"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

ŘetězecNotIn

Operátor StringNotIn zkontroluje, jestli hodnota klíče neodpovídá žádné zadané hodnotě filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu v oddílu není a key1 data aws bridge .

"advancedFilters": [{
    "operatorType": "StringNotIn",
    "key": "data.key1",
    "values": [
        "aws", 
        "bridge"
    ]
}]

Pokud je klíč pole, budou se všechny hodnoty v poli kontrolovat oproti poli hodnot filtru. Tady je pseudokód s klíčem a [v1, v2, v3] filtrem: [a,b,c] . Všechny hodnoty klíčů s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

Při porovnávání řetězců se rozlišují malá a velká písmena.

Poznámka

Pokud JSON události neobsahuje klíč rozšířeného filtru, filtr se vyfiltruje, protože se neshoduje pro následující operátory: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringNotEndsWith, StringIn.

Filtr se vyfiltruje podle shody pro následující operátory:NumberNotIn, StringNotIn.

IsNullOrUndefined

Operátor IsNullOrUndefined se vyhodnotí jako true, pokud je hodnota klíče NULL nebo nedefinovaná.

{
    "operatorType": "IsNullOrUndefined",
    "key": "data.key1"
}

V následujícím příkladu chybí key1, takže operátor by se vyhodnotil jako true.

{ 
    "data": 
    { 
        "key2": 5 
    } 
}

V následujícím příkladu je key1 nastaven na hodnotu null, takže operátor by se vyhodnotil jako true.

{
    "data": 
    { 
        "key1": null
    }
}

Pokud má key1 v těchto příkladech nějakou jinou hodnotu, operátor by se vyhodnotil jako false.

IsNotNull

Operátor IsNotNull se vyhodnotí jako true, pokud hodnota klíče není NULL nebo není definována.

{
    "operatorType": "IsNotNull",
    "key": "data.key1"
}

OR and AND

Pokud zadáte jeden filtr s více hodnotami, provede se operace OR, takže hodnota pole klíče musí být jedna z těchto hodnot. Tady je příklad:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/",
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

Pokud zadáte více různých filtrů, je provedena operace AND, takže musí být splněny všechny podmínky filtru. Tady je příklad:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/"
        ]
    },
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

CloudEvents

Pro události ve schématu CloudEvents použijte pro klíč následující eventid hodnoty: , source , , nebo data událostí eventtype eventtypeversion (například data.key1 ).

Můžete také použít atributy kontextu rozšíření v CloudEvents 1.0. V následujícím příkladu jsou comexampleextension1 comexampleothervalue atributy kontextu rozšíření a .

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "subject": null,
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}

Tady je příklad použití atributu kontextu rozšíření ve filtru.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "comexampleothervalue",
    "values": [
        "5", 
        "1"
    ]
}]

Omezení

Rozšířené filtrování má následující omezení:

  • 5 pokročilých filtrů a 25 hodnot filtru napříč všemi filtry na odběr Event Gridu
  • 512 znaků na hodnotu řetězce
  • Pět hodnot pro operátory in a not v operátorech
  • Operátor StringNotContains momentálně není na portálu k dispozici.
  • Klíče, které . v nich mají znak tečky Například: http://schemas.microsoft.com/claims/authnclassreference nebo john.doe@contoso.com . V současné době není v klíčích k dispozici žádná podpora řídicích znaků.

Stejný klíč lze použít ve více než jednom filtru.

Další kroky