如何将 AWS CloudWatch 警报发送到 Slack
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
告警和监控系统是成熟产品和应用程序的关键组成部分。如果您关心您的客户,那么在出现问题时及时收到通知总比一无所知要好得多。如果您将基础设施托管在 AWS 上,那么获取所用服务完整指标的唯一方法就是使用 CloudWatch。AWS CloudWatch 不仅提供指标访问权限,还能针对特定情况创建告警。但是,如果您之前使用过 AWS,您肯定会注意到它的界面和某些功能远称不上“用户友好”,这意味着向 Slack 发送包含告警的通知并非易事。
本文将揭示五分钟内设置所需闹钟的秘诀。如果您想观看实际操作演示,请观看我们的视频教程。
要实现这一点,我们需要完成以下几个步骤:
- 创建 AWS 访问密钥和密钥
- 创建角色
- 部署 Lambda 函数
- 创建 SNS 主题和订阅
- 创建 CloudWatch 警报
1. 创建 AWS 访问密钥和密钥
如果您已经拥有 AWS 访问密钥和密钥,则可以跳过此步骤。否则,请点击此链接。选择您的用户,然后转到“安全凭证”选项卡,并单击“创建访问密钥”。
复制 AWS 访问密钥和密钥;我们将在配置 Lambda 函数部署时使用它们。
创建角色
此角色将由您的 Lambda 函数使用,并需要获得执行特定操作的权限。
请点击此链接,然后点击“创建角色”。
从列表中选择 Lambda。
找到 AWSLambdaBasicExecutionRole 并选择它。
最后,输入角色名称,例如“cloudwatch-to-slack-role”,在列表中点击新创建的角色,然后复制 ARN 名称。我们将在步骤 3 部署 Lambda 函数时使用它。
3. 部署 Lambda 函数
要部署 AWS Lambda 函数,您需要克隆代码仓库并在本地计算机上安装 Node.js。为了完善配置流程,我们专门为该代码仓库做出了大量贡献。
git clone git@github.com:assertible/lambda-cloudwatch-slack.git
cd lambda-cloudwatch-slack
cp .env.example .env
打开你的 .env 文件并填写环境变量。
UNENCRYPTED_HOOK_URL
变量应填写为 Slack 传入 Webhook 的 URL;在该页面上为您的组织创建一个新的 CloudWatch Webhook。
遵循每个特定服务使用一个 Webhook 的惯例。创建 Webhook 后,选择一个通道,然后发布通知,创建一个用户名(消息标题),当然,别忘了添加一张漂亮的图片。点击此处链接下载 CloudWatch 徽标。
AWS_FUNCTION_NAME
函数的名称,将在您的 AWS Lambda 函数页面中声明。我们将其命名为“cloudwatch-to-slack”。
AWS_REGION=eu-west-1
选择 Lambda 函数所在的区域。
AWS_ROLE="arn:aws:iam::123456789123:role/lambda_exec_role"
将第二步中的 arn id 复制到此处。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
请使用第一步中获得的密钥填写 AWS 访问密钥和密钥。
现在我们已准备好部署;只需在终端中,从我们克隆的存储库文件夹执行以下命令:
npm install
npm run deploy
如果一切顺利,您将能够在 AWS 的 Lambda 页面上找到您新安装的函数。
4. 创建 SNS 主题和订阅
在 AWS 中浏览简单通知服务。讽刺的是,这项服务一点也不简单,尤其是他们使用的术语和你需要完成的步骤。
转到“主题”并单击“创建新主题”。我选择“cloudwatch-alarms”作为要发送的通知的名称。
打开创建的主题并创建订阅。
选择 AWS Lambda 作为协议,并选择与您的函数名称对应的端点。
好了,现在我们可以创建警报了。
5. 创建 CloudWatch 警报
通过 CloudWatch 导航至您的 AWS 账户,然后单击“创建警报”。
选择您要监控的指标,定义警报配置,并在“发送通知至”部分选择您的 SNS 主题名称。
我建议您明确定义一些条件,以便在测试函数时立即发出警报。如果一切配置正确,您将在 Slack 频道中看到相关消息。
我希望本指南能帮助您节省时间,并为您的当前或未来项目设置提醒。
补充说明:
AWS Lambda 默认提供了一些蓝图,允许您通过简单的配置执行不同的操作,其中甚至包括 CloudWatch 到 Slack 的函数。但遗憾的是,该函数会向频道发送质量很差、结构混乱的数据。















