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