Sdílet prostřednictvím


Struktura transformace ve službě Azure Monitor

Transformace ve službě Azure Monitor umožňují filtrovat nebo upravovat příchozí data, než se uloží do pracovního prostoru služby Log Analytics. Implementují se jako příkaz dotazovací jazyk Kusto (KQL) v pravidle shromažďování dat (DCR). Tento článek obsahuje podrobnosti o tom, jak je tento dotaz strukturovaný a omezení povoleného jazyka KQL.

Struktura transformace

Příkaz KQL se použije jednotlivě pro každou položku ve zdroji dat. Musí pochopit formát příchozích dat a vytvořit výstup ve struktuře cílové tabulky. Virtuální tabulka s názvem source představuje vstupní datový proud. source Sloupce tabulky odpovídají definici vstupního datového proudu. Následuje typický příklad transformace. Tento příklad obsahuje následující funkce:

  • Filtruje příchozí data pomocí where příkazu.
  • Přidá nový sloupec pomocí operátoru extend .
  • Formátuje výstup tak, aby odpovídal sloupcům cílové tabulky pomocí operátoru project .
source  
| where severity == "Critical" 
| extend Properties = parse_json(properties)
| project
    TimeGenerated = todatetime(["time"]),
    Category = category,
    StatusDescription = StatusDescription,
    EventName = name,
    EventId = tostring(Properties.EventId)

Omezení KQL

Vzhledem k tomu, že se transformace použije u každého záznamu jednotlivě, nemůže použít žádné operátory KQL, které fungují na více záznamech. Podporují se jenom operátory, které jako vstup přebírají jeden řádek a nevrací více než jeden řádek. Souhrn se například nepodporuje, protože shrnuje více záznamů. Úplný seznam podporovaných funkcí najdete v části Podporované funkce KQL.

Transformace v pravidle shromažďování dat (DCR) umožňují filtrovat nebo upravovat příchozí data předtím, než se uloží do pracovního prostoru služby Log Analytics. Tento článek popisuje, jak vytvářet transformace v dcR, včetně podrobností a omezení dotazovací jazyk Kusto (KQL) používaných pro příkaz transformace.

Parsovat příkaz

Příkaz analýzy v transformaci je omezený na 10 sloupců na příkaz z důvodů výkonu. Pokud transformace vyžaduje parsování více než 10 sloupců, rozdělte ho na několik příkazů, jak je popsáno v tématu Rozdělení velkých příkazů analýzy.

Povinné sloupce

Výstup každé transformace musí obsahovat platné časové razítko ve sloupci nazvaném TimeGenerated typu datetime. Nezapomeňte ho zahrnout do konečného extend nebo project blokového bloku. Vytvoření nebo aktualizace DCR bez TimeGenerated výstupu transformace vede k chybě.

Zpracování dynamických dat

Zvažte následující vstup s dynamickými daty:

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

Pokud chcete získat přístup k vlastnostem v AdditionalContext, definujte ho jako sloupec dynamického typu ve vstupním streamu:

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

Obsah sloupce AdditionalContext je teď možné analyzovat a používat v transformaci KQL:

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

Dynamické literály

parse_json Funkce slouží ke zpracování dynamických literálů.

Například následující dotazy poskytují stejné funkce:

print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')

Podporované funkce KQL

Podporované příkazy

Příkaz let

Pravou stranou let může být skalární výraz, tabulkový výraz nebo uživatelsky definovaná funkce. Podporují se pouze uživatelem definované funkce s skalárními argumenty.

Příkazy tabulkových výrazů

Jedinými podporovanými zdroji dat pro příkaz KQL jsou následující:

  • zdroj, který představuje zdrojová data. Příklad:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print operátor, který vždy vytvoří jeden řádek. Příklad:

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

Tabulkové operátory

Skalární operátory

Číselné operátory

Podporují se všechny číselné operátory .

Aritmetické operátory Datetime a Timespan

Podporují se všechny aritmetické operátory Datetime a Timespan.

Řetězcové operátory

Podporují se následující operátory string.

  • ==
  • !=
  • =~
  • !~
  • contains
  • !contains
  • contains_cs
  • !contains_cs
  • has
  • !has
  • has_cs
  • !has_cs
  • startswith
  • !startswith
  • startswith_cs
  • !startswith_cs
  • endswith
  • !endswith
  • endswith_cs
  • !endswith_cs
  • matches regex
  • in
  • !in

Bitové operátory

Podporují se následující bitové operátory .

  • binary_and()
  • binary_or()
  • binary_xor()
  • binary_not()
  • binary_shift_left()
  • binary_shift_right()

Skalární funkce

Bitové funkce

Převodní funkce

Funkce DateTime a TimeSpan

Dynamické a maticové funkce

Matematické funkce

Podmíněné funkce

Funkce řetězců

Funkce typů

Speciální funkce

parse_cef_dictionary

Vzhledem k řetězci obsahujícímu zprávu parse_cef_dictionary CEF parsuje vlastnost Extension zprávy do objektu dynamického klíče/hodnoty. Středník je vyhrazený znak, který by měl být nahrazen před předáním nezpracované zprávy do metody, jak je znázorněno v příkladu.

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

Ukázkový výstup funkce parse_cef_dictionary

geo_location

Vzhledem k tomu, že se podporuje řetězec obsahující IP adresu (podporuje se protokol IPv4 a IPv6), geo_location vrátí funkce přibližné zeměpisné umístění, včetně následujících atributů:

  • Země
  • Oblast
  • State
  • City
  • Latitude
  • Longitude
| extend GeoLocation = geo_location("1.0.0.5")

Snímek obrazovky s ukázkovým výstupem funkce geo_location

Důležité

Vzhledem k povaze služby geografické polohy IP, kterou tato funkce využívá, může při nadměrném použití zavádět latenci příjmu dat. Při použití této funkce více než několikrát pro každou transformaci buďte opatrní.

Uvozování identifikátorů

Podle potřeby použijte uvozování identifikátorů .

Další kroky

  • Vytvořte pravidlo shromažďování dat a přidružení k němu z virtuálního počítače pomocí agenta služby Azure Monitor.