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
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(místo column_ifexists použijte columnifexisty).
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
ago
datetime_add
datetime_diff
datetime_part
dayofmonth
dayofweek
dayofyear
endofday
endofmonth
endofweek
endofyear
getmonth
getyear
hourofday
make_datetime
make_timespan
now
startofday
startofmonth
startofweek
startofyear
todatetime
totimespan
weekofyear
Dynamické a maticové funkce
Matematické funkce
Podmíněné funkce
Funkce řetězců
base64_encodestring
(místo base64_encode_tostring použijte base64_encodestring)base64_decodestring
(místo base64_decode_tostring použijte base64_decodestring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
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
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")
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.