皆さんこんにちは。国井です。
今日は前回紹介したKQLクエリの書き方シリーズの第2弾として、summarizeとsearchを使ったクエリを紹介します。
集計処理
クエリの実行結果を集計するときにはSummarizeを使います。
SecurityEvent | summarize count() by Account
SecurityEventテーブルに続けて | summarize count() by.. と書くと by の後ろに書いた列の内容を集計し、ログの個数を数えてくれます。実行結果はこちらになりますがアカウントごとに記録されたログの数が表示されていることがわかります。
さらに数が10個未満のもの、と絞り込む場合はこんな感じになります。
(cnt は変数で count() by Account の実行結果を格納しています)
ここまで確認できれば、以下のクエリで取得している内容もわかりますよね。
そうです、Account 列に「SQL」の文字を含むアカウントのログのうち、ログの個数が10個未満のアカウントを表示しなさいってことになります。
Search で横断的な検索
次はこんな感じのクエリを用意しました。
search "err"
これまで1行目にテーブル名を指定してクエリを書きましたが、今度はテーブル名を一切書いていません。こうするとすべてのテーブルを対象に横断的な検索を実行できます。
このクエリでは「err」の文字列が含まれるログをすべて出力するように指定しています。
実行結果はこちら。$table列がテーブル名ですが、色々なテーブルから情報を引っ張ってきていることがわかります。
search in でテーブルを指定
search を使うとすべてのテーブルからのクエリになると言いましたが、ある程度テーブルを絞り込みたい。そんなときはsearch in (…) って書いてもらって、… の部分にテーブル名を書けば、そのテーブルだけを対象にすることができます。
search in (SecurityEvent,SecurityAlert,A*) "err"
カンマで区切って3つのテーブルを指定しました。ただし3つ目はA*と書いてあるので、Aで始まるテーブル名であればすべてが対象になります。
参考までに実行結果はこちら。
今日はここまで。