本章节次要解说 Alertmanager 高可用的搭建与配置的具体的常识内容。
为了晋升 Prometheus 的服务可靠性,咱们会部署两个或多个的 Prometheus 服务,两个 Prometheus 具备雷同的配置(Job 配、告警规定、等),当其中一个 Down 掉了当前,能够保障 Prometheus 继续可用。
AlertManager 自带警报分组机制,即便不同的 Prometheus 别离发送雷同的警报给 Alertmanager,Alertmanager 也会主动把这些警报合并解决。
| 去重 | 分组 | 路由 |
| :—–: | :—-: |:—-: |
|Daduplicates|Groups|Route|
| 将雷同的警报合并成一个 | 依据定义的分组 | 通过路由分发给指定的 receiver|
尽管 Alertmanager 可能同时解决多个雷同的 Prometheus 的产生的警报,如果部署的 Alertmanager 是单节点,那就存在显著的的单点故障危险,当 Alertmanager 节点 down 机当前,警报性能则不可用。
解决这个问题的办法就是应用传统的 HA 架构模式,部署 Alertmanager 多节点。然而因为 Alertmanager 之间关联存在不能满足 HA 的需要,因而会导致警报告诉被 Alertmanager 反复发送屡次的问题。
Alertmanager 为了解决这个问题,引入了 Gossip 机制,为多个 Alertmanager 之间提供信息传递机制。确保及时的在多个 Alertmanager 别离承受到雷同的警报信息的状况下,不会发送反复的警报信息给 Receiver.
Gossip 机制
要晓得什么是 Gossip 机制,必须理解分明 Alertmanager 中的每一次警报告诉是如何产生的,上面一图很具体的论述了警报个流程:
阶段 | 形容 |
---|---|
Silence |
在这个阶段中 Alertmanager 会判断以后告诉是否匹配任何静默规定;如果没有则进入下一个阶段,否则会中断流程不发送告诉。 |
Wait |
Alertmanager 会依据以后集群中所处在的程序 [index ],期待 index * 5s 的工夫。 |
Dedup |
当期待完结实现,进入 Dedup 阶段,这时会判断以后 Alertmanager TSDB 中警报是否曾经发送,如果发送则中断流程,不发送警报。 |
Send |
如果下面的未发送,则进入 Send 阶段,发送警报告诉。 |
Gossip |
警报发送胜利当前,进入最初一个阶段 Gossip ,告诉其余 Alertmanager 节点,以后警报曾经发送胜利。其余 Alertmanager 节点会保留以后曾经发送过的警报记录。 |
Gossip 的俩个要害:
- Alertmanager 节点之间的 Silence 设置雷同,这样确保了设置为静默的警报都不会对外发送
- Alertmanager 节点之间通过 Gossip 机制同步警报告诉状态,并且在流程中标记 Wait 阶段,保障警报是顺次被集群中的 Alertmanager 节点读取并解决。
搭建本地 Alertmanager 集群
启动 Alertmanager 集群之前,须要理解一些集群相干的参数
参数 | 阐明 |
---|---|
--cluster.listen-address="0.0.0.0:9094" |
集群服务监听端口 |
--cluster.peer |
初始化关联其余节点的监听地址 |
--cluster.advertise-address |
播送地址 |
--cluster.gossip-interval |
集群音讯流传工夫,默认 200s |
--cluster.probe-interval |
各个节点的探测工夫距离 |
# 间接复制之前曾经装置过的 Alertmanager 文件夹
cp -r alertmanager/ /usr/local/alertmanager01
cp -r alertmanager/ /usr/local/alertmanager02
cp -r alertmanager/ /usr/local/alertmanager03
# 复制实现当前,写入启动脚本,# Alertmanager01
cat << EOF> /lib/systemd/system/alertmanager01.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/alertmanager01/bin/alertmanager \
--config.file=/usr/local/alertmanager01/conf/alertmanager.yml \
--storage.path=/usr/local/alertmanager01/data \
--web.listen-address=":19093" \
--cluster.listen-address=192.168.1.220:19094 \
--log.level=debug
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
EOF
# Alertmanager02
cat << EOF> /lib/systemd/system/alertmanager02.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/alertmanager02/bin/alertmanager \
--config.file=/usr/local/alertmanager02/conf/alertmanager.yml \
--storage.path=/usr/local/alertmanager02/data \
--web.listen-address=":29093" \
--cluster.listen-address=192.168.1.220:29094 \
--cluster.peer=192.168.1.220:19094 \
--log.level=debug
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
EOF
# Alertmanager03
cat <<EOF > /lib/systemd/system/alertmanager03.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/alertmanager03/bin/alertmanager \
--config.file=/usr/local/alertmanager03/conf/alertmanager.yml \
--storage.path=/usr/local/alertmanager03/data \
--web.listen-address=":39093" \
--cluster.listen-address=192.168.1.220:39094 \
--cluster.peer=192.168.1.220:19094 \
--log.level=debug
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
EOF
# 开启 systemd 脚本启动
systemctl enable alertmanager01 alertmanager02 alertmanager03
systemctl start alertmanager01 alertmanager02 alertmanager03
启动实现后,就能够拜访 http://192.168.1.220:19093 能够看到以下集群状态了,我这里是为了测试,本地启动了多个端口,如果是理论生产环境中,是不同节点以及不同的 IP,这些依据本人的需要设计即可。
Prometheus 中的配置:
external_labels: # 联邦集群附加的 Label 标识,能够附加在警报中,这样用于标识警报来源于那个 Prometheus
dc: prom-master
alerting:
alert_relabel_configs:
- source_labels: [dc]
regex: (.+)\d+
target_label: dc
alertmanagers:
- static_configs:
#- targets: ['127.0.0.1:9093']
- targets: ['192.168.1.220:19093','192.168.1.220:29093','192.168.1.220:39093']
配置实现当前,重启或者 reloadPrometheus 服务,拜访 http://192.168.1.220:19090/config 就能够看到具体的配置信息了。
到此,Alertmanager 集群配置就实现了,对于集群中的警报测试很简略,间接 down 掉一个端口,而后触发警报,看看警报是否能够失常发送。