Azure Monitor の変換を使うと、受信した Azure Monitor データに対して KQL クエリを実行し、Log Analytics ワークスペースに格納される前に、受信データをフィルター処理または変更できます。 この記事では、変換でのみ使用できる特殊な演算子に加えて、変換クエリでの KQL の考慮事項とサポートされている機能について詳しく説明します。
変換はレコードごとに個別に適用されるので、複数のレコードを処理する KQL 演算子を使うことはできません。 入力として 1 行を受け取り、1 行以下を返す演算子だけがサポートされます。 たとえば、summarize は複数のレコードを集計するので、サポートされません。
変換では、この記事に記載されている演算子のみがサポートされています。 他のログ クエリでは使用できる場合がある他の演算子は、変換ではサポートされません。
特別な考慮事項
コマンドの解析
変換の解析コマンドは、パフォーマンス上の理由から、1 ステートメントあたり 10 列までに制限されています。 変換に 10 列以上の解析が必要な場合は、「大きな解析コマンドを分割する」で説明したように複数のステートメントに分割してください。
動的データの処理
動的データでは次の入力を考慮します。
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
AdditionalContext のプロパティにアクセスするには、入力ストリームでそれを文字列型の列として定義します。
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
AdditionalContext 列の内容を KQL 変換で解析して使用できるようになりました。
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
動的リテラル
たとえば、次のクエリでは同じ機能が提供されます。
print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
特殊な関数
次の関数は、変換でのみ使用できます。 これらは、他のログ クエリでは使用できません。
parse_cef_dictionary
CEF メッセージを含む文字列を指定すると、parse_cef_dictionary はメッセージの Extension プロパティを動的なキー/値オブジェクトに解析します。 セミコロンは、例に示すように、生メッセージをメソッドに渡す前に置き換える必要がある予約文字です。
| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage)
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage)
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension
geo_location
IP アドレス (IPv4 と IPv6 がサポートされている) を含む文字列を指定すると、geo_location 関数からは、次の属性を含む地理的なおおよその場所が返されます。
- 国
- リージョン
- 状態
- 市区町村
- 緯度
- 経度
| extend GeoLocation = geo_location("1.0.0.5")
重要
この関数で活用される IP 位置情報サービスの性質に起因し、過度に使用されるとデータ インジェストに遅延が発生することがあります。 この関数を 1 回の変換で複数回使用するときは注意が必要です。
サポートされているステートメント
let ステートメント
let の右側には、スカラー式、表形式の式、またはユーザー定義関数を指定できます。 スカラー引数を使用するユーザー定義関数だけがサポートされています。
表形式の式ステートメント
変換の KQL ステートメントでサポートされるのは、次のデータ ソースだけです。
source はソース データを表します。 例えば次が挙げられます。
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Messageprint演算子は、常に 1 つの行を生成します。 例えば次が挙げられます。print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
サポートされているテーブル演算子
extendprojectprintwhereparseproject-awayproject-renamedatatablecolumnifexists(column_ifexists の代わりに columnifexists を使用します)
サポートされているスカラー演算子
すべての数値演算子がサポートされています。
すべての Datetime および Timespan 算術演算子 がサポートされています。
以下の文字列演算子がサポートされています。
- `=
!==~!~contains!containscontains_cs!contains_cshas!hashas_cs!has_csstartswith!startswithstartswith_cs!startswith_csendswith!endswithendswith_cs!endswith_csmatches regexin!in
次のビットごとの演算子がサポートされています。
binary_and()binary_or()binary_xor()binary_not()binary_shift_left()binary_shift_right()
スカラー関数
ビット単位の関数
変換関数
DateTime および TimeSpan 関数
動的関数と配列関数
算術関数
条件付き関数
文字列関数
base64_encodestring(base64_encode_tostring の代わりに base64_encodestring を使用します)base64_decodestring(base64_decode_tostring の代わりに base64_decodestring を使用します)countofextractextract_allindexofisemptyisnotemptyparse_jsonsplitstrcatstrcat_delimstrlensubstringtolowertoupperhash_sha256
型関数
識別子の引用符
必要に応じて識別子の引用符を使用します。
次のステップ
- データ収集ルールを作成し、Azure Monitor エージェントを使用する仮想マシンからそのデータ収集ルールとの関連付けを作成します。

