如何在AWS CloudWatch中解析混合文本和JSON日志条目以进行日志指标过滤器

问题描述 投票:14回答:2

我正在尝试解析由文本和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 docs JSON模式应如下所示:

{ $.key = "lessonrecords-create" }

但是不匹配任何东西。我的猜测是,由于在单个日志条目中混合了文本和JSON。

因此,问题是:1.是否可以定义与该日志格式匹配的模式?2.是否可以从这种日志格式中提取尺寸和值?3.帮我做图案。

amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs
2个回答
0
投票

如果以您定义的方式设置指标过滤器,则测试不会注册任何匹配项(我也遇到了这个问题),但是,当您部署指标过滤器时,它仍会注册匹配项(至少我的匹配了) )。请记住,没有办法(据我所知)向后运行此指标筛选器(即,它只会捕获创建时的数据)。 [如果您想获取过去数据的统计信息,最好使用日志洞察力查询]

我目前正在尝试使用不同的分析语句来尝试提取数据(它也是JSON和文本的混合物,该线程可以帮助您(对我而言不是)Amazon Cloudwatch Logs Insights with JSON fields

更新!我找到了一种解析文本的方法,但是有点笨拙。如果使用lamda函数将cloudwatch日志导出到SumoLogic,则其搜索工具可以更好地控制日志,并可以解析JSON字段(如果您将整个条目视为文本)。 SumoLogic确实也很有帮助,因为您可以将搜索结果提取为CSV。出于我的目的,我在SumoLogic中解析了整个日志消息,将所有日志提取为CSV,然后在Python中使用了regex来过滤并提取所需的值。


0
投票

您可以使用流利的代理将日志发送到Cloudwatch。根据您的指标过滤器创建自定义grok模式。

步骤:

  • 在服务器中安装fluentd代理
  • 安装fluent-plugin-cloudwatch-logs插件和fluent-plugin-grok-parser插件
  • 根据您的日志格式编写自定义的grok模式

    请参阅this博客以获取更多信息

© www.soinside.com 2019 - 2024. All rights reserved.