一、什么是Alertmanager
Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。
实现prometheus的告警,需要通过altermanager这个组件;在prometheus服务端写告警规则,在altermanager组件配置邮箱
Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack、dingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。
Alertmanager的工作机制
钉钉告警需要接入prometheus-webhook-dingtalk
二、下载Altermanager
1、本地下载后上传到linux服务器
官网下载地址:https://prometheus.io/download/
2、直接在linux服务器上wget方式下载
# 新建目录
mkdir -p /data/prometheus/alertmanager
# 进入目标目录
cd /data/prometheus/alertmanager
# 下载
wget -c https://github.com/prometheus/alertmanager/releases/download/v0.22.2/alertmanager-0.22.2.linux-amd64.tar.gz
# 解压
tar -vxzf alertmanager-0.22.2.linux-amd64.tar.gz
# 移动到安装目录
mv alertmanager-0.22.2.linux-amd64 /usr/local/alertmanager
# 进入目录
cd /usr/local/alertmanager
三、将Altermanager配置为系统服务
1、进入systemd目录
cd /usr/lib/systemd/system
2、创建文件
vim alertmanager.service
# 添加如下内容
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
3、生效系统systemd文件
systemctl daemon-reload
4、启动和停止服务命令
# 启动
systemctl start alertmanager.service
# 停止
systemctl stop alertmanager.service
四、启动Altermanager
# 进入解压后的文件夹
cd /data/prometheus/alertmanager/alertmanager-0.22.2.linux-amd64
# 前台启动
./alertmanager --config.file=alertmanager.yml
# 后台启动alertmanager,并且重定向输入日志到当前目录的alertmanager.out
nohup ./alertmanager --config.file=alertmanager.yml >> /data/prometheus/alertmanager/alertmanager-0.22.2.linux-amd64/alertmanager.out 2>&1 &
五、访问Altermanager
http://39.101.198.57:9093/,默认端口为 9093
六、altermanager.yml解读
global: # 即为全局设置,在 Alertmanager 配置文件中,只要全局设置配置了的选项,全部为公共设置,可以让其他设置继承,作为默认值,可以子参数中覆盖其设置。
resolve_timeout: 1m # 用于设置处理超时时间,也是生命警报状态为解决的时间,这个时间会直接影响到警报恢复的通知时间,需要自行结合实际生产场景来设置主机的恢复时间,默认是5分钟。
route: # 路由分组
group_by: ['alertname'] # 报警分组
group_wait: 10s # 组内等待时间,同一分组内收到第一个告警等待多久开始发送,目标是为了同组消息同时发送,不占用告警信息,默认30s。
group_interval: 10s # 当组内已经发送过一个告警,组内若有新增告警需要等待的时间,默认为5m,这条要确定组内信息是影响同一业务才能设置,若分组不合理,可能导致告警延迟,造成影响
repeat_interval: 1h # 告警已经发送,且无新增告警,若重复告警需要间隔多久,默认4h,属于重复告警,时间间隔应根据告警的严重程度来设置。
receiver: 'webhook'
routes:
# 接收器
- receiver: webhook # 路由和标签,根据match来指定发送目标,如果 rule的lable 包含 alertname, 使用 webhook 来发送
group_wait: 10s
match:
team: node
# 接收器指定发送人以及发送渠道
receivers:
# webhook分组的定义
- name: 'webhook'
# 钉钉配置
webhook_configs:
- url: http://localhost:8060/dingtalk/ops_dingding/send
send_resolved: true
参数 | 描述 |
| 发送警报的接收器名称 |
| 根据 prometheus 的 lables 进行报警分组,这些警报会合并为一个通知发送给接收器,也就是警报分组。 |
| 通过此设置来判断当前警报中是否有标签的labelname,等同于labelvalue。 |
| 通过正则表达式进行警报配置 |
group_wait: [<duration>] | default=30s,设置从接受警报到发送的等待时间,若在等待时间中group接收到新的警报信息,这些警报会合并为一条发送。 |
group_interval: [<duration>] | default=5m,此设置控制的是 group 之间发送警报通知的间隔时间。 |
repeat_interval: [<duration>] | default=4h,此设置控制的是警报发送成功以后,没有对警报做解决操作的话,状态 Firing 没有变成 Inactive 或者 Pending ,会再次发送警报的的间隔时间。 |
routes: - <route>... | 子路由的匹配设置 |