alertmanager

Prometheus的警报分为两个部分。Prometheus服务器中的警报规则将警报发送到Alertmanager。该Alertmanager 然后管理这些警报,包括沉默,抑制,聚集和通过的方法,如电子邮件发出通知,也可以通过webhook接入钉钉等国内IM工具。

设置警报和通知的主要步骤是:

alertmanager配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# vim /opt/alertmanager/config.yml
# 全局配置项
global:
resolve_timeout: 5m # 超时,默认5min
# 邮箱smtp服务
smtp_from: 'XXXX@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: ‘XXXX@qq.com'
# 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码
smtp_auth_password: 'passwd'
smtp_require_tls: false
smtp_hello: 'XXXX@qq.com'

# 邮件模板
templates:
- '/etc/alertmanager/*.tmpl'

# 路由
route:
group_by: ['alertname', 'cluster'] # 报警分组依据
group_wait: 20s # 组等待时间
group_interval: 20s # 发送前等待时间
repeat_interval: 12h #重复周期
receiver: 'email' # 默认警报接收者

# 警报接收者
receivers:
- name: 'email'
email_configs:
- to: 'weiqun_h@163.com' # 接收警报的邮件
send_resolved: true # 恢复后通知
html: '{{ template "email.to.html" . }}' # 邮件模板
headers: { Subject: " {{ .CommonLabels.instance }} {{ .CommonAnnotations.summary }}" } #标题

邮件模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# vim /opt/alertmanager/email.tmpl
{{ define "email.to.html" }}
# 这里 email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式,这里为了显示好看,采用 Html 格式简单显示信息
{{- if gt (len .Alerts.Firing) 0 -}}
{{ range .Alerts }}
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br> # 时间不需要改,改了时间不正常
{{ end }}{{ end -}}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{ range .Alerts }}
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}

{{- end }}

启动服务

1
# docker run -d --name alertmanager --net=host -v /opt/alertmanager:/etc/alertmanager -v /etc/localtime:/etc/localtime:ro docker.io/prom/alertmanager:v0.14.0

配置告警规则

1
2
3
4
5
6
7
8
9
10
# vim rules.yml
groups:
- name: rabbitmq-up
rules:
- alert: rabbitmq-up
expr: rabbitmq_node_up{job="rabbitmq"} == 0
for: 15s
annotations:
summary: "{{ $labels.name }} 已停止运行超过 15s!"
description: "{{$labels.name}} has been down"

该 rules 目的是监测 rabbitmq 是否存活,

expr 为 PromQL 表达式验证特定节点 job=”rabbitmq” 是否活着,

for 表示报警状态为 Pending 后等待 15s 变成 Firing 状态,一旦变成 Firing 状态则将报警发送到 AlertManager

prometheus配置

1
2
3
4
5
6
7
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "rules.yml"

测试报警

关闭rabbitmq测试报警

1
# systemctl stop rabbitmq-server.service

6523453

7432237

1
# systemctl start rabbitmq-server.service

Image