View a markdown version of this page

parse - Amazon CloudWatch Logs

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

parse

使用 從日誌欄位parse擷取資料,並建立您可以在查詢中處理的擷取欄位。parse 命令支援四種模式:glob 表達式、規則表達式、logfmt 和 CSV。

如果省略 fieldName ,預設@message會使用 。您可以指定欄位名稱做為第一個引數,從任何具名欄位進行剖析。

如果日誌事件不符合指定的模式,您仍然會在結果中看到它,但沒有擷取的欄位。

Glob 模式

針對您要擷取的值使用萬用字元 (*) 做為預留位置,並使用 將其指派給具名欄位as

語法

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 模式

使用具有具名擷取群組的規則運算式來擷取欄位。如需規則表達式語法的資訊,請參閱 支援的規則運算式 (regex) 語法

語法

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

多相符模式

使用多相符模式從 欄位擷取規則表達式的所有相符項目,為每個日誌事件產生多列。在 regex 模式multi之後新增關鍵字。

語法

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配對。

語法

parse fieldName logfmt as alias

結果是您使用點表示法 (例如,、) lf.level存取的映射lf.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 格式的日誌行剖析為結構化欄位。每個逗號分隔值都會指派給對應的別名。

語法

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 field=fieldName 用於從先前剖析的物件欄位擷取明確鏈結的 JSON。這可讓您從結構化欄位擷取巢狀金鑰,而無需重新剖析原始訊息。

語法

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