企业微信、钉钉接收 Amazon CloudWatch 告警

2021-01-08

一、背景介绍

我们看到一些国内的 AWS 用户,在使用企业微信和钉钉作为内部工作沟通平台。他们希望将Amazon CloudWatch 接收到的监控、告警信息发送到企业微信和钉钉等即时通讯工具中,方便统一运维。 Amazon CloudWatch 能够直接以邮件、短信的形式发送告警通知,也可以与 AWS Lambda 结合,通过 Amazon Connect 以电话的形式发送告警通知。

在这篇文章中,我们将会介绍如何通过 Amazon SNS 和 AWS Lambda 来实现将 AWS CloudWatch 告警信息发送到微信和钉钉。

CloudWatch 与 SNS、Lambda 配合使用常见流程如下:
以上架构中, Amazon CloudWatch 作为事件触发器,当它收到告警信息、定时任务、特定事件发生等事件时,它可以直接触发 AWS Lambda 来执行函数内容。业务将消息推送到 SNS ,由 SNS 来触发后续的操作。如: SNS  触发 AWS Lambda 执行、 SNS  发送邮件/短信通知等。

二、方案架构

本方案中 CloudWatch 接收 EC2 运行指标并进行监控。当 EC2 指标超出设定阈值后,CloudWatch 触发告警事件,并将事件消息通过 SNS 发送到 Lambda 函数。Lambda函数执行用户自定义的代码,包括:解析告警消息并发送到企业微信、钉钉机器人、或者 Prometheus 等平台。

架构中 AWS 服务简介:

Amazon CloudWatch  可以用来收集 AWS  包括 EC2 、 RDS 、 EKS 等各种服务运行日志也可以收集用户应用程序日志,可以作为 AWS 上日志数据集散地。同时在 CloudWatch 上可以设置基于指标的告警、基于时间和事件的规则,它可以与 Amazon SNS 和 Lambda 等其他AWS服务进行使用。

AWS Lambda 是无服务器的函数计算服务。通过  AWS Lambda ,无需预置或管理服务器即可运行代码。借助  Lambda ,您几乎可以为任何类型的应用程序或后端服务运行代码,而且完全无需管理。您可以将您的代码设置为自动从其他  AWS  服务如: CloudWatch 、 SNS 等触发,或者直接从任何  Web 或移动应用程序调用。

Amazon SNS 是一项用于应用与应用之间以及应用与人之间通信的完全托管型消息收发服务。

三、使用企业微信接收 CloudWatch 告警

企业微信端设置

  1. 注册企业微信账号
  2. 在企业微信中创建应用

 

   3.创建完成后记录应用 Secret

企业微信告警流程

a) 获取 access_token ,参考微信官方说明文档

示例代码:

tokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"

def get_token():
values = {'corpid': ''<corpid>'', 'corpsecret': '<'corpsecret'>'}
req = requests.post(tokenUrl, params=values)
data = json.loads(req.text)
return data["access_token"]

返回技术博客