Cloud?Azure?Log Analytics?KQL?
みなさんこんにちは!
ICTLINKの堀井と申します。
IT業界経験1年目の自分だからできる、「ITについて良く分からないよーって方でも分かるような読み易い記事」をモットーに記事を作成していきたいと思ってます。
はじめに
今回は、最近Azureを触る機会があったので、そこで学んだことから「KQL」の初歩的なコマンドの叩き方を記事にしようと思います。
もちろんプログラミングの「プ」の字も知らない状態から勉強しましたがやってみると意外と楽しく学ぶことが出来ました。
Cloud(クラウド)とは
インターネットなどのネットワーク経由でユーザにサービスを提供する形態のことです。オンライン上でソフトウェアの利用やデータのやり取りが可能になります。
「クラウド」の由来には諸説あり、インターネット(雲)の向こう側のサービスを利用していることから、クラウド(cloud=雲)と呼ばれるようになったと言われています。
他にもcrowd(クラウド)と書いて、集約したシステムという意味でクラウドと呼ぶようになったという説もあります
Microsoft Azure(アジュール)とは
Microsoft社が提供するパブリッククラウドのプラットフォームです。膨大なサーバーが設置された世界55拠点に展開しているデータセンター、強力なWANバックボーンを持っています。この設備をクラウドプラットフォームとしてユーザーに様々なサービスを提供しています。
LogAnalytics(ログアナリティクス)とは
Azureサービス/Azure VMはもちろん、オンプレミス/他クラウドサービスのWindowsやLinuxのログを収集し分析するためのサービスです。
対象サーバにエージェントをインストールするだけで、簡単に使用することができます。
収集したデータに閾値を設定し、アラートを発報することができる。
収集したデータをダッシュボードに集約し、可視化が可能。
今回はAzure Active Directory(AzureAD)のログ分析をするのが目的で、「Azure Log Analytics」というリソースを作成してログを取得しました。
取得したログから目的に沿ったログだけ抽出したい!抽出したログを集計したい!などの要望を叶えるために必要なのがKustoクエリ(通称KQL)です。
KQLとは
Microsoft内だけで動作する読み取り専用のリクエストで、データを処理して結果を返すものです。
source
| operator1
| operator2
| …
上記のような形式で記述されます。
データソース(テーブル)を最初に書いて、そのデータのオペレーションをパイプ「|」でつなぐことで様々なデータ処理を行うことができます。
ちなみに「SQL」「Splunk」を叩ける人はMicrosoftにチートシートがありますのでそちらをご覧ください。
Microsoft Link
【SQLからKustoのチートシート】
【SplunkからKustoクエリ言語へのマップ】
自分は上記ページを開いてサッと一通り見て、そっと閉じました…ww
・where
where - 演算子
テーブルデータの検索条件を指定し検索し、絞り込みます。
下記例は、
1行目で、テーブルを設定し、2行目で、「Operation_s」というカラムの「FileDownload」というオペレーションを行ったログを抽出します。
SharePointAuditLogs_CL
| where Operation_s has "FileDownloaded"
has - 演算子
大文字と小文字を区別しない文字列を使用して、データのレコードセットをフィルター処理します。
実行してみると
このような結果が返ってきます。
・ploject
project - 演算子
オペレーターで表示する数を制限します。
whereで範囲を絞り込んでクエリを実行した場合、カラムが多いテーブルだと全てのカラムが表示されてしまうため、最後に「project」オペレーターで表示する数を制限します。
SharePointAuditLogs_CL
| where Operation_s has "FileDownloaded"
| project TimeGenerated, Operation_s, UserId_s
実行してみると
このような結果が返ってきます。
1行目で、テーブルを設定し、
2行目で、「Operation_s」というカラムの「FileDownload」というオペレーションを行ったログを抽出し、
3行目で、「TimeGenerated」「Operation_s」「UserId_s」のみ表示されるようにしました。
・summarize
summarize - 演算子
入力テーブルの内容を集計したテーブルを生成します。
次は、「summarize」を使い集計します。
「where」で「FileDownload」を監視し、「summarize」で集計します。
「count()」を使い「UserId_s」毎に集計するようにします。
最後に「where Count」で集計した合計が10以上の場合に限り表示されるようにします。
SharePointAuditLogs_CL
| where Operation_s has "FileDownloaded"
| summarize Count = count() by UserId_s
| where Count >= 10
count() - 集計関数
要約グループあたりのレコード数を返します (集計がグループ化されていない場合は合計が返されます)。※summarize 内での集計というコンテキストでのみ使用できます。
Count - 演算子
入力レコード セットに含まれるレコード数を返します。
実行してみると
このような結果が返ってきました。
1行目で、テーブルを設定し、
2行目で、「Operation_s」というカラムの「FileDownload」というオペレーションを行ったログを抽出し、
3行目で、「UserId_s」毎に集計し、
4行目で、集計の値が10以上の場合表示されるようにしました。
抽出したいログのカラムとオペレーションが分かっていれば、この構文で様々なログを絞り込んだり集計したりできます。
しかもLogAnalyticsでKQLを入力する時には補助機能(?)が付いており
候補がポップに出てきてくれるんです。(優しすぎる…泣)
適当に入力してみてどんな結果が返ってくるかをやってみても勉強になるかもしれませんね!
KQLは、読み取り専用のリクエストで、データを処理して結果を返すものなのでいくら間違っても影響はありません!
実行して自分の望んだ結果が返ってくると嬉しいもんなんですねw
「毎日勉強、何事も探求心を忘れない。」
「人にやさしく、自分に厳しく。」
最後までお付き合いいただきありがとうございました。