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

Posted

技术标签:

【中文标题】Cloudwatch 日志警报 - 如何在电子邮件通知中包含错误/异常/堆栈跟踪数据【英文标题】:Cloudwatch Log Alert - How to include error / exception / stack trace data in email notification 【发布时间】:2017-06-25 01:04:21 【问题描述】:

我刚刚在我的 ec2 实例上配置了 Cloudwatch 日志,到目前为止我很喜欢它。我还为某些关键字设置了警报,例如“错误”。虽然电子邮件警报似乎工作正常,但我想知道是否有办法微调警报电子邮件以使其更简洁和信息丰富。具体来说,我希望

    删除警报电子邮件中的所有样板文本。

    包括一些有关触发警报的错误/异常的信息。这可以像包含生成警报的日志语句一样简单。

现在,警报电子邮件看起来像

您收到这封电子邮件是因为您的 Amazon CloudWatch 警报 “App-Error-Alarm”在美国东部-弗吉尼亚北部地区已进入 ALARM 状态,因为“越过阈值:1 个数据点 (1.0) 更大 大于或等于阈值 (1.0)。”在“2017 年 2 月 7 日星期二” 世界标准时间 16:39:43”。

在 AWS 管理控制台中查看此警报: https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#s=Alarms&alarm=App-Error-Alarm

报警详情: - 名称:应用程序错误警报 - 描述:app.log 中的错误 - 状态变化:INSUFFICIENT_DATA -> ALARM - 状态更改原因:超过阈值:1 个数据点 (1.0) 大于或等于阈值 (1.0)。 - 时间戳:2017 年 2 月 7 日星期二 16:39:43 UTC - AWS 账户:

门槛: - 当指标为 GreaterThanOrEqualToThreshold 1.0 300 秒时,警报处于 ALARM 状态。

监控指标: - MetricNamespace:LogMetrics - 指标名称:错误 - 方面: - 周期:300 秒 - 统计:总和 - 单位:未指定

状态更改操作: - 好的: - 警报:[arn:aws:sns:us-east-1::support] - 数据不足:

我想要类似的东西

报警:App-Error-Alarm

关键字:“错误”

原因:错误 2017-02-07 07:31:47,375 [SimpleAsyncTaskExecutor-5] com.app.server.rest.Watcher:javax.net.ssl.SSLHandshakeException: 收到致命警报:handshake_failure

它简短、甜美,能立即告诉我它是否需要我立即关注。这可以在不按照建议here 编写代码的情况下完成吗?

【问题讨论】:

据我所知这是做不到的。 【参考方案1】:

您遇到此问题是因为您配置了警报并且是针对汇总数据,而不是针对特定日志记录。您将其配置为某些指标(带有 ERROR 关键字的日志记录数)。

您可以改用日志订阅并将与过滤器匹配的所有日志记录流式传输到自定义 Lambda 函数。您可以使用它向电子邮件或 Slack 发送通知。

要配置日志流,请转到 AWS 控制台中的 Lambda,并从名为 “cloudwatch-logs-process-data” 的蓝图创建一个新函数。它具有基本结构,易于根据您的需要进行定制。

【讨论】:

如果我们有许多 Lambda 并且我们希望接收 SNS 通知以了解其中任何一个记录的任何错误?我们是否需要为每个日志组提供一个订阅 CloudWatch 的 Lambda? @CharlieSchliesser - 您可以设置要在/aws/lambda 上调用的触发器,然后根据您想要/需要监听的内容设置过滤器。使用这种方法,您可以获得非常有表现力并轻松获得大量报道。 docs.aws.amazon.com/AmazonCloudWatch/latest/logs/… @RobSchmuecker 你能解释一下如何在 /aws/lambda 上触发吗?我四处寻找,但没有找到。谢谢。 成本呢?似乎它会在每条日志消息上触发该功能 @FábioPaiva 否,仅适用于匹配过滤器的日志记录。例如所有错误【参考方案2】:

您可以使用AWS labs提供的Cloudwatch Logs Customize alarms Package自定义Cloudwatch警报。

当您收到警报时,您需要足够的信息来决定是否 是否需要立即关注。您还想自定义 报警文本到操作需要。 CloudWatch Logs 自定义警报 是一个 Lambda 函数,有助于从 CloudWatch 读取日志 在警报期间记录并通过 SES 发送自定义电子邮件。

这些包提供使用 Lambda SNS 端点,然后可以根据您的操作要求自定义警报通知。

【讨论】:

以上是关于Cloudwatch 日志警报 - 如何在电子邮件通知中包含错误/异常/堆栈跟踪数据的主要内容,如果未能解决你的问题,请参考以下文章

过滤 cloudwatch 警报在 SNS 主题上发布的消息以接收电子邮件通知

如何配置 Cloudwatch 警报 - 每 30 分钟检查 5 个错误

AWS Cloudwatch - 在 15 分钟的 lambda 超时时不发送警报邮件

Cloudwatch 突然上传到 s3 的警报

只要评估间隔持续,AWS CloudWatch 警报就会一直发送邮件

Cloudwatch 警报到 Slack