如何在 CloudWatch Insights 查询中获取额外的上下文行?

feu*_*177 36 amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights

我通常运行一个查询

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

有没有办法在包含“错误”的消息周围获得额外的上下文行?类似于带有 grep 的 A、B 和 C 标志?

例子

例如,如果我有一个给定的日志,其中包含以下几行

DEBUG Line 1
DEBUG Line 2
ERROR message
DEBUG Line 3
DEBUG Line 4
Run Code Online (Sandbox Code Playgroud)

目前我得到以下结果

ERROR message
Run Code Online (Sandbox Code Playgroud)

但我想获得更多的上下文行,例如

DEBUG Line 2
ERROR message
DEBUG Line 3
Run Code Online (Sandbox Code Playgroud)

如果需要,可以选择获取更多上下文行。

rob*_*lva 36

您实际上也可以查询@logStream,在结果中将是指向匹配的相应日志流中确切位置的链接:

fields @timestamp, @message, @logStream
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个类似于此屏幕截图中最右侧的列:

在此处输入图片说明

单击右侧的链接将带您到并突出显示匹配的日志行。我喜欢在新选项卡中打开它并查看突出显示的行以了解上下文。

希望有帮助!

  • +1,但可能值得一提的是——如果我没有弄错的话——只有当您仅在一个日志组中搜索时,“@logStream”字段才会被链接。 (12认同)
  • 如果搜索多个日志,如果您还在字段列表中包含“@log”,则“@logStream”将再次链接 (12认同)

Kev*_*vin 12

我发现最有用的解决方案是执行查询并搜索错误并从“requestId”字段中获取请求 ID,然后打开第二个浏览器选项卡。在第二个选项卡中对该请求 ID 执行搜索。

例子:

fields @timestamp, @message
| filter @requestId like /fcd09029-0e22-4f57-826e-a64ccb385330/ 
| sort @timestamp asc
| limit 500
Run Code Online (Sandbox Code Playgroud)

通过上述查询,您可以按照发生错误的请求的正确顺序获取所有日志消息。这是一个使用 lambda 开箱即用的示例。但是,如果您以不同的方式将日志推送到 CloudWatch 并且没有 requestId,我建议为每个请求创建一个 requestId 或另一个对您的用例更有用的标识符,并将其与您的日志事件一起推送。

  • 是的,我目前正在使用这个技巧。我正在寻找这种方法的改进。我应该在我的问题中提到这个解决方法。我认为这可能对其他人有用,所以感谢您添加它。 (3认同)