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

How to get additional lines of context in a CloudWatch Insights query?

我通常 运行 像

这样的查询
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

是否有任何方法可以在包含“ERROR”的消息周围获取额外的上下文行?类似于 grep?

的 A、B 和 C 标志

例子

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

DEBUG Line 1
DEBUG Line 2
ERROR message
DEBUG Line 3
DEBUG Line 4

目前我得到以下结果

ERROR message

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

DEBUG Line 2
ERROR message
DEBUG Line 3

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

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

示例:

fields @timestamp, @message
| filter @requestId like /fcd09029-0e22-4f57-826e-a64ccb385330/ 
| sort @timestamp asc
| limit 500

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

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

fields @timestamp, @message, @logStream
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

这将为您提供一个类似于此屏幕截图中 right-most 的列:

单击右侧的 link 将转到并突出显示匹配的日志行。我喜欢在新选项卡中打开它并查看突出显示的行以获取上下文。

希望对您有所帮助!