亚马逊AWS官方博客

通过告警模板批量配置 CloudWatch Alarms 解决方案

Amazon CloudWatch 是一项用于实时监控 AWS 资源以及运行在 AWS 上的应用程序的基础服务。您可以使用 CloudWatch  Metrics 收集和跟踪指标,这些指标是您可衡量的相关资源和应用程序的变量。AWS 是在云原生环境下,各项服务都提供了许多 CloudWatch Metrics 的监控指标,以提供基础的监控。但由于默认没有监控模板和一键批量开启服务告警的功能,这给希望开箱即用的用户带来了一定的配置成本。常见的使用场景是,用户希望通过某项服务预定义的告警模板,批量创建告警。并且通常告警需要具体到每一台实例和指标,这样可以快速发现问题,而无需再次进行查询。

如果您的企业对监控有比较严格的要求,或者有一些合规标准对监控有严格的要求,例如需要具体到每台实例和数据库都设置监控,我们提供了这种通过 CloudFormation 服务批量创建告警的方法。在示例代码中,我们还预置了一些重要指标的告警模板,方便用户开箱即用。

CloudWatch 产品提供一些开箱即用的告警建议,以用于 CloudWatch Metrics 创建告警。因为 CloudWatch Metrics 中包含众多产品指标,这些建议可以帮助用户确定应该为哪些指标设置告警,以遵循监控最佳实践。有一些指标建议中还建议了要设置的告警阈值。本文中提供的示例代码将基于这些告警建议提供一些预先设置好的示例告警模板。关于 AWS 服务的告警建议,请参考此文档链接

示例架构和代码

该解决方案的示例代码已经发布在 Serverless Repo 中,可以直接通过 CloudFormation 部署并体验最终效果。部署中需要输入一个用于接收和发布最终告警信息的 SNS Topic。

该解决方案的示例架构和原理如下:

  1. EventBridge Schedule 每日定时触发 Alarms Lambda;
  2. Alarms Lambda 获取 CloudWatch 命名空间中的指标,并筛选出需要创建告警的指标名称和维度;
  3. Alarms Lambda 基于告警模板,生成包含所有告警的统一 CloudWatch 模板,并将这个模板保存到 S3 中;
  4. Alarms Lambda 向 CloudFormation 提交告警模板,创建或更新告警堆栈;
  5. 当告警状态产生变化时,这些告警将发送消息到统一的 SNS Topic。

CloudWatch 告警模板配置

CloudWatch 告警的示例模板配置文件保存在各个 Alarms Lambda 的路径下。要自定义模板和阈值等参数,请找到对应 Alarms Lambda 路径下的 template.json 文件并进行自定义:

关于如何编写有效的 CloudFormation 模板,请参考此文档链接

告警效果

示例代码中将报警的详细信息,例如指标和实例 ID 都包含在告警的名称中。每一个指标都会有单独的告警:

关于如何将这些告警信息发送至企业微信、飞书、钉钉等平台,可以参考此链接。这样在 EventBridge 中通过自定义告警模板可以达到类似以下的效果:

在查看告警后用户就可以直接定位到出现问题的 EC2 实例或数据库实例、EKS 节点等。

如何清理环境

  1. 在删除堆栈前,请找到 S3 中用于存储模板 json 文件的存储桶,将该存储桶清空;
  2. 在 CloudFormation 中所有相关模板。

总结

在这篇文章中,我们向您介绍了如何通过 CloudFormation 批量创建 CloudWatch 告警的思路和示例代码。此解决方案应该能够满足批量创建 CloudWatch 告警的基础需求。您还可以在示例代码的基础上进行开发以满足自定义需求。

本篇作者

柯逸楠

亚马逊云科技解决方案架构师,具有丰富的数据分析和挖掘经验,负责基于 AWS 云平台的解决方案咨询和设计。