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
- rozšířit
- projekt
- tisknout
- kde
- udělat rozbor
- pryč od projektu
- přejmenování projektu
- datatable
- columnifexists (místo column_ifexists použijte columnifexists).
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
- má
- !má
- has_cs
- !has_cs
- startswith
- !startswith
- startswith_cs
- !startswith_cs
- endswith
- !endswith
- endswith_cs
- !endswith_cs
- odpovídá regulárnímu výrazu
- in
- !v
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
- před
- datetime_add
- datetime_diff
- datetime_part
- dayofmonth
- dayofweek
- denofyear
- konec dne
- endofmonth
- endofweek
- endofyear
- getmonth
- getyear
- hourofday
- make_datetime
- make_timespan
- teď
- startofday
- startofmonth
- startofweek
- startofyear
- todatetime
- totimespan
- weekofyear
Dynamické a maticové funkce
Matematické funkce
- Abs
- přihrádka/podlaha
- strop
- Exp
- exp10
- exp2
- isfinite
- isinf
- isnan
- kláda
- log10
- log2
- zajatec
- kulatý
- sign
Podmíněné funkce
Funkce řetězců
- base64_encodestring (místo base64_encode_tostring používejte base64_encodestring).
- base64_decodestring (místo base64_decode_tostring použijte base64_decodestring)
- countof
- extrahovat
- extract_all
- indexof
- isempty
- isnotempty
- parse_json
- replace
- split
- strcat
- strcat_delim
- strlen
- podřetězec
- 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.