You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现AWS CloudWatch自定义仪表盘触发Slack阈值告警通知?

AWS CloudWatch 5xx状态码持续超标自动发送Slack通知的两种实现流程

方式一:不使用Lambda(CloudWatch Alarm + SNS + Slack Webhook)

  • 配置Slack Incoming Webhook
    打开Slack工作区,进入「Settings & administration > Manage apps」,搜索“Incoming WebHooks”并添加到工作区,选好要接收通知的频道,复制生成的Webhook URL备用。
  • 创建SNS主题并配置订阅
    1. 进入AWS SNS控制台,新建标准类型的主题。
    2. 在主题的订阅页面,协议选「HTTPS」,端点填刚才的Slack Webhook URL,完成订阅(Slack会自动确认,不用手动操作)。
    3. 给SNS主题加权限:在主题的「权限」标签页,添加如下策略,允许CloudWatch Alarm向其发消息:
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudwatch.amazonaws.com"
        },
        "Action": "sns:Publish",
        "Resource": "你的SNS主题ARN"
      }
      
  • 创建CloudWatch Alarm监控5xx指标
    1. 进入CloudWatch控制台,找到你自定义仪表盘里的5xx状态码指标(确认命名空间、指标名称和仪表盘一致)。
    2. 点击「创建警报」,配置指标:
      • 选统计类型(比如Sum或Average,看你的计数逻辑)
      • 周期设为1分钟,数据点选「连续M个周期」(M就是你要求的分钟数)
      • 阈值设为「大于N」(N是你设定的阈值)
    3. 配置警报操作:选「通知」,添加刚才创建的SNS主题,可设置触发和恢复时都发通知。
    4. 完成创建后,手动触发5xx请求测试,看Slack是否收到通知。

方式二:使用Lambda(CloudWatch Alarm + Lambda + Slack API)

  • 创建Lambda函数
    1. 进入Lambda控制台,从头创建函数,运行时选Python 3.x(或你熟悉的语言)。
    2. 替换函数代码为以下示例(记得把Slack Webhook URL换成你的):
      import json
      import urllib3
      
      def lambda_handler(event, context):
          slack_webhook_url = "你的Slack Webhook URL"
          http = urllib3.PoolManager()
          
          # 解析CloudWatch Alarm的SNS消息
          alarm_msg = event['Records'][0]['Sns']['Message']
          alarm_info = json.loads(alarm_msg)
          
          # 构造Slack通知内容
          slack_content = {
              "text": f"⚠️ CloudWatch警报触发:5xx状态码持续超标\n"
                      f"警报名称: {alarm_info['AlarmName']}\n"
                      f"当前状态: {alarm_info['NewStateValue']}\n"
                      f"阈值: {alarm_info['Threshold']}\n"
                      f"触发时间: {alarm_info['StateChangeTime']}"
          }
          
          # 发送到Slack
          response = http.request(
              'POST',
              slack_webhook_url,
              body=json.dumps(slack_content),
              headers={'Content-Type': 'application/json'}
          )
          
          return {
              'statusCode': response.status,
              'body': response.data.decode('utf-8')
          }
      
    3. 给Lambda加权限:允许SNS向其发消息,要么在Lambda执行角色里添加SNS触发权限,要么后续在SNS订阅Lambda时自动生成权限。
  • 关联CloudWatch Alarm与Lambda
    1. 方式一:创建SNS主题,订阅刚才的Lambda函数,然后在CloudWatch Alarm操作里选择这个SNS主题。
    2. 方式二:直接在CloudWatch Alarm的操作里选择「Lambda函数」,添加创建好的Lambda函数。
  • 配置CloudWatch Alarm监控规则
    和方式一的配置逻辑一致:选5xx指标,设置统计类型、连续M分钟、阈值大于N的规则。
  • 测试验证
    触发5xx请求,等待M分钟,检查Slack是否收到格式化的通知。

内容的提问来源于stack exchange,提问作者Aanchal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:27:40