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

AWS ECS应用持续5xx错误监控选型:CloudWatch还是EventBridge?

优先选择AWS CloudWatch Alarms的解决方案

为什么选CloudWatch Alarms而非EventBridge

  • CloudWatch Alarms天生就是为持续状态监控设计的,能直接基于ALB自动上报的CloudWatch指标,设置“连续10分钟返回特定5XX错误”这类阈值条件,完全匹配你的需求。
  • EventBridge更偏向单次事件或状态变更触发,要实现持续监控的话,得额外做状态聚合和判断,反而绕远路,没必要。

需要集成的其他AWS服务

  • AWS SNS(Simple Notification Service):CloudWatch Alarms不能直接推送消息到Slack,必须先把告警转发到SNS主题,再通过SNS对接Slack。
  • AWS Lambda(可选):如果需要自定义Slack消息格式,或者做额外的告警处理,可以用Lambda作为SNS和Slack的中转层;如果用SNS直接对接Slack的Webhook,也可以不用Lambda。

配置步骤示例

1. 确认可用的CloudWatch指标

ALB默认会上报以下关键指标到CloudWatch:

  • HTTPCode_Target_5XX_Count:ECS应用返回的所有5XX错误数(包含502/503/504)
  • HTTPCode_ELB_5XX_Count:ALB自身返回的5XX错误数

若要监控单一错误码(比如仅504),需要开启ALB的详细监控(付费),此时CloudWatch会上报细分指标如HTTPCode_Target_504_Count。

2. 创建CloudWatch Alarm

  1. 进入CloudWatch控制台,选择「Alarms」→「Create alarm」
  2. 选择指标:搜索并选中ALB的HTTPCode_Target_5XX_Count(或细分错误码指标)
  3. 设置阈值规则:
    • 统计类型:选Sum(统计每分钟错误总数)
    • 周期:1分钟
    • 触发条件:连续10个周期(即10分钟)内,错误数大于0(或你需要的具体阈值)
  4. 配置通知:添加通知目标为新建/已有SNS主题。

3. 对接SNS到Slack

方式1:SNS直接对接Slack Webhook(推荐)

  1. 在Slack工作区创建Incoming Webhook,获取对应的URL
  2. 在SNS主题的订阅列表中,选择「HTTPS」协议,填入Slack Webhook URL
  3. 自定义SNS消息格式为Slack支持的JSON:
{
  "text": "🚨 ALB后端ECS应用告警\n告警名称: ${AlarmName}\n错误类型: 502/503/504\n持续时间: 10分钟\n告警详情: ${NewStateReason}"
}

方式2:通过Lambda中转自定义消息

  1. 创建Node.js Lambda函数,触发源选择目标SNS主题
  2. Lambda核心代码示例:
const https = require('https');
const url = require('url');

exports.handler = (event, context, callback) => {
  const slackWebhook = process.env.SLACK_WEBHOOK_URL;
  const alarmMsg = JSON.parse(event.Records[0].Sns.Message);
  
  const slackContent = {
    text: `🚨 ALB后端ECS持续报错\n告警名: ${alarmMsg.AlarmName}\n当前状态: ${alarmMsg.NewStateValue}\n触发原因: ${alarmMsg.NewStateReason}\n持续时长: 10分钟`
  };

  const reqOpts = url.parse(slackWebhook);
  reqOpts.method = 'POST';
  reqOpts.headers = { 'Content-Type': 'application/json' };

  const req = https.request(reqOpts, (res) => {
    res.on('end', () => callback(null, '消息已发送到Slack'));
  });

  req.on('error', (err) => callback(`发送失败: ${err.message}`));
  req.write(JSON.stringify(slackContent));
  req.end();
};
  1. 在Lambda环境变量中配置SLACK_WEBHOOK_URL,并给Lambda添加SNS触发权限。

额外提示

  • CloudWatch Alarms支持配置“数据缺失”处理规则,避免因指标上报中断导致误告警。
  • 可以给告警设置“OK”状态通知,当应用恢复正常时也能同步到Slack。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:22:28