告警模板是什么
告警规则的 labels 与 annotations 支持 Go 模板语法:用 $labels 取告警携带的标签值,用 $value 取触发时的指标数值,还可以套 humanize、humanizePercentage 等格式化函数把秒数与比例转成人类可读的形式。模板决定了通知正文的质量——同一条告警,写清实例、挂载点与当前值的通知,值班一眼就能判断要不要动手。
基本信息
| 适用范围 | Prometheus 告警规则与 Alertmanager 通知模板 |
|---|---|
| 常用变量 | $labels、$value、$externalLabels |
| 格式化函数 | humanize、humanizePercentage、humanizeDuration |
| 验证方式 | promtool test rules 校验模板渲染结果 |
典型使用场景
- 明确对象:在摘要里写清是哪台实例、哪个挂载点出问题
- 量化说明:把当前值按百分比或时长格式化后写进正文
- 跳转定位:注解里带 runbook_url 与看板链接
- 统一风格:团队共用一套模板,通知格式保持一致
- 多通道适配:同一份模板输出到 IM 与工单系统,避免重复维护
常用模板片段
常用模板片段
- alert: DiskSpaceLow
expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) > 0.9
for: 15m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} 磁盘使用率超过 90%"
description: "挂载点 {{ $labels.mountpoint }},当前使用率 {{ $value | humanizePercentage }}"
runbook_url: "https://wiki.example.com/runbook/disk-space"
dashboard_url: "https://grafana.example.com/d/node-overview"
# 校验:promtool test rules rules_test.yml常用函数与用途
| 函数或变量 | 作用 | 注意 |
|---|---|---|
| $labels | 取标签值(实例、服务、挂载点) | 标签不存在时渲染为空 |
| $value | 取触发时的指标值 | 多序列触发时逐条渲染 |
| humanize | 把大数字转成带单位的近似值 | 用于容量类指标 |
| humanizePercentage | 把比例转成百分数 | 输入需为 0 到 1 的比例 |
| humanizeDuration | 把秒数转成可读时长 | 用于耗时类指标 |
| $externalLabels | 取外部标签(集群、区域) | 跨集群告警时用于区分来源 |
humanizePercentage 期望输入是 0 到 1 的比例值;表达式本身已经是 0 到 100 的百分数时直接套用会渲染成夸张数字,先除 100 再格式化。
复杂模板要先用 promtool 的规则测试验证渲染结果:语法正确但输出为空是常见情况,本机测一遍比上线后从通知里发现更划算。
标签与注解的分工要分清:需要参与路由、抑制与静默的字段写在 labels 里,只供人阅读的说明写在 annotations 里;把大段说明塞进标签会抬高序列基数,还会让路由条件变得难以维护。