如何在CloudWatch Insights中解析JSON日志并按字段过滤
CloudWatch Insights 解析JSON格式@message字段的正确实现
你当前直接调用@message.level的写法无法生效,原因是@message字段默认被识别为纯文本字符串,不会自动解析内部的JSON结构,需要先通过内置的JSON解析命令完成字段拆分,具体操作如下:
- 核心解析逻辑:对于完全符合标准JSON格式的
@message内容,直接在查询中加入parse @message as json语句,即可自动将JSON内所有顶层键解析为可独立查询、过滤的字段,无需逐个手动映射。 - 适配你筛选error/fatal级别日志需求的最终查询语句:
fields @timestamp, @message, level, logger, timestamp | parse @message as json | filter level like /(?i)error|fatal/ | sort @timestamp desc | limit 20
补充说明
- 解析完成后,所有JSON顶层字段可以直接通过字段名调用,比如示例中的
level、logger、timestamp都可以直接用于过滤、统计、排序操作 - 如果日志JSON存在嵌套结构,比如结构为
{"detail": {"level": "error"}},解析后可通过点号访问嵌套字段,写法为detail.level - 如果你只需要提取个别字段,也可以使用
json_extract_scalar函数单独提取,示例写法为fields json_extract_scalar(@message, '$.level') as log_level,但对于全量标准JSON日志场景,parse @message as json的写法更简洁,查询性能也更好 - 你原写法中使用的
(?i)正则修饰符为不区分大小写匹配,可以同时覆盖ERROR、Error、error、FATAL、Fatal、fatal等不同大小写的日志级别值,适配绝大多数业务日志的输出习惯
内容的提问来源于stack exchange,提问作者user7858768
相关产品推荐
相关产品推荐

