Prometheus-Alertmanager 警报管理器-通知模版

文章目录

  • 一、通知模版介绍
  • 二、模板中可用的数据结构
    • 1 数据 Data
    • 2 告警 Alert
    • 3 KV
    • 4 方法
  • 三、定义可重用模版

一、通知模版介绍

发送给接收方的通知是通过模板构建的。警报管理器附带默认模板,但也可以自定义它们。 为避免混淆,请务必注意,警报管理器模板与 Prometheus 中的模板不同,但 Prometheus 模板还包括警报规则标签/注释中的模板。

警报管理器的通知模板基于 Go 模板系统。 请注意,某些字段被评估为文本,而其他字段则被评估为 HTML,这将影响转义。

需要懂点 go

二、模板中可用的数据结构

1 数据 Data

数据是传递给通知模板和webhook推送的结构

名称 类型 说明
Receiver string 定义将向其发送通知的接收方名称
Status string 警报的状态。触发 (firing),或者 解决 resolved。
Alerts Alert 此组中所有警报对象的列表
GroupLabels KV 这些警报的分组标签,就是 group_by 数组中的标签。
CommonLabels KV 所有警报的公用标签。
CommonAnnotations KV 所有警报的通用注释集。用于有关警报的更长的附加信息字符串。
ExternalURL string 部署 Alertmanager 时候使用 --web.external-url 的值,一般用于查看告警的图形化展示页面,设置为 Grafana的地址。
  • GroupLabels 示例
    假设配置中配置了分组 group_by: [alertname, app]
    那么可以这样使用 {{ .GroupLabels.app }} , {{ .GroupLabels.alertname }}

  • CommonLabels 示例
    假设配置中设置了 annotations:

        ...
        annotations:
          description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
          summary: 'Instance {{ $labels.instance }} down'
    

    这样使用

    {{ .CommonAnnotations.summary }}  {{ .CommonAnnotations.description }}
    
  • Alerts 包含的所有的警报
    Alerts.Firing 返回此组中当前正在处于 firing 警报对象的列表
    Alerts.Resolved 返回此组中已解决的警报对象的列表

    还可以利用循环所有的警报,打印出每个警报的 注释信息。

    {{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}
    {{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}
    

2 告警 Alert

名称 类型 说明
Status string 定义警报的状态是已解决 (resolved)还是当前正在触发(currently firing)。
Labels KV 要附加到警报的一组标签。
Annotations KV 警报的一组注释
StartsAt time.Time 警报开始触发(firing)的时间。如果忽略,则当前时间由Alertmanager分配。
EndsAt time.Time 仅当警报的结束时间已知时设置。否则,设置为自上次收到警报以来的可配置超时时间。
GeneratorURL string 一个反向链接,用于识别此警报的原因实体。
Fingerprint string 可用于识别警报的指纹。

3 KV

KV 是一组用于表示标签和注释的键/值字符串对。

go 语言示意代码

type KV map[string]string

如下是包含了两个注释的 annotation 示例:

{
  summary: "alert summary",
  description: "alert description",
}

除了直接访问存储为KV的数据(标签和注释)外,还有排序、删除和查看LabelSet的方法:

KV 的方法

Name Arguments Returns Notes
SortedPairs - Pairs (list of key/value string pairs.) 返回键/值对的排序列表。
Remove []string KV 返回没有给定键的 key/value 映射的副本。
Names - []string 返回LabelSet中标签名称的所有名称。
Values - []string 返回LabelSet中值的列表。

4 方法

方法是针对某种类型数据的,在模板中可以直接使用或者用 | 方法名称 的方式使用。

字符串的功能

功能名称 可传递的参数 返回值
title string strings.Title, 将每个单词的首字母大写。
toUpper string strings.ToUpper, 全部转为大写
toLower string strings.ToLower, 全部转为小写
trimSpace string strings.TrimSpace,. 删除两端的空格、Tab 或回车等空白字符
match pattern, string Regexp.MatchString. 使用Regexp匹配字符串。
reReplaceAll pattern, replacement, text Regexp.ReplaceAllString Regexp替换,未固定。
join sep string, s []string strings.Join, 将一个字符串的切片 s 中的每个元素拼接成一个字符串。
safeHtml text string html/template.HTML, 将字符串标记为不需要自动转义的HTML。
stringSlice …string 返回一个字符串的切片。

三、定义可重用模版

可以提供一个包含命名模板的文件,然后由 Alertmanager 加载这些模板,这样可以编写可跨行的、更复杂的模版。

假设创建一个文件 /etc/alertmanager/template/myorg.tmpl ,并在其中创建一个名为“slack.myorg.txt”的模板:

{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}

在 alertmanager.yml 配置文件中引用并使用命名模板:

global:
  slack_api_url: ''

route:
  receiver: 'slack-notifications'
  group_by: [alertname, datacenter, app]

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'
    text: '{{ template "slack.myorg.text" . }}'

templates:
- '/etc/alertmanager/templates/myorg.tmpl'

你可能感兴趣的:(prometheus,javascript,数据库)