parse - Amazon CloudWatch 日誌

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

parse

使用 parse 從日誌欄位擷取資料,並建立一個您可在查詢中處理的擷取欄位。parse 支援使用萬用字元的 glob 模式和規則運算式。如需有關規則運算式語法的資訊,請參閱支援的規則運算式 (regex) 語法

您可以使用規則表達式剖析巢狀 JSON 欄位。

範例:剖析巢狀 JSON 欄位

程式碼片段會示範如何剖析在擷取期間已扁平化的 JSON 日誌事件。

{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}

程式碼片段會顯示一個具有規則運算式的查詢,其會擷取 fieldsAfieldsB 的值,以建立擷取欄位 fldarray

parse @message "'fieldsA': '*', 'fieldsB': ['*']" as fld, array

具名擷取群組

當您將 parse 與正規表達式搭配使用時,您可以使用具名擷取群組將模式擷取到欄位中。語法是 parse @message (?<Name>pattern).

以下範例在 VPC 流量日誌上使用擷取群組,將 ENI 擷取到名為 NetworkInterface 的欄位中。

parse @message /(?<NetworkInterface>eni-.*?) / display @timestamp, NetworkInterface
注意

JSON 日誌事件會在擷取期間扁平化。目前,不支援使用 glob 運算式剖析巢狀 JSON 欄位。您只能剖析包含不超過 200 個日誌事件欄位的 JSON 日誌事件。剖析巢狀 JSON 欄位時,您必須格式化查詢中的規則表達式,以符合 JSON 日誌事件的格式。

剖析命令的範例

使用 glob 運算式,從日誌欄位 @message 中擷取欄位 @user@method@latency,並傳回 @method@user 各種不重複組合的平均延遲。

parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user

使用規則運算式,從日誌欄位 @message 中擷取欄位 @user2@method2@latency2,並傳回 @method2@user2 各種不重複組合的平均延遲。

parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2

擷取欄位 loggingTimeloggingTypeloggingMessage,並篩選包含 ERRORINFO 字串的日誌事件,然後針對包含 ERROR 字串的事件,僅顯示 loggingMessageloggingType 欄位。

FIELDS @message | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage | FILTER loggingType IN ["ERROR", "INFO"] | DISPLAY loggingMessage, loggingType = "ERROR" as isError