一、什么是Alertmanager

Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。

实现prometheus的告警,需要通过altermanager这个组件;在prometheus服务端写告警规则,在altermanager组件配置邮箱

Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack、dingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。

Alertmanager的工作机制

grafana 配置钉钉报警 alertmanager 钉钉告警_grafana 配置钉钉报警


钉钉告警需要接入prometheus-webhook-dingtalk


二、下载Altermanager

1、本地下载后上传到linux服务器


官网下载地址:https://prometheus.io/download/




grafana 配置钉钉报警 alertmanager 钉钉告警_grafana 配置钉钉报警_02


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

grafana 配置钉钉报警 alertmanager 钉钉告警_运维_03

三、将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

grafana 配置钉钉报警 alertmanager 钉钉告警_grafana 配置钉钉报警_04

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

grafana 配置钉钉报警 alertmanager 钉钉告警_运维_05

六、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

参数

描述

receiver: <string>

发送警报的接收器名称

group_by: ['label_name1,...']

根据 prometheus 的 lables 进行报警分组,这些警报会合并为一个通知发送给接收器,也就是警报分组。

match: [ <label_name>: <labelvalue>,...]

通过此设置来判断当前警报中是否有标签的labelname,等同于labelvalue。

match_re: [<label_name>: <regex>,...]

通过正则表达式进行警报配置

group_wait: [<duration>]

default=30s,设置从接受警报到发送的等待时间,若在等待时间中group接收到新的警报信息,这些警报会合并为一条发送。

group_interval: [<duration>]

default=5m,此设置控制的是 group 之间发送警报通知的间隔时间。

repeat_interval: [<duration>]

default=4h,此设置控制的是警报发送成功以后,没有对警报做解决操作的话,状态 Firing 没有变成 Inactive 或者 Pending ,会再次发送警报的的间隔时间。

routes: - <route>...

子路由的匹配设置