首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CloudWatch Logs Insights从JSON消息的数组中提取数据?

如何使用CloudWatch Logs Insights从JSON消息的数组中提取数据?
EN

Stack Overflow用户
提问于 2021-09-16 09:54:03
回答 1查看 332关注 0票数 0

我记录JSON对象的消息。JSON有一个包含键/值对的数组:

代码语言:javascript
复制
{
   ...
   "arr": [{"key": "foo", "value": "bar"}, ...],
   ...
}

现在,我希望过滤包含特定键的结果,并提取数组中特定键的值。

我尝试过使用正则表达式,类似于parse @message /.*"key":"my_specific_key","value":(?<value>.*}).*/,它提取值,但也返回消息的其余部分。它也不会过滤结果。

如何过滤结果并提取特定键的值?

EN

回答 1

Stack Overflow用户

发布于 2021-09-23 18:26:30

如果在cloudwatch日志组的日志条目中,它们实际上显示为json,那么您可以直接在字段中的任何位置引用键。

(不需要自动附加到所有默认值的@,cloudwatch )

如果你正在使用python,你也可以使用aws_lambda_powertools来做这件事,用一种非常巧妙的方式(而且它是一个实际的亚马逊网络服务产品)

如果它们在您的日志中显示为一个字符串,那么它可能是一个转义字符串,您必须精确地匹配它,包括空格等等。当你解析的时候,你会想要做这样的事情:

如果这是您的日志消息字符串'{"AKey“:"AValue","Key2”:"Value2"}

代码语言:javascript
复制
parse @message "{\"*\" : \"*\",\"*\" : \"*\"} akey, akey_value, key2, key2_value

然后,您可以对这些变量进行过滤或计数或任何操作。parse是一种专门用于匹配模式并将通配符分配给变量的语句,一次按顺序分配一个

对于复杂的json,如果上面的正则表达式工作正常,那么您所需要的只是一个filter语句。

代码语言:javascript
复制
field @message
 | pares @message ... your regex as value_var
 | filer value_var /some more regex/

如果它不是日志条目中的字符串,而是一个实际的json,您可以只引用键:

代码语言:javascript
复制
filter a_key ~="some value" (or regex here)

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html

了解更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69206241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档