Files
hms/docker/alertmanager
iven 984fca627b fix(docker): B1 alertmanager 告警渠道接线 ALERT_WEBHOOK_URL 环境变量注入
- config.yml url 写死 placeholder.invalid -> ${ALERT_WEBHOOK_URL}
- compose alertmanager 补 environment 注入(评估漏检:虽有 --config.expand-env=true 但容器内无变量可展开)
- 未配置时 fallback 占位 url 保 MVP 链路可启动(fail-fast 优于静默盲飞)
- .env.production.example 补 ALERT_WEBHOOK_URL 模板
- 上线评估 B1 代码层修复,真实 webhook 由 staging 填入
2026-06-26 15:18:43 +08:00
..

Alertmanager 告警通知配置

PP-04 可观测性。当前 config.yml 使用占位 webhookhttp://placeholder.invalid/alert),告警会 POST 失败但记日志。 上线前必须替换为真实通知渠道,否则 11 条告警规则触发了也没人收到。

alertmanager 已启用 --config.expand-env=true,支持 ${VAR} 从环境变量展开。

方案 A钉钉 / 企业微信 webhook推荐

  1. config.yml 的 receiver 改为环境变量引用:

    receivers:
      - name: "default"
        webhook_configs:
          - url: "${ALERT_WEBHOOK_URL}"
            send_resolved: true
    
  2. .env(不入 git

    # 钉钉机器人
    ALERT_WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=XXX
    # 或企业微信群机器人
    # ALERT_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX
    

token 必须放 .env,不能写进 config.ymlgit 追踪)——避免重蹈 PP-03 Redis 密码明文泄露覆辙。

方案 B邮件 SMTP

global:
  smtp_smarthost: "smtp.exmail.qq.com:465"
  smtp_from: "alert@hms.example.com"
  smtp_auth_username: "alert@hms.example.com"
  smtp_auth_password: "${SMTP_PASSWORD}"
receivers:
  - name: "default"
    email_configs:
      - to: "ops@hms.example.com"
        send_resolved: true

.envSMTP_PASSWORD=...

验证

部署后用 Alertmanager API 触发测试告警:

curl -XPOST http://<host>:9093/api/v2/alerts \
  -H "Content-Type: application/json" \
  -d '[{"labels":{"alertname":"test","severity":"critical"}}]'

应收到渠道通知(钉钉/企微/邮件。Alertmanager UIhttp://<host>:9093

当前路由策略

  • alertname + service 分组
  • severity=criticalDB 宕机/5xx 飙升/Redis 不可达即时通知5 分钟重复
  • 其他告警 30s 聚合4 小时重复