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 před jejich uložením v pracovním 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í příkazu where .
  • Přidá nový sloupec pomocí operátoru extend .
  • Naformátuje výstup tak, aby odpovídal sloupcům cílové tabulky pomocí operátoru projektu .
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řed jejich uložením v pracovním 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.

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

K zpracování dynamických literálů použijte funkci parse_json.

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

let – příkaz

Pravá strana 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.

tabulkové výrazy

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.

  • ==
  • !=
  • =~
  • !~
  • obsahuje
  • !Obsahuje
  • contains_cs
  • !contains_cs
  • Hsa
  • !Hsa
  • has_cs
  • !has_cs
  • startswith
  • !Startswith
  • startswith_cs
  • !startswith_cs
  • endswith
  • !Endswith
  • endswith_cs
  • !endswith_cs
  • odpovídá regulárnímu výrazu
  • 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

Sample output of parse_cef_dictionary function.

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
  • Stav
  • Město
  • Latitude
  • Longitude
| extend GeoLocation = geo_location("1.0.0.5")

Screenshot of sample output of geo_location function.

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.