Parsování textových dat v protokolech služby Azure Monitor
Některá data protokolů shromážděná službou Azure Monitor budou obsahovat několik informací v jedné vlastnosti. Parsování těchto dat do více vlastností usnadňuje použití v dotazech. Běžným příkladem je vlastní protokol , který shromažďuje celý záznam protokolu s více hodnotami do jedné vlastnosti. Vytvořením samostatných vlastností pro různé hodnoty můžete vyhledávat a agregovat je.
Tento článek popisuje různé možnosti analýzy dat protokolu ve službě Azure Monitor při příjmu dat a při jejich načtení v dotazu a porovnává jejich relativní výhody.
Požadovaná oprávnění
- K parsování dat v době shromažďování potřebujete
Microsoft.Insights/dataCollectionRuleAssociations/*
oprávnění, která například poskytuje předdefinovaná role Přispěvatel Log Analytics. - K parsování dat v době dotazu potřebujete
Microsoft.OperationalInsights/workspaces/query/*/read
oprávnění, která například poskytuje předdefinovaná role Čtenář Log Analytics.
Metody analýzy
Data můžete analyzovat buď v době příjmu dat, kdy se data shromažďují, nebo v době dotazu, kdy data analyzujete pomocí dotazu. Každá strategie má jedinečné výhody.
Parsování dat v době shromažďování
Pomocí transformací parsujte data v době shromažďování a definujte sloupce, do kterých se mají parsovaná data odesílat.
Výhody:
- Snadnější dotazování shromážděných dat, protože do dotazu nemusíte zahrnout příkazy pro analýzu.
- Lepší výkon dotazů, protože dotaz nemusí provádět analýzu.
Nevýhody:
- Musí být definováno předem. Nelze zahrnout data, která už byla shromážděna.
- Pokud změníte logiku parsování, bude platit jenom pro nová data.
- Zvyšuje latenci shromažďování dat.
- Zpracování chyb může být obtížné.
Parsování dat v době dotazu
Při analýze dat v době dotazu zahrnete do dotazu logiku, která parsuje data do více polí. Samotná tabulka se nezmění.
Výhody:
- Platí pro všechna data, včetně dat, která už byla shromážděna.
- Změny logiky se dají okamžitě použít u všech dat.
- Flexibilní možnosti analýzy, včetně předdefinované logiky pro konkrétní datové struktury
Nevýhody:
- Vyžaduje složitější dotazy. Tuto nevýhodu lze zmírnit použitím funkcí pro simulaci tabulky.
- Musí replikovat logiku parsování ve více dotazech. Může sdílet určitou logiku prostřednictvím funkcí.
- Může vytvořit režijní náklady, když spustíte složitou logiku pro velmi velké sady záznamů (miliardy záznamů).
Parsování shromažďovaných dat
Další informace o analýze shromažďovaných dat najdete v tématu Struktura transformace ve službě Azure Monitor. Tento přístup vytvoří v tabulce vlastní vlastnosti, které můžou používat dotazy stejně jako jakékoli jiné vlastnosti.
Parsování dat v dotazu pomocí vzorů
Pokud lze data, která chcete analyzovat, identifikovat vzorem opakovaným napříč záznamy, můžete pomocí různých operátorů v dotazovací jazyk Kusto extrahovat konkrétní část dat do jedné nebo více nových vlastností.
Jednoduché textové vzory
Pomocí operátoru parse v dotazu vytvořte jednu nebo více vlastních vlastností, které lze extrahovat z řetězcového výrazu. Určíte vzor, který se má identifikovat, a názvy vlastností, které se mají vytvořit. Tento přístup je užitečný pro data s řetězci klíč-hodnota s formulářem podobným key=value
.
Představte si vlastní protokol s daty v následujícím formátu:
Time=2018-03-10 01:34:36 Event Code=207 Status=Success Message=Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
Time=2018-03-10 01:33:33 Event Code=208 Status=Warning Message=Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
Time=2018-03-10 01:35:44 Event Code=209 Status=Success Message=Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
Time=2018-03-10 01:38:22 Event Code=302 Status=Error Message=Application could not connect to database
Time=2018-03-10 01:31:34 Event Code=303 Status=Error Message=Application lost connection to database
Následující dotaz parsuje tato data do jednotlivých vlastností. Řádek s project
se přidá tak, aby vrátil pouze počítané vlastnosti, a ne RawData
, což je jedna vlastnost, která obsahuje celou položku z vlastního protokolu.
MyCustomLog_CL
| parse RawData with * "Time=" EventTime " Event Code=" Code " Status=" Status " Message=" Message
| project EventTime, Code, Status, Message
Tento příklad rozdělí uživatelské jméno hlavního názvu uživatele (UPN) v tabulce AzureActivity
.
AzureActivity
| parse Caller with UPNUserPart "@" *
| where UPNUserPart != "" //Remove non UPN callers (apps, SPNs, etc)
| distinct UPNUserPart, Caller
Regulární výrazy
Pokud lze vaše data identifikovat pomocí regulárního výrazu, můžete použít funkce, které používají regulární výrazy k extrahování jednotlivých hodnot. Následující příklad používá extrakci k rozdělení UPN
pole ze AzureActivity
záznamů a následnému vrácení jedinečných uživatelů.
AzureActivity
| extend UPNUserPart = extract("([a-z.]*)@", 1, Caller)
| distinct UPNUserPart, Caller
K zajištění efektivní analýzy ve velkém měřítku používá Azure Monitor re2 verzi regulárních výrazů, která je podobná, ale není shodná s některými dalšími variantami regulárních výrazů. Další informace najdete v syntaxi výrazu re2.
Parsování dat oddělených v dotazu
Data s oddělovači oddělují pole společným znakem, například čárkou v souboru CSV. Pomocí funkce split můžete analyzovat data s oddělovači pomocí oddělovače, který zadáte. Tento přístup můžete použít s operátorem extend a vrátit všechna pole v datech nebo zadat jednotlivá pole, která se mají zahrnout do výstupu.
Poznámka
Vzhledem k tomu, že rozdělení vrací dynamický objekt, může být nutné výsledky explicitně přetypovat na datové typy, jako je například řetězec, který se použije v operátorech a filtrech.
Představte si vlastní protokol s daty v následujícím formátu CSV:
2018-03-10 01:34:36, 207,Success,Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
2018-03-10 01:33:33, 208,Warning,Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
2018-03-10 01:35:44, 209,Success,Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
2018-03-10 01:38:22, 302,Error,Application could not connect to database
2018-03-10 01:31:34, 303,Error,Application lost connection to database
Následující dotaz by tato data parsoval a shrnul podle dvou počítaných vlastností. První řádek rozdělí vlastnost na RawData
pole řetězců. Každý z dalších řádků pojmenuje jednotlivé vlastnosti a přidá je do výstupu pomocí funkcí, které je převedou na příslušný datový typ.
MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend EventTime = todatetime(CSVFields[0])
| extend Code = toint(CSVFields[1])
| extend Status = tostring(CSVFields[2])
| extend Message = tostring(CSVFields[3])
| where getyear(EventTime) == 2018
| summarize count() by Status,Code
Parsování předdefinovaných struktur v dotazu
Pokud jsou data naformátovaná ve známé struktuře, můžete k analýze předdefinovaných struktur použít některou z funkcí v dotazovací jazyk Kusto:
Následující příklad dotazu parsuje Properties
pole AzureActivity
tabulky, které je strukturované ve formátu JSON. Výsledky uloží do dynamické vlastnosti s názvem parsedProp
, která obsahuje jednotlivou pojmenovanou hodnotu ve formátu JSON. Tyto hodnoty slouží k filtrování a sumarizace výsledků dotazu.
AzureActivity
| extend parsedProp = parse_json(Properties)
| where parsedProp.isComplianceCheck == "True"
| summarize count() by ResourceGroup, tostring(parsedProp.tags.businessowner)
Tyto funkce analýzy můžou být náročné na procesor. Používejte je pouze v případech, kdy dotaz používá více vlastností z formátovaných dat. Jinak je zpracování jednoduché shody vzorů rychlejší.
Následující příklad ukazuje rozpis typu řadiče TGT Preauth
domény. Typ existuje pouze v EventData
poli, což je řetězec XML. Žádná další data z tohoto pole nejsou potřeba. V tomto případě se k výběru požadované části dat používá analýza .
SecurityEvent
| where EventID == 4768
| parse EventData with * 'PreAuthType">' PreAuthType '</Data>' *
| summarize count() by PreAuthType
Použití funkce k simulaci tabulky
Můžete mít více dotazů, které provádějí stejnou analýzu konkrétní tabulky. V takovém případě vytvořte funkci , která vrátí analyzovaná data místo replikace logiky analýzy v každém dotazu. Alias funkce pak můžete použít místo původní tabulky v jiných dotazech.
Podívejte se na předchozí příklad vlastního protokolu s oddělovači. Pokud chcete parsovaná data použít ve více dotazech, vytvořte funkci pomocí následujícího dotazu a uložte ji s aliasem MyCustomCSVLog
.
MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend DateTime = tostring(CSVFields[0])
| extend Code = toint(CSVFields[1])
| extend Status = tostring(CSVFields[2])
| extend Message = tostring(CSVFields[3])
Teď můžete v dotazech použít alias MyCustomCSVLog
místo skutečného názvu tabulky jako v následujícím příkladu:
MyCustomCSVLog
| summarize count() by Status,Code
Další kroky
Seznamte se s dotazy na protokoly pro analýzu dat shromážděných ze zdrojů dat a řešení.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro