Cloudwatch日志警报 - 如何在电子邮件通知中包含错误/异常/堆栈跟踪数据

52
我刚刚在我的EC2实例上配置了Cloudwatch日志,并且到目前为止很喜欢它。我还设置了某些关键字的警报,比如“ERROR”。虽然电子邮件警报似乎工作正常,但我想知道是否有办法微调警报电子邮件,使其更加简洁和信息丰富。具体而言,我想要:
  1. 消除警报电子邮件中的所有样板文字。
  2. 包含一些触发警报的错误/异常信息。这可以是包括生成警报的日志语句等简单内容。
现在,警报电子邮件看起来像:
您收到此电子邮件是因为您在美国东部 - 弗吉尼亚北部地区的 Amazon CloudWatch 报警“App-Error-Alarm”已进入 ALARM 状态,原因是“Threshold Crossed: 1 datapoint (1.0) was greater than or equal to the threshold (1.0).”,时间是“Tuesday 07 February, 2017 16:39:43 UTC”。
在 AWS 管理控制台中查看此报警: https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#s=Alarms&alarm=App-Error-Alarm 报警详细信息: - 名称:App-Error-Alarm - 描述:app.log 中的错误 - 状态更改:INSUFFICIENT_DATA -> ALARM - 状态更改原因:Threshold Crossed: 1 datapoint (1.0) was greater than or equal to the threshold (1.0). - 时间戳:Tuesday 07 February, 2017 16:39:43 UTC - AWS 帐户:<>
阈值: - 当度量值 GreaterThanOrEqualToThreshold 1.0 持续 300 秒时,报警将处于 ALARM 状态。
监控指标: - MetricNamespace:LogMetrics - MetricName:ERROR - Dimensions: - Period:300 秒 - 统计量:Sum - 单位:未指定
状态更改操作: - OK: - ALARM:[arn:aws:sns:us-east-1:<>:support] - INSUFFICIENT_DATA:
我希望它像这样:

警报:应用程序错误警报

关键词:"ERROR"

原因:ERROR 2017-02-07 07:31:47,375 [SimpleAsyncTaskExecutor-5] com.app.server.rest.Watcher: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

它简短、清晰,能立即告诉我是否需要立即处理。是否可以在不编写代码的情况下完成,如here所建议的那样?

2
据我所知,这是不可能完成的。 - Mark B
2个回答

31

您遇到此问题的原因是因为您配置了一个警报,它用于聚合数据,而不是特定的日志记录。您将其配置为某个指标(具有ERROR关键字的日志记录数量)。

相反,您可以使用日志订阅,并将所有匹配筛选器的日志记录流式传输到自定义Lambda函数。您可以使用它来发送通知电子邮件或在Slack中发送消息。

要配置日志流式传输,请转到AWS控制台中的Lambda,并从名为"cloudwatch-logs-process-data"的蓝图创建一个新函数。它具有基本结构,并且很容易按需自定义。

进入图片描述


2
如果我们有许多Lambda函数,并且希望在任何一个Lambda函数中记录错误时收到SNS通知,那么我们需要为每个日志组订阅CloudWatch Lambda吗? - Charlie Schliesser
1
@CharlieSchliesser - 您可以将触发器设置为在 /aws/lambda 上调用,然后根据您想要/需要监听的内容设置过滤器。 使用这种方法,您可以变得非常表达性,并轻松地获得大量覆盖范围。 https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html - Rob Schmuecker
4
成本方面怎么样?似乎这将在每个日志消息上触发该函数。 - Fábio Paiva
2
@FábioPaiva 不是,只针对匹配筛选器的日志记录。例如所有的ERROR。 - Igor Romanov
1
你如何监听 /aws/lambda ?我无法弄清楚。AWS 总是说“该日志组不存在”。 - Boris Le Méec
显示剩余2条评论

7
你可以使用由AWS labs提供的Cloudwatch Logs Customize alarms Package来自定义Cloudwatch警报。
当您收到警报时,您希望获得足够的信息以决定是否需要立即处理。您还希望根据运营需求自定义警报文本。CloudWatch Logs Customize Alarms是一个Lambda函数,可在警报期间从CloudWatch Logs中读取日志并通过SES发送定制电子邮件。
该软件包提供了使用Lambda SNS端点的功能,可以根据您的运营要求自定义警报通知。

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