Prometheus配合AlertManager实现告警监控
一、AlertManager简介
AlertManager和Prometheus Server一样,均采用Golang实现。并且没有第三方依赖。
1.1 安装
# 解压
tar -zxvf alertmanager-0.20.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.20.0.linux-amd64/ /usr/local/alertmanager-0.20
# 创建软链接
ln -s /usr/local/alertmanager-0.20/ /usr/local/alertmanager
1.2 注册到系统服务
vi /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager System
Documentation=alertmanager System
[Service] ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
检查语法
[root@bigdata01 alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml' SUCCESS
Found:
- global config
- route
- 1 inhibit rules
- 1 receivers
- 0 templates
二、配置邮件告警
2.1 创建告警邮件模板
# 配置告警恢复和告警email模板
vi /usr/local/alertmanager/email.tmpl
{{ define "email.to.html"}}
{{ if gt (len .Alerts.Firing) 0 }}{{ range .Alerts }}
@告警
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt }} <br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}{{ range .Alerts }}
@恢复:
告警主机:{{ .Labels.instance }} <br>
告警主题:{{ .Annotations.summary }} <br>
恢复时间: {{ .EndsAt }} <br>
{{ end }}
{{ end }}
{{ end }}
2.2 修改配置文件使用模板
vi /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: 'xxxx@qq.com'
smtp_auth_username: 'xxxxx@qq.com'
# smtp_auth_password是邮箱授权码
smtp_auth_password: 'xxxxxx'
smtp_require_tls: false
templates:
- '/usr/local/alertmanager/email.tmpl'
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'xxxxx@qq.com'
html: '{{template "email.to.html".}}'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
2.3 修改prometheus配置文件
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.64.101:9093
定义告警文件
rule_files:
- rules/*.yml
2.4 编写告警规则
cd /usr/local/prometheus
mkdir rules
cd rules/
vi host_monitor.yml
groups:
- name: node-up
rules:
- alert: node-up
expr: up{job="host_monitor"} == 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{$labels.instance}}Instance has been down for more than 5 minutes"
此时,停止node_exporter服务。使得up{job="host_monitor"} == 0
,触发服务。
# alert:告警规则的名称。
# expr:基于 PromQL 表达式告警触发条件,用于计算是否有时间序列满足该条件。
# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在 等待期间新产生告警的状态为 pending。# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
# annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations 的内容在告警产生时会一同作为参数发送到 Alertmanager。
# summary 描述告警的概要信息,description 用于描述告警的详细信息。
# 同时 Alertmanager 的 UI 也会根据这两个标签值,显示告警信息。
状态说明 Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。
- Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
- Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所 以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
- Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警 报解除,则将状态转到 Inactive,如此循环。
当从Pending状态,转变为Firing状态,即触达到ALertManager,推送邮件信息。
随后,启动node_exporter服务。Prometheus Alert 告警状态变为Inactive。收到恢复邮件通知。