parse - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 NetworkInterface, @message
注意

JSON在摄取过程中,日志事件会被扁平化。目前,不支持使用 glob 表达式解析嵌套JSON字段。您只能解析JSON包含不超过 200 个日志事件字段的日志事件。解析嵌套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