如何在AWS CloudWatch日志查询中同时提取多个字段?
解决方案:AWS CloudWatch同时提取item29和item35字段
问题根源
你的日志是多层转义的嵌套JSON结构,直接用单字段字符串匹配的方式同时提取两个字段会因为字段间存在其他内容、匹配模式不准确而失败。以下提供两种可行方案:
方案1:基于JSON解析(推荐,更健壮)
先提取日志中msg字段内的转义JSON内容,再将其解析为JSON对象,直接通过层级引用提取目标字段:
fields @message | filter @message like /item29/ or @message like /item35/ | parse @message 'msg=\"*\\\"' as @raw_json_str | parse @raw_json_str as JSON @parsed_json | fields @parsed_json.item22.item29 as @item29, @parsed_json.item22.item35 as @item35 | display @item29, @item35
- 第一步
parse提取msg中包裹的转义JSON字符串; - 第二步将提取的字符串解析为JSON对象,支持直接通过
.访问嵌套字段; - 最后提取并展示目标字段,不受字段顺序、中间内容变化影响。
方案2:多次执行字符串匹配
如果坚持用字符串匹配,可通过两次parse命令分别提取两个字段(避免一次匹配多个模式的语法问题):
fields @item29, @item35 | filter @message like /item29/ and @message like /item35/ | parse @message '"item29\\\\\\":\\\\\"*\\\\\"' as @item29 | parse @message '"item35\\\\\\":\\\\\"*\\\\\"' as @item35
- 修正了原匹配模式的结尾:将
\\\\'改为\\\\\",确保完整匹配字段值的闭合引号; - 两次独立的
parse命令分别处理两个字段,互不干扰。
内容的提问来源于stack exchange,提问作者user3572165
相关产品推荐
相关产品推荐

