prometheus配置altermanager告警
一.告警简介
1.工作流程
prometheus收集监测的信息,通过prometheus.yml 文件中定义 rules 文件,rules 里包含告警信息
prometheus 把告警信息 push 给 altermanager,alertmanager 里定义收件人和发件人
altermanager 发送文件到邮箱或微信
2.告警生命周期
定期采集监控数据
定期扫描告警规则,发现告警发给 alertmanager,prometheus 页面能看到 alert ,状态为 pending
多次发送到 alertmanager,持续时长超过告警告警规则的 for 的 alert,prometheus 页面看到状态为 firing,准备发送
firing 状态的 alert 等待 group_interval 时间聚合发送
恢复正常后,警报状态重新变回 inactive
3.告警等级
Inactive: 什么都没发生
Pending:已触发阈值,但未满足告警持续时间
Firing:已触发阈值,并满足for定义的持续时间。告警发送给接受者
4.通知方式
webhook:web回调或者http服务的推送API接口
wechat:通过微信 API发送
sns:短信
Pushover :通过Pushover API发送
email:电子邮件
二. AlertManager组件
1.特性
prometheus是组件化工具,prometheus server只负责产生告警,并不会处理告警。 AlertManager组件就是用来处理和消费告警
Alertmanager定义告警机制,通过Slack,Email,wechat等发送警报
1.1 分组
当系统停机时,可能会成百上千的报警同时生成,这个时候就需要将这些告警信息分组了
分组:是指当出现问题时,Altermanager会收到一个单一的通知将同类型/同一种影响的短信合并为一条来发送
1.2. 抑制
抑制:是指当报警发出后,停止重复发送初始化警告引发其他错误的警告的机制
例如当警报被触发,通知整个性能不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知多个或多个问题不相关的其他警报。
1.3.沉默
沉默:是指在特定时间内不要发送告警信息,比如设置23点-08点不发送任何告警信息
三、二进制安装altermanager
下载官网
(1)创建工作目录
mkdir -pv /softwares
(2)解压altermanager
tar xf alertmanager-0.25.0.linux-amd64.tar.gz -C /softwares
(3)通知规则---邮件的方式-不使用模板
[root@xiaosun alertmanager-0.25.0.linux-amd64]# cat alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '1692****5@qq.com' #发件人邮箱
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '1692****5@qq.com' #发件人用户名
smtp_auth_password: 'aicgt*****hia' #邮箱授权码
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '1692****5@qq.com' #收件人邮箱
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
smtp_smarthost: 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_auth_password: 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
AlertManager 配置自定义邮件模板
具测试 模板并不生效
[root@xiaosun alertmanager-0.25.0.linux-amd64]# vim template/email.tmpl
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
这里定义的时间为go 语言的诞生时间!!!切记不能乱填
{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
调用模板
global:
.....
smtp_hello: 'qq.com'
# 调用模板
templates:
- '/softwares/alertmanager-0.25.0.linux-amd64/template/email.tmpl'
route:
group_by: ['alertname']
....
(4)运行altermanager服务
启动脚本
cat > /usr/lib/systemd/system/alertmanager.service << 'EOF'
[Unit]
Description=alertmanager
[Service]
Type=simple
ExecStart=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager --storage.path=/softwares/alertmanager-0.25.0.linux-amd64/data --config.file=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start alertmanager
systemctl status alertmanager
3、配置prometheus推送给altermanager:
(1)修改prometheus的配置文件
[root@xiaosun prometheus-2.37.6.linux-amd64]# vim prometheus.yml
...
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.0.0.108:9093
rule_files:
- "/softwares/prometheus-2.37.6.linux-amd64/rule/*.yml"
在实际环境中,告警规则肯定有很多,比如对服务器异常进行告警,就有宕机、CPU使用率超过100%、内存使用率超过80%、硬盘使用率超过80%等等
最好创建一个文件夹,针对每个监控对象,创建一个配置文件。
告警规则配置在独立的文件中,文件格式为yml,并在prometheus.yml文件的rule_files模块中进行引用,prometheus启动时,会在rule_files定义的文件或目录下查找规则配置文件并加载
(2)编写prometheus的规则文件
[root@xiaosun prometheus-2.37.6.linux-amd64]# mkdir rule
# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:
# name:组名。报警规则组名称
- name: alters
# rules:定义规则
rules:
# alert:告警规则的名称
- alert: NodeMemoryUsage
# expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
expr: 100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 20
# for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
for: 1m
# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
labels:
# severity: 指定告警级别。有三种等级,分别为warning、critical和emergency。严重等级依次递增。
severity: emergency
# annotations: 附加信息,比如用于描述告警详细信息的文字等
# annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
annotations:
# summary描述告警的概要信息
# description用于描述告警的详细信息。
summary: "内存使用过高"
description: "{{ $labels.instance }} 内存使用大于 80% (当前值: {{ $value }})"
例子
[root@xiaosun prometheus-2.37.6.linux-amd64]# vim rule/rules.yml
groups:
- name: container-runtime
rules:
- alert: container-10.0.0.108
expr: up{instance="10.0.0.108:9100", job="node_exporter_108"} == 0
for: 15s
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
- alert: container-容器挂啦-2023
expr: up{instance="10.0.0.109:9100", job="node_exporter_109"} == 0
for: 5s
annotations:
summary: "Duang~ {{ $labels.instance }} 已停止运行超过 15s!"
(3)重启prometheus server服务
[root@xiaosun prometheus-2.37.6.linux-amd64]# systemctl restart prometheus