はじめに
Azure Log Analytics
というログの収集/分析サービスがあるのですが、今回はその専用言語(クエリ言語)であるKQL(Kusto Query Language)を触ってみたので備忘録として残したいと思います。
公式ドキュメント
公式ドキュメントは以下です。
いくつか書いてみる
いくつか書いてみました。
対象のテーブルはリクエストのログを格納するAppRequests
テーブルを用いています。
AppRequests | project TimeGenerated, ResultCode, ClientType
上記はAppRequestsテーブルのTimeGenerated
, ResultCode
, ClientType
カラムを取得しています。
SQLで言うとSELECT TimeGenerated, ResultCode, ClientType FROM AppRequests
という感じですね。
どうやらKQLでは最初に取得したいテーブル名、その後パイプライン( | )でproject {取得したいカラム名}・・・というように書く決まりのようです。
色々書いてみましょう。
AppRequests | project TimeGenerated, ResultCode, ClientType | where ResultCode == 200
上記は先ほどの結果より、ResultCodeが200のもののみ抽出するクエリです。
変化したのはwhere以降のみです。ここらへんはSQLと同じ感じでした。
さらに色々書いてみます。
AppRequests | summarize records=count() by bin(TimeGenerated, 1h) | sort by TimeGenerated
上記はTimeGeneratedカラムの値を1時間ごとに集計し、レコードが何件あるかを計算、そしてTimeGeneratedカラムの降順に出力しています。
summarizeはSQLでいうGROUP BY
みたいな感じでbinは特定の単位にまとめる役割を担っています。
sort byは後ろにascを付けると昇順、descもしくは何もつけないと降順で出力します。
おわりに
以上でKQLを用いてAzure Log Analyticsを分析してみた内容でした。
KQLはAzure独自のクエリ言語ではありますが、SQLにある程度慣れていればそれほど覚えるのが大変...というわけでもなさそうです。