Prometheus 创建并发送告警到 Alertmanager,然后 Alertmanager 根据标签将通知发送到不同的接收器。接收器可以是多种集成之一,包括:Slack、PagerDuty、电子邮件,或通过通用 webhook 接口的自定义集成。
发送给接收器的通知通过模板构建。Alertmanager 自带默认模板,但也可以自定义。为避免混淆,需要注意的是 Alertmanager 模板与 Prometheus 中的模板不同,不过 Prometheus 模板也包括告警规则标签/注解中的模板。
Alertmanager 的通知模板基于 Go 模板系统。请注意,某些字段作为文本评估,其他字段作为 HTML 评估,这将影响转义处理。
数据结构
Data
Data 是传递给通知模板和 webhook 推送的结构。
| 名称 | 类型 | 说明 |
|---|---|---|
| Receiver | string | 定义通知将发送到的接收器名称(slack、email 等)。 |
| Status | string | 如果至少有一个告警正在触发则定义为 firing,否则为 resolved。 |
| Alerts | Alert | 此组中所有告警对象的列表(见下文)。 |
| GroupLabels | KV | 这些告警分组依据的标签。 |
| CommonLabels | KV | 所有告警共有的标签。 |
| CommonAnnotations | KV | 所有告警共有的注解集合。用于关于告警的更长附加信息字符串。 |
| ExternalURL | string | 返回发送通知的 Alertmanager 的链接。 |
Alerts 类型暴露了用于过滤告警的函数:
Alerts.Firing返回此组中当前正在触发的告警对象列表Alerts.Resolved返回此组中已解决的告警对象列表
Alert
Alert 持有一个用于通知模板的告警。
| 名称 | 类型 | 说明 |
|---|---|---|
| Status | string | 定义告警是已解决还是当前正在触发。 |
| Labels | KV | 附加到告警的标签集合。 |
| Annotations | KV | 告警的注解集合。 |
| StartsAt | time.Time | 告警开始触发的时间。如果省略,Alertmanager 将分配当前时间。 |
| EndsAt | time.Time | 仅在告警的结束时间已知时设置。否则设置为自上次收到告警以来的可配置超时期限。 |
| GeneratorURL | string | 标识此告警触发实体的回链。 |
| Fingerprint | string | 可用于标识告警的指纹。 |
KV
KV 是一组键/值字符串对,用于表示标签和注解。
type KV map[string]string
包含两个注解的注解示例:
{
summary: "alert summary",
description: "alert description",
}
除了直接访问存储为 KV 的数据(标签和注解)外,还有用于排序、删除和查看 LabelSet 的方法:
KV 方法
| 名称 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| SortedPairs | - | Pairs(键/值字符串对列表。) | 返回排序后的键/值对列表。 |
| Remove | []string | KV | 返回不包含给定键的键/值映射副本。 |
| Names | - | []string | 返回 LabelSet 中标签名称的名称。 |
| Values | - | []string | 返回 LabelSet 中值的列表。 |
函数
注意 Go 模板也提供了默认函数。
字符串
| 名称 | 参数 | 描述 |
|---|---|---|
| append | slice []any, args ...any | 返回一个新的切片,将提供的参数追加到提供的切片中。 |
| date | string, time.Time | 返回指定格式的时间文本表示。格式文档请参阅 pkg.go.dev/time。 |
| dict | values ...any | 返回从可变参数键值对列表构建的 string 到 any 的映射。参数数量必须为偶数,键必须为字符串。 |
| humanizeDuration | number or string | 返回表示持续时间的人类可读字符串,以及可能发生的错误。 |
| join | sep string, s []string | strings.Join,连接 s 的元素创建单个字符串。分隔符字符串 sep 放置在结果字符串的元素之间。(注意:为方便模板中的管道操作,参数顺序已反转。) |
| list | ...any | 将传递的参数作为接口切片返回。 |
| match | pattern, string | Regexp.MatchString。使用正则表达式匹配字符串。 |
| reReplaceAll | pattern, replacement, text | Regexp.ReplaceAllString 正则替换,非锚定。 |
| safeHtml | text string | html/template.HTML,标记字符串为不需要自动转义的 HTML。 |
| safeUrl | text string | html/template.URL,标记字符串为不需要自动转义的 URL。 |
| since | time.Time | time.Since,返回从提供的时间到当前系统时间经过了多长时间的持续时间。 |
| stringSlice | ...string | 将传递的字符串作为字符串切片返回。 |
| title | string | strings.Title,将每个单词的首字符大写。 |
| toJson | any | json.Marshal,返回值的 JSON 编码。 |
| toLower | string | strings.ToLower,将所有字符转换为小写。 |
| toUpper | string | strings.ToUpper,将所有字符转换为大写。 |
| trimSpace | string | strings.TrimSpace,删除前后空白字符。 |
| tz | string, time.Time | 返回指定时区的时间。例如 Europe/Paris。 |
| urlUnescape | text string | url.QueryUnescape,解码 % 编码的 URL |