4、通知渠道配置:邮件、短信、企业微信、钉钉、Slack的接入方式

通知渠道,说白了就是告警的“最后一公里”。

你规则写得再好,阈值设得再准,如果消息送不到对的人手里,那一切都是白搭。我在项目里见过太多这样的场景:半夜数据库挂了,告警倒是触发了,结果钉钉群里没人看,邮件进了垃圾箱,最后是业务方打电话过来骂人……嗯,这种锅背一次就够了。

所以今天咱们就聊聊,RMC里怎么把这些渠道接进来,以及每个渠道我踩过的坑。

4.1 邮件通知:最传统,也最容易被忽略

邮件接入其实最简单。RMC支持SMTP协议,你只需要配好发件服务器就行。

我个人习惯用公司内部的邮件中继,而不是直接连公网的SMTP。为什么呢?因为公网容易被当成垃圾邮件拦截,尤其是告警邮件内容里带“error”、“critical”这些敏感词的时候。

核心配置项:

  • SMTP服务器地址与端口(465/587/25)
  • 发件人邮箱与密码(或授权码)
  • 是否启用SSL/TLS加密
  • 收件人列表(支持多个,用逗号分隔)
# RMC邮件配置示例
[notification.email]
enabled = true
smtp_host = "smtp.company.com"
smtp_port = 587
smtp_user = "alert@company.com"
smtp_pass = "your_auth_code"
use_tls = true
to_list = ["ops@company.com", "dev@company.com"]

注意:我曾经遇到过邮件队列积压的问题。告警一多,SMTP连接频繁建立,直接把邮件服务器搞挂了。后来我加了限流,每分钟最多发30封邮件,超出部分直接丢弃。别怕丢告警,真重要的告警不会只靠邮件。

4.2 短信通知:贵,但关键时刻能救命

短信这东西,平时用不上,但真出大事了,它是唯一能把你从被窝里拽起来的东西。

RMC对接短信一般走HTTP API。国内常用的有阿里云短信、腾讯云短信、七牛云等。每家接口大同小异,核心就是:签名、模板、手机号。

# 阿里云短信API调用示例(Python)
import requests

url = "https://dysmsapi.aliyuncs.com/"
params = {
    "PhoneNumbers": "13800138000",
    "SignName": "运维告警",
    "TemplateCode": "SMS_123456789",
    "TemplateParam": '{"code":"CRITICAL","service":"MySQL"}'
}
response = requests.post(url, data=params)

我的建议:短信只发给值班人,别全量发。全量发一次几百块,老板看到账单会找你喝茶的。我一般只在P0级告警才触发短信,P1及以下走邮件或IM就够了。

4.3 企业微信:国内运维的“标配”

企业微信的机器人接入,是我觉得最省心的方式。你想想看,建一个群,拉一个机器人,拿到Webhook地址,往里面POST一段JSON就完事了。

RMC里配置企业微信,其实就是配一个URL和消息模板。

# 企业微信机器人消息格式
{
    "msgtype": "markdown",
    "markdown": {
        "content": "## 🔴 告警通知\n" +
                   "**级别**: CRITICAL\n" +
                   "**服务**: {{.service_name}}\n" +
                   "**指标**: {{.metric}}\n" +
                   "**当前值**: {{.current_value}}\n" +
                   "**时间**: {{.timestamp}}"
    }
}

这里有个坑——企业微信机器人有频率限制。一个机器人每分钟最多发20条消息。我曾经在告警风暴时,消息全被限流丢了。后来我改了策略:相同告警合并发送,5分钟内只发一条聚合消息。

4.4 钉钉:跟企业微信类似,但细节不同

钉钉的接入方式也是Webhook。不过钉钉的签名验证比企业微信严格一点。你需要在RMC里配置加签密钥,否则消息发不出去。

# 钉钉机器人消息格式(带签名)
{
    "msgtype": "markdown",
    "markdown": {
        "title": "告警通知",
        "text": "#### 🔴 告警通知\n" +
                "- **级别**: CRITICAL\n" +
                "- **服务**: {{.service_name}}\n" +
                "- **指标**: {{.metric}}\n" +
                "- **当前值**: {{.current_value}}\n" +
                "- **时间**: {{.timestamp}}"
    }
}

钉钉 vs 企业微信,我个人的选择:

  • 如果公司用钉钉办公,那就用钉钉,别折腾
  • 如果公司用企微,那就企微
  • 如果两边都用?我建议统一走企微,因为企微的机器人管理更灵活

4.5 Slack:海外团队的首选

Slack的接入跟钉钉、企微几乎一样,也是Webhook。不过Slack的消息格式用的是Block Kit,更灵活,可以做成交互式按钮。

# Slack Block Kit 消息示例
{
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "🚨 *告警通知*\n服务: {{.service_name}}\n指标: {{.metric}}\n当前值: {{.current_value}}"
            }
        },
        {
            "type": "actions",
            "elements": [
                {
                    "type": "button",
                    "text": {"type": "plain_text", "text": "确认收到"},
                    "value": "ack_{{.alert_id}}"
                }
            ]
        }
    ]
}

说实话,Slack在国内用得不多。但如果你在跨国团队或者外企,这玩意儿是刚需。我记得有一次帮客户配Slack,他们要求告警消息里带一个“Acknowledge”按钮,点了之后自动在RMC里确认告警。这个用Block Kit的交互按钮就能实现,挺酷的。

4.6 多通道路由策略

渠道都配好了,接下来就是怎么用的问题。我个人习惯按告警级别做路由:

告警级别 通知渠道 说明
P0(严重) 短信 + 电话 + 企微/钉钉 必须立即响应,多渠道兜底
P1(高) 企微/钉钉 + 邮件 需要关注,但不至于半夜打电话
P2(中) 邮件 第二天上班处理即可
P3(低) 不通知,只记录 用于事后分析,别打扰人

避坑指南:我曾经把所有渠道都配成“全量发送”,结果P2告警一天发了上千条消息,企微群直接炸了,同事把我拉黑了。后来我加了“静默期”规则:同一个告警源,30分钟内重复触发不再发消息。效果立竿见影。

4.7 本章小结

通知渠道配置,说白了就是三个事:

  • 接进来:邮件配SMTP,IM配Webhook,短信配API
  • 分好级:别让P3告警吵醒值班的人
  • 控好频:限流、合并、静默期,一个都不能少

你想想看,如果这些没做好,告警系统再牛也没用。消息送不到,等于白干。

通知渠道配置核心逻辑 RMC 告警引擎 📧 邮件 (SMTP) 📱 短信 (HTTP API) 💬 企微/钉钉/Slack P0/P1/P2/P3 分级 限流 + 合并 + 静默期 值班人轮转 + 升级策略 ✅ 目标:告警必达,不骚扰,不遗漏
专注资料整理