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
geo_location
IP アドレス (IPv4 と IPv6 がサポートされている) を含む文字列を指定すると、geo_location
関数からは、次の属性を含む地理的なおおよその場所が返されます。
- Country
- リージョン
- 都道府県
- 市町村
- 経度
- Longitude
| extend GeoLocation = geo_location("1.0.0.5")
重要
この関数で活用される 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)
サポートされているテーブル演算子
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(column_ifexists の代わりに columnifexists を使用します)
サポートされているスカラー演算子
- すべての数値演算子がサポートされています。
- すべての 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()
スカラー関数
- ビット単位の関数
- 変換関数
- DateTime および TimeSpan 関数
- 動的関数と配列関数
- 数学関数
- 条件関数
- 文字列関数
base64_encodestring
(base64_encode_tostring の代わりに base64_encodestring を使用します)base64_decodestring
(base64_decode_tostring の代わりに base64_decodestring を使用します)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- 型関数
識別子の引用符
必要に応じて識別子の引用符を使用します。
次の手順
- データ収集ルールを作成し、Azure Monitor エージェントを使用する仮想マシンからそのデータ収集ルールとの関連付けを作成します。