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


    一、通知模版介绍

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

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

    需要懂点 go

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

    1 数据 Data

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

    名称类型说明
    Receiverstring定义将向其发送通知的接收方名称
    Statusstring警报的状态。触发 (firing),或者 解决 resolved。
    AlertsAlert此组中所有警报对象的列表
    GroupLabelsKV这些警报的分组标签,就是 group_by 数组中的标签。
    CommonLabelsKV所有警报的公用标签。
    CommonAnnotationsKV所有警报的通用注释集。用于有关警报的更长的附加信息字符串。
    ExternalURLstring部署 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'
      
      • 1
      • 2
      • 3
      • 4

      这样使用

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

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

      {{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}
      {{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}
      
      • 1
      • 2

    2 告警 Alert

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

    3 KV

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

    go 语言示意代码

    type KV map[string]string
    
    • 1

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

    {
      summary: "alert summary",
      description: "alert description",
    }
    
    • 1
    • 2
    • 3
    • 4

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

    KV 的方法

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

    4 方法

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

    字符串的功能

    功能名称可传递的参数返回值
    titlestringstrings.Title, 将每个单词的首字母大写。
    toUpperstringstrings.ToUpper, 全部转为大写
    toLowerstringstrings.ToLower, 全部转为小写
    trimSpacestringstrings.TrimSpace,. 删除两端的空格、Tab 或回车等空白字符
    matchpattern, stringRegexp.MatchString. 使用Regexp匹配字符串。
    reReplaceAllpattern, replacement, textRegexp.ReplaceAllString Regexp替换,未固定。
    joinsep string, s []stringstrings.Join, 将一个字符串的切片 s 中的每个元素拼接成一个字符串。
    safeHtmltext stringhtml/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}}
    
    
    • 1
    • 2

    在 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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【蓝桥杯单片机入门记录】动态数码管
    公众号留言插件有哪些?有哪些好用的小程序?
    中国石油大学(北京)-《 渗流力学》第二阶段在线作业
    C语言—贪吃蛇(链表)超详解
    java使用策略模式优化代码中的if-else if 判断。
    统计单词数量(文件)(*)
    S7-200 SMART PLC 多段曲线控温(带暂停、段搜索、跳段等功能)
    Java中的ThreadPoolExecutor
    RK3399驱动开发 | 13 - AP6356 SDIO WiFi 调试(基于linux4.4.194内核)
    3D 世界的钥匙「GitHub 热点速览 v.22.08」
  • 原文地址:https://blog.csdn.net/qq_22648091/article/details/132806122