如何使用CloudWatch Metric Filter筛选存在指定JSON键的日志?
CloudWatch Logs JSON字段存在性筛选解决方案
直接使用以下过滤表达式即可命中所有包含顶层response键的日志,符合你的预期返回第二条示例日志:
{ EXISTS $.response }
之前写法不生效的原因
EXISTS是CloudWatch JSON过滤语法的前缀关键字,必须放在要判断的字段路径之前,你写的{ $.response EXISTS }属于语法顺序错误,因此返回结果和预期完全相反。- 其余错误写法的问题:
{ $.response = * }这类通配符匹配仅适用于字符串字段值的模糊匹配,无法用来判断字段本身是否存在{ $.response != NULL }这类NULL判断仅在字段存在但值为NULL时生效,如果字段本身不存在,该判断不会命中
常用扩展语法
- 筛选嵌套字段存在的日志:例如要命中
response下存在response_code键的日志,写法为{ EXISTS $.response.response_code } - 反向筛选(不存在指定字段):要返回不包含
response键的日志,写法为{ NOT EXISTS $.response }
相关官方语法中文说明
摘自CloudWatch日志过滤器和模式语法官方文档:
JSON模式下的字段存在性判断规则:
- 使用
EXISTS 字段路径语法判断指定JSON路径对应的字段是否存在于日志中- 可以搭配
NOT关键字实现反向判断,语法为NOT EXISTS 字段路径- 仅当字段实际存在于JSON结构中时
EXISTS判断返回真,字段值为NULL、空字符串、0等情况都属于字段存在,都会命中EXISTS规则
内容的提问来源于stack exchange,提问作者Nikita Fedyashev
相关产品推荐
相关产品推荐

