AlertManager 简介
Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,然后我们的AlertManager就来管理这些报警信息,包括silencing、inhibition,聚合报警信息过后通过email、PagerDuty、HipChat、Slack 等方式发送消息提示。
-
让AlertManager提供服务总的来说就下面3步:
- 安装和配置AlertManger
- 配置Prometheus来和AlertManager通信
- 在Prometheus中创建报警规则
-
prometheus报警触发流程
- prometheus采集数据
- 判断当前数据指标有没有到达阈值
- 如果触发,根据配置文件中的for字段判断持续时间
- 是的话发送给alertmanager
- alertmanager经过
- 分组
- 抑制
- 静默等一些列处理流程
- 发送给指定的接收器, 如:邮件、微信等
部署AlertManager
wget https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-amd64.tar.gz
tar xvf alertmanager-0.17.0.linux-amd64.tar.gz
mv alertmanager-0.17.0.linux-amd64 /usr/local/alertmanager
cd /usr/local/alertmanager/
配AlertManager
# 编辑主配置文件
vim /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m #解析的超时时间
smtp_smarthost: 'smtp.163.com:25' #邮箱smtp地址
smtp_from: 'USERNAME@163.com' #来自哪个邮箱发出的
smtp_auth_username: 'USERNAME@163.com' #邮箱的用户名
smtp_auth_password: 'PASSWORD' #这里是邮箱的授权密码,不是登录密码
smtp_require_tls: false #是否启用tls
route: #设置报警的分发策略,通过route实现告警的分配,所有的报警都会发送到mail这个接收器中
group_by: ['alertname'] #采用哪个标签进行分组
group_wait: 60 #分组等待的时间为10秒,收到报警后并不是马上发送出去,看看还有没有alertname这个标签的报警发过来,如果有的话,一起发出报警
group_interval: 60 #上一组报警与下一组报警的间隔时间为10秒
repeat_interval: 24h #重复报警时间
receiver: 'mail'
receivers: #报警接收人
- name: 'mail' #谁来接收这个报警
email_configs: #email的配置
- to: 'misterbyj@163.com' #报警接收人的邮件地址
send_resolved: true #发送恢复通知
inhibit_rules: #抑制规则,报警抑制角色,用于报警收敛,发送关键报警
- source_match: #匹配我这个报警发生后,其它报警被抑制掉,
severity: 'critical' #报警级别为critical
target_match: #其它报警
severity: 'warning' #报警级别为warning
equal: ['alertname', 'dev', 'instance'] #对哪些报警进行抑制,要匹配这里的标签
# 检查alertmanager.yml配置文件是否正确
/usr/local/alertmanager/amtool check-config /usr/local/alertmanager/alertmanager.yml
# 生成服务文件
cat > /usr/lib/systemd/system/alertmanager.service << EOF
[Unit]
Description=prometheus
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager
ps -ef|grep alertmanager
alertmanager与prometheus集成
- prometheus与alertmanager通信
- 在prometheus server上定义监控规则
- 当监控的阈值超过定义的阈值后会发送报警
- 推送报警规则给alertmanager
- 通过alertmanager的流程处理发送给报警接收人
# 创建报警规则目录
mkdir -p /usr/local/prometheus/rules
vim /usr/local/prometheus/prometheus.yml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
rule_files:
- "rules/*.yml" #报警规则存放文件夹
配置监控实例,监控job的状态
vim /usr/local/prometheus/rules/unreachable.yml
groups:
- name: general.rules #同性质的一组报警,监控当前节点的指标的组名称
rules:
- alert: InstanceDown
expr: up == 0 #每一个实例都会有一个up的状态,up是默认赋予被监控端的一个指标,0为失败状态,1为存活状态
for: 1m #当前报警的持续时间,1分钟之内如果都是up == 0的状态,才会发出报警
labels: #设置报警级别
severity: error #报警级别为error级别
annotations: #注释信息
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
kill -hup `ps -ef |grep prometheus|grep -v grep|awk '{print $2}'`
报警状态
-
报警状态
- inactive-已收到报警
- pending-已经触发报警阈值,但未满足告警持续时间 #/usr/local/prometheus/rules/unreachable.yml 中设置的for时间
- firing-已触发阈值,且满足报警持续时间,将报警发送给报警接收者
-
报警的触发流程
- 第一次发现expr: up == 0,prometheus此时将报警状态设置为inactive
- 第二次发现expr: up == 0,prothemeus不会立即通知alertmanager,要等待for: 1m的持续时间,如果1分钟后还是expr: up == 0的状态,prometheus会将pending状态变更为firing状态,变为firing状态时,prometheus将通知alertmanager发送报警
- 发送报警的时间取决于数据采集时间+报警评估时间
报警邮件
恢复邮件
报警收敛-静默
静默是一种简单的特定时间的静音提醒机制,使用标签来匹配这一批是不发送的
添加静默
http://192.168.21.37:9093/#/alerts
右上角-->new silence-->start开始时间-->end结束时间-->matchers匹配
-->name匹配名称-->填写job-->value值-->填写linux-node-->
creator名称-->填写静默名称-->点击create
作用
阻止预期的报警,通常是在系统上线或维护阶段使用