AWS CloudWatch日志筛选器模式包括匹配模式前和/或后的行

24

有没有一种方法可以在 AWS CloudWatch 日志中包含匹配模式之前和/或之后的N行?

假设我有这个查询,并且想要每个匹配项之前和之后各3行。

aws logs filter-log-events --log-group-name my-group --filter-pattern "mypattern"

目前我唯一的解决办法是删除过滤模式并使用grep:

aws logs filter-log-events --log-group-name my-group | grep -A 3 -B 3 mypattern

然而,我希望只流传我需要的日志事件,并将其作为 AWS 日志事件查询的一部分执行。

2个回答

11

目前AWS不支持此功能(由贡献者确认),但有一个开放的GitHub问题用于跟踪此功能是否会在未来得到支持。

同时,您将不得不在日志流传输后按照问题中提到的进行过滤。

aws logs filter-log-events --log-group-name my-group | grep -A 3 -B 3 mypattern

9
“-C 3” 可以代替“-A 3 -B 3”。请注意,翻译过程中要保持内容的原意,并使语言更加通俗易懂。 - Naor Levi
我认为这还不够,首先,当我执行此操作时,会返回JSON,因此grep +/-行不起作用。其次,需要有一种搜索“最后一天”或类似的方法。目前,AWS日志似乎仅支持输入自1970年以来的显式毫秒数作为--start-time。就像他们故意让人无法使用一样 :) - BjornW
1
一些额外的提示以使其更好地工作:--output text 以文本而不是 json 输出(似乎是默认值)。执行 date +%s 以获取当前 Unix 时间戳,手动减去一个小时的时间,然后执行 --starting-time <value + 000>。 - BjornW
在 AWS SDK for .NET 中,AmazonCloudWatchLogsClient 类除了 FilterLogEvents 方法外,还有 StartQuery 方法,可使用 Insights 语法运行 Insignts 查询。后者可能是更好的搜索功能。请参见:https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudWatchLogs/TCloudWatchLogsClient.html - Triynko

11

我曾经遇到同样的问题,并发现简单地按时间戳搜索可以在一定程度上解决我的问题。

CloudWatch有“日志洞察”功能,这是一个流畅的日志搜索工具。

使用关键词搜索并获取时间戳,然后使用时间戳过滤附近的日志。

在此输入图片描述


4
日志洞察支持数学运算,因此如果您知道特定记录的时间戳为X,则可以执行filter @timestamp >= X - 1 and @timestamp <= X + 1。当您搜索并复制X时,这非常有用,并且可能希望逐渐增加搜索范围,以便目标事件大致位于中间。 - Demarsch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接