翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
parse
parse を使用してログフィールドからデータを抽出し、クエリで処理できる抽出フィールドを作成します。parse コマンドは、glob 式、正規表現、logfmt、CSV の 4 つのモードをサポートしています。
fieldName を省略すると、デフォルトで @message が使用されます。フィールド名を最初の引数として指定することで、任意の名前付きフィールドから解析できます。
ログイベントが指定されたパターンと一致しない場合、結果には表示されますが、抽出されたフィールドは表示されません。
Glob モード
抽出する値のプレースホルダーとしてワイルドカード (*) を使用し、 で名前付きフィールドに割り当てますas。
[Syntax] (構文)
parsefieldName"pattern" asalias1,alias2
* ワイルドカードの数は、エイリアスの数と等しくなければなりません。
例
parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
parse @logStream "*/*/*/*" as env, service, instance, shard | stats count(*) by env, service
連鎖解析
フィールドを抽出し、抽出したフィールドをさらに解析します。
parse @message "url=*" as url | parse url "/api/*/users/*" as apiVersion, userId | display apiVersion, userId
正規表現モード
フィールドを抽出するには、名前付きキャプチャグループで正規表現を使用します。正規表現の構文の詳細については、「サポートされている正規表現 (regex) 構文」を参照してください。
[Syntax] (構文)
parsefieldName/regex/
名前付きキャプチャグループ(?<を使用して、抽出されたフィールドを定義します。name>...)
例
名前付きキャプチャグループを使用してフィールドを抽出する
parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2
名前付きキャプチャグループを使用して VPC フローログから ENI を抽出する
parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message
マルチマッチモード
マルチマッチモードを使用して、フィールドから正規表現のすべての一致を抽出し、ログイベントごとに複数の行を生成します。正規表現パターンのmulti後に キーワードを追加します。
[Syntax] (構文)
parsefieldName/regex/ multi
例
ログラインからすべての IP アドレスを抽出する (マルチマッチ)
parse @message /(\d+\.\d+\.\d+\.\d+)/ as ip_addr multi | stats count(*) by ip_addr
Logfmt モード
を使用してparse logfmt、logfmt 形式のログ行をキーと値のペアに解析します。Logfmt は、各行にスペース区切りのkey=valueペアが含まれる構造化ロギング形式です。
[Syntax] (構文)
parsefieldNamelogfmt asalias
その結果、ドット表記 (、 などlf.levellf.msg) でアクセスするマップが作成されます。
例
parse @message logfmt as lf | filter lf.level = "error" | display lf.msg, lf.duration
parse @message logfmt as lf | stats count(*) by lf.host
CSV モード
を使用してparse csv、CSV 形式のログ行を構造化フィールドに解析します。各カンマ区切り値は、対応するエイリアスに割り当てられます。
[Syntax] (構文)
parsefieldNamecsv asalias1,alias2,alias3
例
parse @message csv as timestamp, level, message | filter level = "ERROR" | display timestamp, message
parse @message csv as host, method, path, status, duration | stats avg(duration) by method
JSON フィールドの抽出
以前に解析されたオブジェクトフィールドからの明示的な連鎖 JSON 抽出json field=に使用します。これにより、raw メッセージを再解析することなく、構造化フィールドからネストされたキーを抽出できます。fieldName
[Syntax] (構文)
json field=fieldName"key.subkey" asalias
例
parse @message /(?<payload>\{.*\})/ as payload | json field=payload "user.name" as username | display username
json field=requestContext "identity.sourceIp" as caller_ip | stats count(*) by caller_ip