本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
parse
使用 從日誌欄位parse擷取資料,並建立您可以在查詢中處理的擷取欄位。parse 命令支援四種模式:glob 表達式、規則表達式、logfmt 和 CSV。
如果省略 fieldName ,預設@message會使用 。您可以指定欄位名稱做為第一個引數,從任何具名欄位進行剖析。
如果日誌事件不符合指定的模式,您仍然會在結果中看到它,但沒有擷取的欄位。
Glob 模式
針對您要擷取的值使用萬用字元 (*) 做為預留位置,並使用 將其指派給具名欄位as。
語法
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 模式
使用具有具名擷取群組的規則運算式來擷取欄位。如需規則表達式語法的資訊,請參閱 支援的規則運算式 (regex) 語法。
語法
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
多相符模式
使用多相符模式從 欄位擷取規則表達式的所有相符項目,為每個日誌事件產生多列。在 regex 模式multi之後新增關鍵字。
語法
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配對。
語法
parsefieldNamelogfmt asalias
結果是您使用點表示法 (例如,、) 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 格式的日誌行剖析為結構化欄位。每個逗號分隔值都會指派給對應的別名。
語法
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 field= 用於從先前剖析的物件欄位擷取明確鏈結的 JSON。這可讓您從結構化欄位擷取巢狀金鑰,而無需重新剖析原始訊息。fieldName
語法
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