用于检查 JSON 键的 CloudWatch 指标过滤器是否存在
CloudWatch Metric Filter for checking JSON key exists
我正在尝试提出一个指标过滤器表达式,在存在特殊 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 }
与我的预期相反(returns 第一行而不是第二行)但我不确定如何否定它。
参考material:Filter and pattern syntax @ CloudWatch User Guide
还没找到好的解决办法
不过我至少找到了一个
如果您搜索 !=
特定值的键,它似乎会对其进行空检查。
所以如果你说:
{$.response != "something_no_one_should_have_ever_saved_this_response_as"}
然后你会得到所有条目,其中 response
存在于你的 json 中,而不是你的字符串(希望所有有效条目)
绝对不是一个干净的解决方案,但它似乎很实用
对于查找存在字段的记录这一任务,我没有解决方案。实际上,问题中的 linked document 明确指出不受支持。
但是
如果我们简单地反转我们的逻辑,这将成为一个更容易处理的问题。查看您的数据,您想要 All records where there's a response key
但也可以表示为 All records where there isn't an events key
.
这意味着您可以用 {$.event NOT EXISTS}
完成任务。当然,您获得的日志消息类型越多,这就变得越复杂(我不得不为我的用例链接三个不同的 NOT EXISTS
查询),但它确实解决了问题。
我正在尝试提出一个指标过滤器表达式,在存在特殊 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 }
与我的预期相反(returns 第一行而不是第二行)但我不确定如何否定它。
参考material:Filter and pattern syntax @ CloudWatch User Guide
还没找到好的解决办法
不过我至少找到了一个
如果您搜索 !=
特定值的键,它似乎会对其进行空检查。
所以如果你说:
{$.response != "something_no_one_should_have_ever_saved_this_response_as"}
然后你会得到所有条目,其中 response
存在于你的 json 中,而不是你的字符串(希望所有有效条目)
绝对不是一个干净的解决方案,但它似乎很实用
对于查找存在字段的记录这一任务,我没有解决方案。实际上,问题中的 linked document 明确指出不受支持。
但是
如果我们简单地反转我们的逻辑,这将成为一个更容易处理的问题。查看您的数据,您想要 All records where there's a response key
但也可以表示为 All records where there isn't an events key
.
这意味着您可以用 {$.event NOT EXISTS}
完成任务。当然,您获得的日志消息类型越多,这就变得越复杂(我不得不为我的用例链接三个不同的 NOT EXISTS
查询),但它确实解决了问题。