自由気ままに書いちゃおう

好きなことをつらつらと・・・

Azure LogAnalyticsで収集したデータをKQLを使用して検索する

LogAnalyticsに接続したWindowsServerの仮想マシンはデフォルトでは死活監視のデータが取得されています。
※Windowsイベントログやパフォーマンスカウンターのデータは初期設定では取得対象外のため、各自で設定する必要があります。

今回は、デフォルトで取得されている死活監視のデータを使用して、収集したデータをKQL(Kusto Query Language)を使用して検索してみようと思います。

↓過去の記事はこちら↓

www.guri2o1667.work

 

■KQL(Kusto Query Language)について

Microsoftのページは以下です。

Azure Monitor のログ クエリの概要 | Microsoft Docs

ざっくりいうと、
・Microsoft独自のクエリ言語
・SQLのような感じ
です。
まぁ、LogAnalyticsで収集したデータを分析したりする際に使用する言語がKQLって感じです。

リファレンスもあります。

Overview - Azure Data Explorer | Microsoft Docs


私はLogAnalyticsのログ検索で初めてKQLを使用したのですが、どうやらSharepointとかでも使えるらしく、歴史は古いようです。

■ログ検索の事前準備


1.「モニター」>「ログ」をクリックします。※初めてクリックした方は、画面真ん中にある「はじめに」をクリックしてください。

f:id:guri2o1667:20200422110938p:plain


2.「範囲の選択」画面が表示されますので、検索対象となるLogAnalyticsワークスペースを選択し、「適用」をクリックします。※ここでは、「test-loganalytics-01」というワークスペースを選択しています。

f:id:guri2o1667:20200422111106p:plain

f:id:guri2o1667:20200422111146p:plain


3.以下の画面が表示されますので、これで準備完了です。

f:id:guri2o1667:20200422111245p:plain

■検索してみる


vm01という仮想マシンの死活監視のデータ(Heartbeatテーブル)を検索してみます。
以下のKQLを入力し、「実行」をクリックします。

<KQL>

Heartbeat
| where Computer == "vm01"

f:id:guri2o1667:20200422112325p:plain


成功すると、画面下部の「結果」タブに情報が記載されます。

f:id:guri2o1667:20200422112436p:plain

■時間帯を指定して出力してみる

Heartbeatテーブルは1分間おきに記録されている為、サーバが起動している限り1分おきにデータ収集されます。
※サーバが停止している場合には、データは何も収集されません。

ここでは、現時点から5時間前までに取得したデータの数を数えてみます。

<KQL>

Heartbeat
| where Computer == "vm01"
| summarize count(TimeGenerated >=ago(5h)) by Computer;


成功すると、画面下部の「結果」タブに情報が記載されます。

f:id:guri2o1667:20200422155018p:plain

■処理の再利用化

上記の「■時間帯を指定して出力してみる」にて、実施した処理に名前を付けて再利用できるようにします。

<KQL>

let testtask = Heartbeat
| where Computer == "vm01"
| summarize count(TimeGenerated >= ago(5h)) by Computer;
testtask

上記ですが、「let 変数名 = 通常の処理」と記載し、「変数名」を記載することで実行することができます
どういうことかというと、上記の場合、最終行のtesttaskという1行を記載することで初めて実行されます

物は試しで最終行(testtask)が存在しない状態で実行してみると以下のようになり、期待通りの結果になりません。

f:id:guri2o1667:20200422160142p:plain


最終行(testtask)を記載し実行することで期待する結果が出力されます。

f:id:guri2o1667:20200422160955p:plain

■再利用の具体例

下記は再利用した処理を更に加工する際の構文です。

<KQL>

let testtask = Heartbeat
| where Computer == "vm01";
testtask
| summarize count(TimeGenerated >= ago(6h)) by Computer;



以上です。
更に具体的な例を記載するには力量不足のため、今後記載できればと思います。