Alertmanager邮箱和企业微信的告警模板分享

  • 前言
  • 效果展现
  • ■ 邮箱
  • ■ 企业微信
  • 模板
  • ■ 邮箱 —— email.tmpl
  • ■ 企业微信 —— wechat.tmpl
  • 告警规则例子
  • 最后


前言

Prometheus监控功能十分强大,上手很快,而且是轻量级的。监控面板可以通过Grafana来展现,撘过ELK的都明白Kibana绘图是多么费劲,而Grafana社区提供非常丰富的仪表盘模板,引入十分轻松。至于告警可以借助Alertmanager来实现。在此分享一下Alertmanager邮箱和企业微信的告警模板。

效果展现

■ 邮箱

① 告警

zabbix 企业微信应用告警配置 告警通知 企业微信_Alertmanager


② 消警

zabbix 企业微信应用告警配置 告警通知 企业微信_Alertmanager_02

■ 企业微信

zabbix 企业微信应用告警配置 告警通知 企业微信_运维_03

模板

■ 邮箱 —— email.tmpl

{{ define "email.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}
<h2>告警</h2>
<table border="5">
    <tr><td>报警项</td>
        <td>实例</td>
        <td>报警详情</td>
        <td>报警级别</td>
        <td>开始时间</td>
    </tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td>
            <td style="color:#32CD32" >{{ index $alert.Labels "instance" }}</td>
            <td>{{ index $alert.Annotations "description" }}</td>
            <td>{{ $alert.Labels.severity }}</td>
            <td style="color:#FF7F50">{{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }}</td>
        </tr>
    {{ end }}
</table>
{{ end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
<h2>已经恢复</h2>
<table border="5">
    <tr><td>报警项</td>
        <td>实例</td>
        <td>报警详情</td>
        <td>报警级别</td>
        <td>开始时间</td>
		<td>恢复时间</td>
    </tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td>
            <td style="color:#32CD32">{{ index $alert.Labels "instance" }}</td>
            <td>{{ index $alert.Annotations "description" }}</td>
            <td>{{ $alert.Labels.severity }}</td>
            <td style="color:#FF7F50">{{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }}</td>
            <td style="color:#FF7F50">{{ $alert.EndsAt.Local.Format "2006-01-02 15:04:05" }}</td>
        </tr>
    {{ end }}
</table>
{{ end }}{{- end }}

■ 企业微信 —— wechat.tmpl

{{ define "wechat.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
# 报警项: {{ $alert.Labels.alertname }}
{{- end }}
> `**===告警详情===**` 
> 告警级别: {{ $alert.Labels.severity }}
> 告警详情: <font color="comment">{{ index $alert.Annotations "description" }}{{ $alert.Annotations.message }}</font>
> 故障时间: <font color="warning">{{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }}</font>
> 故障实例: <font color="info">{{ $alert.Labels.instance }}</font>
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
# 恢复项: {{ $alert.Labels.alertname }}
{{- end }}
> `**===恢复详情===**` 
> 告警级别: {{ $alert.Labels.severity }}
> 告警详情: <font color="comment">{{ index $alert.Annotations "description" }}{{ $alert.Annotations.message }}</font>
> 故障时间: <font color="warning">{{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }}</font>
> 恢复时间: <font color="warning">{{ $alert.EndsAt.Local.Format "2006-01-02 15:04:05" }}</font>
> 故障实例: <font color="info">{{ $alert.Labels.instance }}</font>
{{- end }}
{{- end }}
{{- end }}

告警规则例子

groups:
- name: node_export_up
  rules:
  - alert: 存在监控节点下线
    expr: up < 1
    for: 10s    # 当一个监控项超过了阀值时,这个告警处于pengding状态,而pending状态维持for秒以后,就会切换为fire状态,也就是将告警信息发送给了alertmanager
    labels:
      severity: 可空闲处理
      action: text
      kind: node_export
    annotations:
      summary: "{{ $labels.instance }} 已停止运行!"
      last: "{{ $value }}"
      description: "{{ $labels.instance }} 检测到异常停止!请及时处理!!!"
- name: redis_up
  rules:
  - alert: redis节点挂了
    expr: redis_up < 1
    for: 10s    # 当一个监控项超过了阀值时,这个告警处于pengding状态,而pending状态维持for秒以后,就会切换为fire状态,也就是将告警信息发送给了alertmanager
    labels:
      severity: 应及时处理
      action: text
      kind: node_export
    annotations:
      summary: "{{ $labels.instance }} 已停止运行!"
      last: "{{ $value }}"
      description: "{{ $labels.instance }} 检测到异常停止!请及时处理!!!"
- name: mysql_up
  rules:
  - alert: mysql挂了
    expr: mysql_up < 1
    for: 10s    # 当一个监控项超过了阀值时,这个告警处于pengding状态,而pending状态维持for秒以后,就会切换为fire状态,也就是将告警信息发送给了alertmanager
    labels:
      severity: 紧急处理
      action: text
      kind: node_export
    annotations:
      summary: "{{ $labels.instance }} 已停止运行!"
      last: "{{ $value }}"
      description: "{{ $labels.instance }} 检测到异常停止!请及时处理!!!"
  - alert: mysql慢sql太多
    expr: rate(mysql_global_status_slow_queries[1m]) > 0.15
    for: 10s    # 当一个监控项超过了阀值时,这个告警处于pengding状态,而pending状态维持for秒以后,就会切换为fire状态,也就是将告警信息发送给了alertmanager
    labels:
      severity: 紧急处理
      action: text
      kind: node_export
    annotations:
      summary: "{{ $labels.instance }} 慢sql太多!"
      last: "{{ $value }}"
      description: "{{ $labels.instance }} 检测到异常!请及时处理!!!"

最后

如此即可实现可观的告警。