本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
parse
使用 parse
从日志字段中提取数据并创建可以在查询中处理的提取字段。parse
同时支持使用通配符和正则表达式的 glob 模式。有关正则表达式语法的信息,请参阅 支持的正则表达式(regex)语法。
您可以使用正则表达式解析嵌套JSON字段。
示例:解析嵌套JSON字段
该代码片段显示了如何解析在摄取JSON期间被扁平化的日志事件。
{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}
该代码片段显示了一个带有正则表达式的查询,其将提取 fieldsA
和 fieldsB
的值以创建提取字段 fld
和 array
。
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
提取字段 loggingTime
、loggingType
和 loggingMessage
,筛选出包含 ERROR
或 INFO
字符串的日志事件,然后仅显示包含 ERROR
字符串的事件的 loggingMessage
和 loggingType
字段。
FIELDS @message | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage | FILTER loggingType IN ["ERROR", "INFO"] | DISPLAY loggingMessage, loggingType = "ERROR" as isError