我记录JSON对象的消息。JSON有一个包含键/值对的数组:
{
...
"arr": [{"key": "foo", "value": "bar"}, ...],
...
}现在,我希望过滤包含特定键的结果,并提取数组中特定键的值。
我尝试过使用正则表达式,类似于parse @message /.*"key":"my_specific_key","value":(?<value>.*}).*/,它提取值,但也返回消息的其余部分。它也不会过滤结果。
如何过滤结果并提取特定键的值?
发布于 2021-09-23 18:26:30
如果在cloudwatch日志组的日志条目中,它们实际上显示为json,那么您可以直接在字段中的任何位置引用键。
(不需要自动附加到所有默认值的@,cloudwatch )
如果你正在使用python,你也可以使用aws_lambda_powertools来做这件事,用一种非常巧妙的方式(而且它是一个实际的亚马逊网络服务产品)
如果它们在您的日志中显示为一个字符串,那么它可能是一个转义字符串,您必须精确地匹配它,包括空格等等。当你解析的时候,你会想要做这样的事情:
如果这是您的日志消息字符串'{"AKey“:"AValue","Key2”:"Value2"}
parse @message "{\"*\" : \"*\",\"*\" : \"*\"} akey, akey_value, key2, key2_value然后,您可以对这些变量进行过滤或计数或任何操作。parse是一种专门用于匹配模式并将通配符分配给变量的语句,一次按顺序分配一个
对于复杂的json,如果上面的正则表达式工作正常,那么您所需要的只是一个filter语句。
field @message
| pares @message ... your regex as value_var
| filer value_var /some more regex/如果它不是日志条目中的字符串,而是一个实际的json,您可以只引用键:
filter a_key ~="some value" (or regex here)https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html
了解更多信息
https://stackoverflow.com/questions/69206241
复制相似问题