AWS Cloudwatch 过滤器和模式语法

31

我正在按照这里的说明进行操作https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

但结果并不如我所期望的那样。

我当前的cloudwatch日志订阅过滤器模式如下:? "UNKNOWN_TOPIC_OR_PARTITION" ? " SEVERE " ? " severe " ? " FATAL " ? " fatal " - "closing session"

我想匹配任何带有" fatal "的模式,同时从结果中排除"closing session"。

然而,上述过滤器匹配了其他的日志输出:

enter image description here

3个回答

27

在CloudWatch中无法使用事件过滤器...但您可以使用Logs Insights

CloudWatch -> CloudWatch Logs -> Logs Insights

或者

CloudWatch -> CloudWatch Logs -> 日志组 -> [您的服务日志] -> [Button Logs Insights]

Logs Insights

Logs Insights UI

  1. 日志服务(您需要选择要跟踪的服务日志)
  2. 在此部分,您可以选择时间范围。
  3. 这里是查询框,您可以像SQL一样输入查询。

因此,在您的情况下,您可以在查询框中使用以下内容

fields @timestamp, @message
| sort @timestamp desc
| filter @message like /SEVERE|severe|FATAL|fatal|closing session/ 

现在点击运行查询,你将只看到符合筛选条件的日志。


1
这并不排除“关闭会话”。 - Spencer Sutton
3
你可以在过滤器中使用 and @message not like /closing session/ 来排除包含该句子的日志。 - Iqbal S
不回答这个问题,因为在筛选器中不能使用日志洞察表达式。 - undefined

14

尝试使用该筛选器设计模式:

[(w1="*UNKNOWN_TOPIC_OR_PARTITION*" || w1="*SEVERE*" || w1="*severe*" || w1="*FATAL*" || w1="*fatal*") && w1!="*closing session*"]

这个可行!但出于好奇...那个语法在哪里有文档记录? - Daniel Bang
1
@DanielBang 你可以在这里找到更多详细信息:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html。章节:使用模式匹配来匹配空格分隔的日志事件中的术语。 - Ivan
谢谢!我来这里之前确实看过那个文档,但没有看到那一部分。 - Daniel Bang
我有类似的问题。https://dev59.com/w9D7oIgBc1ULPQZFY4jI#74996040 - raj basilio

3

这一部分与所有的OR结合在一起,会导致你出现问题 - "closing session"。尝试将其移除并查看是否符合预期。

我不知道如何用单个过滤器获取您所需的语法,但为了获得相同的结果,您可以为要匹配的每个字符串创建一个单独的日志过滤器。在这种情况下,它们是:

  • "UNKNOWN_TOPIC_OR_PARTITION" - "closing session"
  • " SEVERE " - "closing session"
  • " severe " - "closing session"
  • " FATAL " - "closing session"
  • " fatal " - "closing session"

现在您有了5个不同的指标。您可以使用指标数学来对它们进行求和,从而得到您需要的指标。请参阅此处以了解如何使用指标数学:


我正在尝试将所有内容合并到单个过滤器中,但无法使其工作。到目前为止,我已经尝试了以下方法:?“UNKNOWN_TOPIC_OR_PARTITION” - “closing session” ?“SEVERE” - “closing session” ?“severe” - “closing session” ?“FATAL” - “closing session” ?“fatal” - “closing session” - Ebrahim Moshaya
我的答案是将其拆分为多个过滤器。不确定如何在一个过滤器中实现。 - Dejan Peretin
无法拆分…每个日志组只能有一个CloudWatch日志筛选器订阅,此设置无法更改。 - Ebrahim Moshaya
您正在创建度量过滤器,而不是订阅过滤器。限制为100。 - Dejan Peretin
不是,我正在创建订阅 CloudWatch 过滤器而不是指标过滤器。 - Ebrahim Moshaya
1
编辑问题,然后说明。在这种情况下,您有更多的灵活性,可以在 Lambda 中进行额外的处理。 - Dejan Peretin

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