初めに
TransformKQLについて簡潔にまとまっているドキュメントが少ないので、ここに簡単に残しておきます。始めてAzureでデータ収集ルール(DCR)の構築をする方等の参考になれば幸いです。
目次
基本の構成パターン
taransformKQLにおける基本の構成パターンはこんな感じが使いやすいです。
source
| parse RawData with <ここに分割ルールを記載>
| where <ここに収集したい条件を記載>
| project TimeGenerated, RawData, Computer, FilePath, <その他列>
parse
ここで、文字列の分割ルールを記載していきます。
詳しくは以下参考ドキュメントです。
以下のように公式ドキュメントに記載のある通り、以下のように記載することで正規表現を使用することもできます。
parse kind=regex RawData with <正規表現>
しかし、私はtransformKQLで使用するなら「simple」一択だと思っています。
parseを利用する場合はLogAnalyticsへ格納するログフォーマットの型が大方決まっています。そのため、最も厳密に制御するsimpleを使用するのが良いです。
公式ドキュメント内にサンプルがいくつかあるので、サンプルをみて勉強しましょう。
where句
Alertだけ格納したい場合や特定のEventIDのみ格納したい時に使えます。SQLのwhere句と用途は変わらないので、詳しい説明は割愛します。
詳しくは以下参考ドキュメントです。
where句の強みは検索列として「*」が使用できる点と「contains」や「has」といったあいまいな表現での検索ができます。例えば以下のように記載しておくだけで、メッセージのどこかにErrorという文言があると取得するように制御ができます。
source
| where * contains "ERROR"
project句
これは私の理解ですが、project句はSQLでいうSELECT句と近いものだと理解しています。
ただし、文末に入れることが多い点はSELECT句との違いでです。
project句内に記載する列名は格納先のLog Analytics Workspaceの列名と合わせましょう。
あと、parse句で分けた列を合算いて計算して格納したい場合にはこの中で数式を記載できます。
こんな感じです。
source
| parse RawData with EventID "," countA "," countB
| project EventID, Totalcount = countA + countB
一応、こちらも公式ドキュメントを載せておきます。
最後に
私はこのパターンが基本パターンだと考えていますが、他にもsplitを使ってcsvを上手く切り分けたりextend句を利用して可変的なログを取り込んだりする設計もできます。
皆さんでいろいろと試してみて下さい。