Prometheus告警模板详解

目的

之前配置告警之后,可以发送告警信息.但对于数据具体的结构信息,在模板中数据读取都比较懵.原因是不太清除警报都提供了哪些数据,除了我们设置的信息,还有没有其他的信息.

告警数据结构

官方docs

推送数据结构:

Alerts数据

KV数据的处理方式

KV结构很简单,键值对.通过键获取对应的值.下面提供了一些方法处理这种结构的一些方法.

字符串相关方法

警报提供的数据是通过GO模板解析的,GO模板的功能通过GO模板文档可以了解.

下面提供了一些处理字符串的方法:

微信通知的DEMO

上图中是微信接受的通知,下面展示通知模板的代码.

{{- define "_alert_list" -}}
{{- range .Alerts.Firing -}}
-----------------------
告警类型:{{ .Labels.alertname }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end -}}
---------结束-----------------
{{- end -}}

{{- define "_resolve_list" -}}
{{- range .Alerts.Resolved -}}
**************************
告警类型:{{ .Labels.alertname }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end -}}
************结束*****************
{{- end -}}


{{- define "wechat.message" -}}
{{- if and (gt (len .Alerts.Firing) 0) (gt (len .Alerts.Resolved) 0) -}}
告警数量:{{.Alerts.Firing | len}}
告警设备:{{ .GroupLabels.server}}
{{ template "_alert_list" . }}
====================================
告警恢复:{{len .Alerts.Resolved}}
告警设备:{{ .GroupLabels.server}}
{{ template "_resolve_list" . }}
{{- else -}}
  {{- if gt (len .Alerts.Firing) 0 -}}
告警数量:{{.Alerts.Firing | len}}
告警设备:{{ .GroupLabels.server}}  
{{ template "_alert_list" . }}
  {{- end -}}
  {{- if gt (len .Alerts.Resolved) 0 -}}
告警恢复:{{len .Alerts.Resolved}}
告警设备:{{ .GroupLabels.server}}
{{ template "_resolve_list" . }}
  {{- end -}}
{{- end -}}
{{- end -}}

其中告警设备 server 这个标签是自定义的.如果没有可以删除此行或根据自己标签定义.