Doporučení dotazovacího jazyka Log Analytics pro operátory Summarize a Join
Datum publikování: 29 května, 2018
Tato aktualizace popisuje doporučení pro syntaxi dotazovacího jazyka Azure Log Analytics a Application Insights pro operátory Summarize a Join. Stávající syntaxe se dál podporuje, ale důrazně doporučujeme upravit syntaxi vašich dotazů v uložených hledáních a upozorněních, kde je to možné, abyste se vyhnuli nejednoznačnosti výsledků.
Pokud máte ohledně těchto doporučení nějaké dotazy, kontaktujte nás.
Automatické kvantování v operátoru Summarize každou hodinu
Momentálně se data agregovaná podle klíče datetime automaticky seskupují po hodinách. V tomto příkladu se sloupec TimeGenerated použitý v operátoru Summarize automaticky zaokrouhloval na hodiny:
SecurityEvent
| where TimeGenerated > ago(1d)
| where EventID == 4625
| summarize count() by TimeGenerated
Podívejte se na výsledky dotazu:
TimeGenerated [UTC] |
count_ |
4. 2. 2018, 09:00:00,000 4. 2. 2018, 10:00:00,000 4. 2. 2018, 11:00:00,000 4. 2. 2018, 12:00:00,000 4. 2. 2018, 13:00:00,000 4. 2. 2018, 14:00:00,000 4. 2. 2018, 15:00:00,000 4. 2. 2018, 16:00:00,000 4. 2. 2018, 17:00:00,000 4. 2. 2018, 18:00:00,000 |
1 205 1 268 1 234 1 173 1 007 1 042 1 041 1 049 1 090 1 113 |
Doporučené akce:
- Pokud se nespoléháte na funkci automatického kvantování, ať už v uložených hledáních, nebo v upozorněních (například souhrn podle TimeGenerated):
- Nevyžaduje se žádná akce.
- Pokud o funkci automatického kvantování nevíte, vaše dotazy mohou vracet výsledky s nezamýšlenou agregací po hodinách:
- Ověřte, jestli používáte agregaci dat podle klíče datetime (například souhrn podle TimeGenerated). Pokud ano, opravte dotaz tak, aby používal správné kvantování, například souhrn podle bin(TimeGenerated, 1h).
- Pokud o funkci automatického kvantování víte a spoléháte na ni:
- Opravte dotaz tak, aby používal správné kvantování, například souhrn podle bin(TimeGenerated, 1h).
Výrazy rovnosti v operátoru Join
Syntaxe jazyka aktuálně umožňuje použití nejednoznačných výrazů rovnosti jako atributů Join (například key1 == key2). Výsledky potom nemusejí odpovídat očekávání. Doporučujeme změnit nejednoznačné výrazy rovnosti a vyhnout se tak tomuto chování.
Tady je příklad nejednoznačného výrazu Join (souhrn doby trvání relací za den na počítač):
SecurityEvent
| where EventID == 4624
| join kind= inner (
SecurityEvent
| where EventID == 4634
) on TargetLogonId == TargetLogonId
| extend Duration = LogoffTime - LogonTime
| summarize sum(Duration) by bin(LogonTime, 1d), Computer
Doporučené akce:
- Pokud v operátorech Join nepoužíváte výrazy rovnosti, ať už v uložených hledáních, nebo v upozorněních:
- Nevyžaduje se žádná akce.
- Pokud v operátorech Join používáte výrazy rovnosti:
- Opravte syntaxi operátoru Join.
- Opravte vaše dotazy. Názvy sloupců by měly jako kvalifikátor používat příslušného vlastníka tabulky, a to s využitím notace
$left
a$right
. Příklady:
| join … on $left.Col1 == $right.Col2
| join … on X (equivalent to: | join … on $left.X == $right.X)