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 několika 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ávají relativní výhody pro každý z nich.

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, jak je popsáno níže.

Parsování dat v době shromažďování

Při analýze dat v době shromažďování nakonfigurujete vlastní pole , která vytvářejí nové vlastnosti v tabulce. Dotazy nemusí obsahovat žádnou logiku analýzy a jednoduše tyto vlastnosti používat jako jakékoli jiné pole v tabulce.

Mezi výhody této metody patří:

  • Snadnější dotazování shromážděných dat, protože do dotazu nemusíte zahrnout příkazy parsování.
  • Lepší výkon dotazů, protože dotaz nemusí provádět analýzu.

Nevýhody této metody zahrnují následující:

  • Musí být definován předem. Nelze zahrnout data, která už byla shromážděna.
  • Pokud změníte logiku analýzy, použije se pouze pro nová data.
  • Méně možností analýzy, než je k dispozici v dotazech.
  • Zvyšuje dobu latence shromažďování dat.
  • Zpracování chyb může být obtížné.

Analýza dat v době dotazu

Při analýze dat v době dotazu zahrnete do dotazu logiku, která analyzuje data do více polí. Samotná skutečná tabulka se nezmění.

Mezi výhody této metody patří:

  • Platí pro všechna data, včetně dat, která už byla shromážděna.
  • Změny logiky lze 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 této metody zahrnují následující:

  • Vyžaduje složitější dotazy. To lze zmírnit pomocí funkcí k simulaci tabulky.
  • Musí replikovat logiku analýzy v několika dotazech. Může sdílet logiku prostřednictvím funkcí.
  • Může vytvořit režii při spouštění složité logiky pro velmi velké sady záznamů (miliardy záznamů).

Parsování dat, jak se shromažďují

Podrobnosti o analýze dat, která se shromažďují, najdete v tématu Vytvoření vlastních polí ve službě Azure Monitor . Tím se v tabulce vytvoří vlastní vlastnosti, které lze použít dotazy stejně jako jakákoli jiná vlastnost.

Analýza dat v dotazu pomocí vzorů

Pokud data, která chcete analyzovat, je možné identifikovat vzorem opakovaným v různých záznamech, můžete pomocí různých operátorů v dotazovacím jazyce 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é chcete vytvořit. To je zvlášť užitečné pro data s řetězci klíč-hodnota s formulářem podobným klíč=hodnota.

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 projektem se přidá pouze k vrácení počítaných vlastností, nikoli RawData, což je jedna vlastnost, která drží 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

Následuje další příklad, který 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 se data dají 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í pole UPN ze záznamů AzureActivity 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ího parsování ve velkém měřítku azure Monitor používá re2 verzi regulárních výrazů, která je podobná, ale ne identická s některými dalšími variantami regulárních výrazů. Podrobnosti najdete v syntaxi výrazu re2 .

Analýza dat oddělených v dotazu

Oddělená data odděluje pole běžným znakem, jako je čárka v souboru CSV. Funkce rozdělení slouží k analýze dat oddělených pomocí oddělovače, který zadáte. Pomocí tohoto operátoru můžete vrátit všechna pole v datech nebo určit jednotlivá pole, která se mají zahrnout do výstupu.

Poznámka

Vzhledem k tomu, že rozdělení vrátí dynamický objekt, může být nutné výsledky explicitně přetypovat na datové typy, jako je ř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 parsoval tato data a shrnul by dvě počítané vlastnosti. První řádek rozdělí vlastnost RawData na řetězcové pole. 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

Analýza předdefinovaných struktur v dotazu

Pokud jsou vaše 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ím jazyce Kusto:

Následující příklad dotazu analyzuje pole Vlastnosti tabulky AzureActivity , která je strukturovaná ve formátu JSON. Uloží výsledky do dynamické vlastnosti s názvem parsedProp, která obsahuje jednotlivou pojmenovanou hodnotu ve formátu JSON. Tyto hodnoty slouží k filtrování a shrnutí 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, takže by se měly používat jenom v případě, že dotaz používá více vlastností z formátovaných dat. V opačném případě bude jednoduché zpracování porovnávání vzorů rychlejší.

Následující příklad ukazuje rozpis typu předběžného ověřování řadiče domény. Typ existuje pouze v poli EventData, což je řetězec XML, ale není potřeba žádná další 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

Možná máte několik dotazů, které provádějí stejnou analýzu konkrétní 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.

Podívejte se na příklad vlastního protokolu oddělených čárkami výše. Pokud chcete použít parsovaná data ve více dotazech, vytvořte funkci pomocí následujícího dotazu a uložte ji pomocí aliasu 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 použít alias MyCustomCSVLog místo skutečného názvu tabulky v dotazech, jako je následující.

MyCustomCSVLog
| summarize count() by Status,Code

Další kroky

  • Seznamte se s dotazy protokolu , které analyzují data shromážděná ze zdrojů dat a řešení.