AWS Cloudwatch日志洞察-根据JSON日志事件上的JSON过滤器过滤记录
我有一个日志组,它将JSON日志累积到每个流中。这些JSON日志如下所示 我想过滤AWS Cloudwatch日志洞察-根据JSON日志事件上的JSON过滤器过滤记录,json,amazon-web-services,amazon-cloudwatch,amazon-cloudwatchlogs,Json,Amazon Web Services,Amazon Cloudwatch,Amazon Cloudwatchlogs,我有一个日志组,它将JSON日志累积到每个流中。这些JSON日志如下所示 我想过滤“user”=“keet”中的日志。AWS文档解释了。我使用AWS SDK尝试了这一点,它在NodeJS中的以下代码中运行良好 let params = { logGroupName: 'log-goupe-name', /* required */ filterPattern: '{$.user=keet}', }; cloudwatchlogs.filterLogEvents(params,
“user”=“keet”
中的日志。AWS文档解释了。我使用AWS SDK尝试了这一点,它在NodeJS中的以下代码中运行良好
let params = {
logGroupName: 'log-goupe-name', /* required */
filterPattern: '{$.user=keet}',
};
cloudwatchlogs.filterLogEvents(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
问题:
同样,我想知道在AWS Cloudwatch Insights仪表板上,在AWS控制台上是否可以实现同样的功能?我知道字符串模式匹配是可能的。但是我想知道是否可以在Insights仪表板上使用@filter
进行JSON字段匹配。默认查询如下所示
fields @timestamp, @message
| sort @timestamp desc
| limit 20
我试着继续遵循这个答案,但仍然无济于事。这仅用于解析数据。我的要求是根据JSON日志中的值过滤日志
提前感谢。您可以从json中解析出用户,如下所示:
parse @message '"user":"*"' as user
根据您希望在仪表板上看到的内容,您可以使用以下选项仅筛选出特定用户:
fields @message
| parse @message '"user":"*"' as user
| filter user == "keet"
结果将是:
# @message user
----------------------------------------------
1 info - {"user":"keet","age":30 } keet
2 info - {"user":"keet","age":30 } keet
3 info - {"user":"keet","age":30 } keet
4 info - {"user":"keet","age":30 } keet
也可以尝试一下:
filter user == 'keet'
也许Insights会自动发现这些领域。您可以在右侧的“发现的字段”部分中看到自动发现的字段列表。太棒了。这就是我要找的。你知道如何解析复合JSON对象吗<代码>{“用户”:“基特”,“年龄”:30,“姓名”:{“第一个”:“基特”,“最后一个”:“sugathadasa”}。我想将“last”解析为“last”列。我想将其解析为
name.first
(复合方式)。您可以做同样的事情:parse@message'“user”:“*”'as user | parse@message'“first”:“*”as first | parse@message'“last”:“*”as last
,但这不会给出名称。first
语法。你能不能试试过滤名称。第一个=='keet'也许Insights会自动发现字段。我建议只记录json位(不记录info-
)。