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告警吵醒值班的人
- 控好频:限流、合并、静默期,一个都不能少
你想想看,如果这些没做好,告警系统再牛也没用。消息送不到,等于白干。