本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
parse
使用 從日誌欄位parse擷取資料,並建立您可以在查詢中處理的擷取欄位。parse 命令支援三種模式:glob 表達式、常規表達式和 logfmt。
如果省略 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
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