联系点是什么
联系点(Contact point)是告警通知的出口:一个目的地加一套凭据,例如一个 Slack 频道、一个 PagerDuty 集成 Key、一个邮件收件人列表或一个 Webhook URL。它只负责「怎么发出去」,不负责「什么时候轮到我发」——后者由通知策略的路由树决定(见通知策略与路由树)。一条路由最终必须落到且只落到一个联系点。
常用类型总表
| 类型 | 典型用途 | 关键配置 |
|---|---|---|
| 邮件通知,支持收件人列表与模板 | SMTP 参数(可在 grafana.ini 全局配) | |
| Slack | 发到频道或私信 | API Token(或 OAuth)、Channel |
| PagerDuty | 值班升级、电话/短信触达 | Integration Key、Routing URL |
| Webhook | 对接自建平台、ITSM、短信网关 | URL、HTTP 方法、可选 Header 鉴权 |
| 钉钉(DingDing) | 发到钉钉群机器人 | 机器人 Webhook 地址与加签密钥;也可退化为通用 Webhook 自写渲染 |
| Microsoft Teams / Google Chat / Telegram | 各 IM 群通知 | 各自 Bot/Connector 凭据 |
内置类型还有数十种(Opsgenie、Kafka、ServiceNow、VictoOps 等),在创建界面按关键词搜索即可。
创建流程
- 打开 Alerting → Contact points → Add contact point。
- 填 Name(唯一,路由策略引用它),选择 Integration type。
- 填写该类型的必填项,如 Slack 的 Token 与 Channel、Webhook 的 URL。
- (可选)展开 Custom message 区域,勾选自定义标题/正文,写入模板变量。
- 点击 Save contact point。
提示: 凭据类字段(Token、密码)保存后以掩码显示,下次编辑需重新填写,无法查看原文——这是设计使然,不是丢数据。
测试按钮
每个联系点详情页与列表行都有 Test 按钮,点击后 Grafana 构造一条测试通知直接发往该渠道,不经过规则与路由树。它验证的是「凭据与网络通不通」,验证不了路由是否会把真实告警送到这里,两者要分开排查。Webhook 类型本地快速验证可以起一个监听:
# 用 Python 起一个临时 HTTP 服务,把联系点 URL 指向它
python -m http.server 8000
# 或更直观地查看 POST 内容
nc -l 8000
Provisioning 中的联系点
文件即代码的管理方式(详见 Provisioning:配置即代码):
apiVersion: 1
contactPoints:
- orgId: 1
name: oncall-slack
receivers:
- uid: oncall_slack
type: slack
settings:
recipient: "#oncall"
注意: Slack Token、Webhook 密钥等敏感字段会被加密落库,不建议写明文进 provisioning 文件;常见做法是文件里只放非敏感参数,凭据在 UI 补齐,以你使用的版本实际支持范围为准。
消息里的模板变量
各类型的自定义消息字段支持 Go 模板语法,常用变量有 {{ .CommonLabels.alertname }}、{{ .Annotations.summary }}、{{ range .Alerts }} 等;Webhook 收到的是固定 JSON 载荷而非模板文本。语法细节与完整示例放在静默与通知模板一并讲。
常见坑
- 改名即断链:路由策略按名字引用联系点,重命名后记得同步更新所有路由。
- Slack 收不到消息:Token 对应的 Bot 没有被邀请进目标频道。
- Webhook 超时:对端处理慢会拖住整个通知队列,接收端应尽快返回 2xx、异步处理业务。