AWS Cloudwatch Log Insights-根据JSON日志事件的JSON过滤器过滤记录

时间:2019-05-26 17:09:23

标签: json amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我有一个日志组,该日志组将JSON日志累积到其每个流。这些JSON日志如下所示。

enter image description here

我想在"user" = "keet"处过滤日志。 AWS文档在Using Metric Filters to Extract Values from JSON Log Events上进行了说明。我使用AWS开发工具包进行了尝试,对于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 Console上的AWS Cloudwatch Insights仪表板上进行同样的操作?我知道字符串模式匹配是可能的。但是我想知道是否可以使用@filter在Insights仪表板上进行JSON字段匹配。出现的默认查询如下。

fields @timestamp, @message
| sort @timestamp desc
| limit 20

我尝试在Stackoverflow上遵循此答案,但仍然没有帮助。这仅用于解析数据。我的要求是根据JSON日志中的值过滤日志。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以像这样从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会自动发现这些字段。您可以在右侧的发现的字段部分中查看自动发现的字段的列表。