用于检查 JSON 密钥的 CloudWatch 指标筛选器是不是存在

Posted

技术标签:

【中文标题】用于检查 JSON 密钥的 CloudWatch 指标筛选器是不是存在【英文标题】:CloudWatch Metric Filter for checking JSON key exists用于检查 JSON 密钥的 CloudWatch 指标筛选器是否存在 【发布时间】:2021-12-13 17:07:50 【问题描述】:

我正在尝试提出一个指标过滤器表达式,用于在存在特殊 JSON 键属性时过滤 CloudWatch Logs。

用例如下:应用程序执行各种日志记录(JSON 格式),只要它有一个特殊的 JSON 键(来自第三方服务的嵌套 JSON 响应),我想过滤它。

示例日志:

"severity":"INFO","msg":"EVENT","event":"key1":"value1"
"severity":"INFO","msg":"FooService responded","response":"response_code":800

我尝试过的过滤模式不起作用:

 $.response 
 $.response = *
 $.response = "*"
 $.response EXISTS 
 $.response IS TRUE 
 $.response NOT NULL 
 $.response != NULL 

预期的过滤结果:

"severity":"INFO","msg":"FooService responded","response":"response_code":800

$.response EXISTS 与我的预期相反(返回第一行而不是第二行),但我不知道如何否定它。

参考资料:Filter and pattern syntax @ CloudWatch User Guide

【问题讨论】:

【参考方案1】:

我还没有找到好的解决方案。

但我至少找到了一个。

如果您搜索的键是 != 特定值,它似乎会对其进行空值检查。

如果你说:

$.response != "something_no_one_should_have_ever_saved_this_response_as"

然后你会得到所有在你的 json 中存在 response 的条目,并且它不是你的字符串(希望是所有有效的条目)

绝对不是一个干净的解决方案,但它似乎很实用

【讨论】:

以上是关于用于检查 JSON 密钥的 CloudWatch 指标筛选器是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:通知 SNS 的 CloudWatch 事件

检查 JSON 密钥是不是存在

使用 PL/pgSQL 检查密钥是不是存在于 JSON 中?

无法将json文件上传到AWS CloudWatch

如何使用 Pig 检查 JSON 中缺少的密钥?

检查密钥是不是存在于 JSON 中,然后插入到页面中