皆さんこんにちは。国井です。
前回紹介したKQLクエリの書き方シリーズの第5弾として
今日は集計処理に有効な summarize 演算子を紹介します。
summarize 演算子
summarize演算子は summarize count() by… と書き始めると by の後ろに指定した列の個数を数えてくれます。
SecurityEvent
| where EventID == "4688"
| summarize count() by Process, Computer
このクエリだと by の後ろに Process と Computer の組み合わせで出現するログの数を数えてくれます。
実行結果を見るとわかるように conhost.exe と DC11.na.contosohotels.com の組み合わせは29989個あったよと教えてくれています。
もちろん by の後ろは | summarize count() by Process とだけ書けば Process 列の内容だけをもとに個数を数えてくれます。
次に1時間以内に出力されたEventIDが4624のログの数を数えているのですが、そのほかに先ほどと異なる点ってわかりますか?
SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4624
| summarize cnt=count() by AccountType, Computer
列名がcount_ではなく、cntとなってますよね。
| summarize count() の代わりに | summarize cnt=count() と書くことで列名のカスタマイズができます。
2023年6月25日追記
summarize演算子と共にcount()関数を使う例を紹介していますが、他にもcountif()関数のようなExcelっぽい関数を使うこともできます。例えばEventIDが4624のイベントの個数を数えるのであれば、
SecurityEvent
| summarize countif(EventID == 4624)
のように書いてあげます。
dcount関数
count関数を使ってIpAddress列の内容を基にした個数を数えてみました。
次にdcountという関数を使って同じIpAddressを指定してみました。
SecurityEvent
| summarize dcount(IpAddress)
countとdcountの違い、わかりましたか?
cont関数は同じIPアドレスを持つログの個数を数えているのに対して、
dcount関数は | summarize count() by IpAddress で実行した結果の個数を数えています。
次回はsummarize演算子に続けて使う関数として arg_max, arg_min などを紹介します。