41

我通常会运行类似的查询

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

有没有办法在包含“错误”的消息周围获得额外的上下文行?类似于 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

如果我愿意,可以选择获取更多上下文。

4

2 回答 2

47

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

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

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

在此处输入图像描述

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

希望有帮助!

于 2020-08-15T15:02:15.223 回答
16

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

例子:

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

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

于 2020-08-13T10:28:46.133 回答