我正在尝试解析混合了文本和JSON的日志条目。第一行是文本表示,下一行是事件的JSON有效负载。其中一个可能的例子是:
2016-07-24T21:08:07.888Z [INFO] Command completed lessonrecords-create
{
"key": "lessonrecords-create",
"correlationId": "c1c07081-3f67-4ab3-a5e2-1b3a16c87961",
"result": {
"id": "9457ce88-4e6f-4084-bbea-14fff78ce5b6",
"status": "NA",
"private": false,
"note": "Test note",
"time": "2016-02-01T01:24:00.000Z",
"updatedAt": "2016-07-24T21:08:07.879Z",
"createdAt": "2016-07-24T21:08:07.879Z",
"authorId": null,
"lessonId": null,
"groupId": null
}
}
对于此记录,我尝试将Log Metric Filter定义为a)匹配记录b)尽可能选择数据或维度。
根据AWS文档,JSON模式应如下所示:
{ $.key = "lessonrecords-create" }
然而它与任何东西都不匹配。我的猜测是因为在单个日志条目中混合文本和JSON。
所以,问题是: 1.是否可以定义与此日志格式匹配的模式? 2.是否可以从这种日志格式中提取尺寸,值? 3.帮助我完成这个模式。
答案 0 :(得分:0)
如果您以定义的方式设置指标过滤器,则测试不会注册任何匹配项(我也遇到了这个问题),但是,当您部署指标过滤器时,它仍会注册匹配项(至少是我的)确实)。请记住,没有办法(据我所知)向后运行此度量标准筛选器(即,它将仅捕获创建时的数据)。 [如果您想获取过去数据的统计信息,最好使用日志洞察查询]
我目前正在尝试使用不同的分析语句来尝试提取数据(它也是JSON和文本的组合),该线程可以帮助您(对我而言不是)Amazon Cloudwatch Logs Insights with JSON fields。
更新! 我找到了一种解析文本的方法,但它有点笨拙。如果您使用lamda函数将cloudwatch日志导出到SumoLogic,则其搜索工具可以更好地处理日志,并可以解析JSON字段(如果您将整个条目视为文本)。 SumoLogic也确实有帮助,因为您可以将搜索结果提取为CSV。出于我的目的,我在SumoLogic中解析了整个日志消息,将所有日志提取为CSV,然后在Python中使用了regex来过滤并提取所需的值。
答案 1 :(得分:0)
您可以将CloudWatch Events用于此类目的(也称为“订阅过滤器”),您需要做的是定义一个cloudwatch规则,该规则使用表达式语句来匹配您的日志。 在这里,我将让您阅读所有内容:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html
:)
答案 2 :(得分:0)
将消息分成 3 个字段,第 3 个字段将是有效的 json 。我认为在你的情况下会
transform: translateZ(10px);
field3 是有效的 json。 [INFO} 将是第一个字段。
答案 3 :(得分:-2)
您可以使用流利的代理将日志发送到Cloudwatch。根据您的指标过滤器创建自定义grok模式。
步骤:
根据您的日志格式编写自定义的grok模式
请参考this博客以获取更多信息