Analýza textových dat v protokolech služby Azure Monitor
Některá data protokolu shromážděná službou Azure Monitor budou obsahovat několik informací v jedné vlastnosti. Analýza těchto dat do více vlastností usnadňuje použití v dotazech. Běžným příkladem je vlastní protokol , který shromažďuje celou položku protokolu s více hodnotami do jedné vlastnosti. Vytvořením samostatných vlastností pro různé hodnoty můžete vyhledávat a agregovat jednotlivé hodnoty.
Tento článek popisuje různé možnosti analýzy dat protokolu ve službě Azure Monitor, když se data ingestují a kdy se načtou v dotazu, a porovnává relativní výhody pro každý z nich.
Požadována oprávnění
- Pokud chcete analyzovat data v době shromažďování, potřebujete
Microsoft.Insights/dataCollectionRuleAssociations/*
oprávnění, která poskytuje například předdefinovaná role přispěvatele Log Analytics. - Pokud chcete analyzovat data v době dotazu, potřebujete
Microsoft.OperationalInsights/workspaces/query/*/read
oprávnění, která poskytuje například předdefinovaná role čtenáře Log Analytics.
Parsování metod
Data můžete analyzovat buď v době příjmu dat, když se data shromažďují, nebo v době dotazu při analýze dat pomocí dotazu. Každá strategie má jedinečné výhody.
Parsování dat v době shromažďování
Pomocí transformací můžete analyzovat data v době shromažďování a definovat sloupce, do kterých se mají analyzovat data.
Výhody:
- Snadnější dotazování shromážděných dat, protože do dotazu nepotřebujete zahrnout příkazy analýzy.
- 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 analýzy, bude platit pouze pro nová data.
- Zvyšuje dobu latence 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á skutečná tabulka se nezmění.
Výhody:
- Platí pro všechna data, včetně dat, která už byla shromážděna.
- Změny logiky je možné použít okamžitě 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 je možné zmírnit pomocí funkcí k simulaci tabulky.
- Musí replikovat logiku analýzy v několika dotazech. Může sdílet určitou logiku prostřednictvím funkcí.
- Může vytvářet režijní náklady při spouštění složité logiky pro velmi velké sady záznamů (miliardy záznamů).
Parsování dat při jejich shromažďování
Další informace o parsování dat při jejich shromažďování 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 jako jakoukoli jinou vlastnost.
Parsování dat v dotazu pomocí vzorů
Pokud data, která chcete analyzovat, je možné identifikovat pomocí vzoru, který se opakuje 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é vzory textu
Pomocí operátoru analýzy 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
.
Zvažte 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 by tato data parsovala do jednotlivých vlastností. Řádek s project
se přidá pouze k vrácení počítaných vlastností, nikoli 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 AzureActivity
tabulce.
AzureActivity
| parse Caller with UPNUserPart "@" *
| where UPNUserPart != "" //Remove non UPN callers (apps, SPNs, etc)
| distinct UPNUserPart, Caller
Regulární výrazy
Pokud se vaše data dají identifikovat pomocí regulárního výrazu, můžete k extrakci jednotlivých hodnot použít funkce, které používají regulární výrazy . Následující příklad používá extrakci k rozdělení UPN
pole ze AzureActivity
záznamů a následné 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 azure Monitor používá re2 verzi regulárních výrazů, která je podobná, ale není identická s některými z ostatních variant regulárních výrazů. Další informace najdete v syntaxi výrazu re2.
Analýza dat oddělených v dotazu
Data s oddělovači odděluje pole společným znakem, například čárkou v souboru CSV. Pomocí rozdělené funkce můžete analyzovat data oddělená pomocí oddělovače, který zadáte. Tento přístup můžete použít s operátorem extend k vrácení všech polí v datech nebo k určení jednotlivých polí, která mají být zahrnuta 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, například řetězec, který se má použít v operátorech a filtrech.
Zvažte 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 sumarizovat podle dvou počítaných vlastností. První řádek rozdělí RawData
vlastnost na pole řetězců. Každý z dalších řádků dává název jednotlivým vlastnostem 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
Analýza 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 analyzuje Properties
pole AzureActivity
tabulky, která je strukturovaná ve formátu JSON. Uloží výsledky do dynamické vlastnosti s názvem parsedProp
, která zahrnuje jednotlivou pojmenovanou hodnotu ve formátu JSON. Tyto hodnoty slouží k filtrování a sumarizaci 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 jenom v případech, kdy dotaz používá více vlastností z formátovaných dat. V opačném případě je jednoduché zpracování porovnávání 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. Nejsou potřeba žádná jiná data z tohoto pole. V tomto případě se analýza používá k výběru požadované části dat.
SecurityEvent
| where EventID == 4768
| parse EventData with * 'PreAuthType">' PreAuthType '</Data>' *
| summarize count() by PreAuthType
Použití funkce k simulaci tabulky
Může se stát, že máte více dotazů, které provádějí stejnou analýzu určité tabulky. V tomto 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.
Představte si předchozí příklad vlastního protokolu oddělených čárkami. Pokud chcete použít analyzovaná data ve více dotazech, vytvořte funkci pomocí následujícího dotazu a uložte je 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])
Alias teď můžete použít MyCustomCSVLog
místo skutečného názvu tabulky v dotazech, jako je následující příklad:
MyCustomCSVLog
| summarize count() by Status,Code
Další kroky
Seznamte se s dotazy na protokoly , které analyzují data shromážděná ze zdrojů dat a řešení.