次の方法で共有


Azure Monitor の変換でサポートされている KQL の機能

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)

動的リテラル

動的リテラルを処理するには、parse_json 関数を使います。

たとえば、次のクエリでは同じ機能が提供されます。

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

parse_cef_dictionary関数の出力例。

geo_location

IP アドレス (IPv4 と IPv6 がサポートされている) を含む文字列を指定すると、geo_location 関数からは、次の属性を含む地理的なおおよその場所が返されます。

  • Country
  • リージョン
  • 都道府県
  • 市町村
  • 経度
  • Longitude
| extend GeoLocation = geo_location("1.0.0.5")

geo_location関数の出力例のスクリーンショット。

重要

この関数で活用される IP 位置情報サービスの性質に起因し、過度に使用されるとデータ インジェストに遅延が発生することがあります。 この関数を 1 回の変換で複数回使用するときは注意が必要です。

サポートされているステートメント

let ステートメント

let の右側には、スカラー式、表形式の式、またはユーザー定義関数を指定できます。 スカラー引数を使用するユーザー定義関数だけがサポートされています。

表形式の式ステートメント

変換の KQL ステートメントでサポートされるのは、次のデータ ソースだけです。

  • source はソース データを表します。 次に例を示します。

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print 演算子は、常に 1 つの行を生成します。 次に例を示します。

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

サポートされているテーブル演算子

サポートされているスカラー演算子

  • すべての数値演算子がサポートされています。
  • すべての Datetime および Timespan 算術演算子 がサポートされています。
  • 以下の文字列演算子がサポートされています。
    • `=
    • !=
    • =~
    • !~
    • contains
    • !contains
    • contains_cs
    • !contains_cs
    • has
    • !has
    • has_cs
    • !has_cs
    • startswith
    • !startswith
    • startswith_cs
    • !startswith_cs
    • endswith
    • !endswith
    • endswith_cs
    • !endswith_cs
    • matches regex
    • in
    • !in
  • 次のビットごとの演算子がサポートされています。
    • binary_and()
    • binary_or()
    • binary_xor()
    • binary_not()
    • binary_shift_left()
    • binary_shift_right()

スカラー関数

識別子の引用符

必要に応じて識別子の引用符を使用します。

次の手順

  • データ収集ルールを作成し、Azure Monitor エージェントを使用する仮想マシンからそのデータ収集ルールとの関連付けを作成します。