皆さんこんにちは。国井です。
前回紹介したKQLクエリの書き方シリーズの第9弾として join 演算子を紹介します。
今日は趣向を変えて..
今日は最終的に実行したいクエリから紹介します。
SecurityEvent | where EventID == "4624" | summarize LogOnCount=count() by EventID, Account | project LogOnCount, Account | join kind = inner ( SecurityEvent | where EventID == "4634" | summarize LogOffCount=count() by EventID, Account | project LogOffCount, Account ) on Account
実行結果はこんな感じになり、アカウントごとのログオン回数とログオフ回数がそれぞれ表示されています。
これを構成しているクエリを分解してみていきます。
アカウントごとのログオン回数/ログオフ回数を表示する
冒頭に登場したクエリの最初の4行はアカウントごとのログオン回数を表示しています。
SecurityEvent | where EventID == "4624" | summarize LogOnCount=count() by EventID, Account | project LogOnCount, Account
一方、冒頭に登場したクエリの6~9行目はアカウントごとのログオフ回数を表示しています。
SecurityEvent | where EventID == "4634" | summarize LogOffCount=count() by EventID, Account | project LogOffCount, Account
両者をjoinでくっつける
上に紹介した2つのクエリはログオン回数とログオフ回数が別々のクエリ結果として表示しています。しかし、これをひとつにまとめて表示したいというときもあるでしょう。
そういう時に join を使います。
ログオン回数(A)とログオフ回数(B)、アカウント(Account)のキーにして一つの行にまとめて表示するときは
A Join .. (B) on Account
のように書いてあげます。それが冒頭に紹介したクエリなのです。
SecurityEvent | where EventID == "4624" | summarize LogOnCount=count() by EventID, Account | project LogOnCount, Account | join kind = inner ( SecurityEvent | where EventID == "4634" | summarize LogOffCount=count() by EventID, Account | project LogOffCount, Account ) on Account
このときに注目してほしいのが、join 演算子のうしろに書いてある kind=inner 部分です。
join に続けて kind=inner と書くと
join でログオン回数(A)とログオフ回数(B)をくっつけたときに、
AとBの両方に含まれるアカウント (つまりログオンとログオフの両方を行ったアカウント)が結果に表示されます。(Aが左の円、Bが右の円だとするとイメージ的に赤い部分を表示します)
一方、join に続けて kind=leftanti と書くと
join でログオン回数(A)とログオフ回数(B)をくっつけたときに、
Aだけに含まれるアカウント (つまりログオンのみを行ったアカウント)が結果に表示されます。(Aが左の円、Bが右の円だとするとイメージ的に赤い部分を表示します)
同じく、join に続けて kind=rightanti と書くと
join でログオン回数(A)とログオフ回数(B)をくっつけたときに、
Bだけに含まれるアカウント (つまりログオフのみを行ったアカウント)が結果に表示されます。(Aが左の円、Bが右の円だとするとイメージ的に赤い部分を表示します)
もうこれ以上繰り返すのは苦痛だろうから端折って説明すると、
kind=leftouterと書くとこちらのパターンで、
kind=rightouterと書くとこちらのパターンで表示します。
最後にAまたはBのいずれかに含まれるパターンですが、
kind=fullouter と書きます。
結果はこんな感じでログオンとログオフ両方が結果に表示されているもの、ログオンのみ表示されるもの、ログオフのみ表示されるもの、まばらに表示されていることがわかります。
join は色々細かく指定できるので、もっと知りたい方は公式サイトでどうぞ。