如何在AWS CloudWatch for Log Metric Filter中解析混合文本和JSON日志条目

Mik*_*liy 10 amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我试图解析混合文本和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
  }
}
Run Code Online (Sandbox Code Playgroud)

对于此记录,我尝试将Log Metric Filter定义为a)匹配记录b)如果可能,选择数据或维度.

根据AWS docs,JSON模式应如下所示:

{ $.key = "lessonrecords-create" }

但它与任何东西都不匹配.我的猜测是因为在单个日志条目中混合文本和JSON.

因此,问题是:1.是否可以定义与此日志格式匹配的模式?2.是否可以从这种日志格式中提取尺寸,值?3.用模式帮助我做到这一点.

Dav*_*d A 1

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

我目前正在尝试使用不同的解析语句来尝试提取数据(它也是 JSON 和文本的混合),此线程可能会帮助您(但对我来说没有)Amazon Cloudwatch Logs Insights with JSON fields。

更新! 我找到了一种解析文本的方法,但它有点笨拙。如果您使用 lamda 函数将 cloudwatch 日志导出到 SumoLogic,他们的搜索工具可以实现更好的日志操作,并允许您解析 JSON 字段(如果您将整个条目视为文本)。SumoLogic 也非常有用,因为您可以将搜索结果提取为 CSV。出于我的目的,我在 SumoLogic 中解析整个日志消息,将所有日志提取为 CSV,然后使用 Python 中的正则表达式来过滤并提取我需要的值。