View a markdown version of this page

parse - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

parse

parse を使用してログフィールドからデータを抽出し、クエリで処理できる抽出フィールドを作成します。parse コマンドは、glob 式、正規表現、logfmt、CSV の 4 つのモードをサポートしています。

fieldName を省略すると、デフォルトで @message が使用されます。フィールド名を最初の引数として指定することで、任意の名前付きフィールドから解析できます。

ログイベントが指定されたパターンと一致しない場合、結果には表示されますが、抽出されたフィールドは表示されません。

Glob モード

抽出する値のプレースホルダーとしてワイルドカード (*) を使用し、 で名前付きフィールドに割り当てますas

[Syntax] (構文)

parse fieldName "pattern" as alias1, 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] (構文)

parse fieldName /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] (構文)

parse fieldName /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] (構文)

parse fieldName logfmt as alias

その結果、ドット表記 (、 など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] (構文)

parse fieldName csv as alias1, 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=fieldNameに使用します。これにより、raw メッセージを再解析することなく、構造化フィールドからネストされたキーを抽出できます。

[Syntax] (構文)

json field=fieldName "key.subkey" as alias

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