关于alertmanager高可用存在的问题

时间:2023-02-10 17:01:36

我的 alertmanager.yml配置为:

global:
    resolve_timeout: 2m  # 当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决),默认5m
route:
  group_by: ['__ruleID__','__channel__','__receiver__']
  group_wait: 10s # 默认30s
  group_interval: 30s # 默认5m
  repeat_interval: 2m # 默认4h
  receiver: webhook
receivers:
- name: webhook
  webhook_configs:
  - url: 'http://webhook:9093/prometheusalarm'
    send_resolved: true

三个alertmanager服务的service配置如下:

# cat /usr/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=127.0.0.1:19094 --log.level=debug
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

# cat /usr/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=127.0.0.1:29094 --cluster.peer=127.0.0.1:19094 --log.level=debug
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

# cat /usr/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=127.0.0.1:39094 --cluster.peer=127.0.0.1:19094 --log.level=debug
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

启动三个alertmanager后 可用过web界面查看集群状态,集群ready 关于alertmanager高可用存在的问题 对以下几种情况进行了测试: 1、如果alertmanager的三个实例使用代理对外提供服务的话 则会产生混乱的resolved告警 使用方应该同时使用所有的perr,这也是官方提示的。

2、不使用代理,当我们配置三个peer的时候告警是可以符合预期的发送出来的,此时每个peer都会记录告警信息,此时我在配置中只写其中一个peer,另外两个peer会发出resolved告警 (整个期间使用方一直有告警发送给alertmanager),这是不符合预期的,不知官方是不是认为这种情况是合理的。

3、配置三个实例,stop其中一个peer实例 告警正常发送,start刚才stop的peer实例,告警正常发送,符合预期

4、配置中同时注释所有peer,只发送一个恢复告警,符合预期

另外对一个开源的es告警引擎elastalert2也做了测试 elastalert 存在的问题 配置多个alertmanager地址时 按照先后顺序 只要前面有实例不可用 就会阻塞对后面alertmanager的告警发送;当实例恢复时,会把刚才阻塞的告警对所有实例都发送一遍 例如 1、- http://127.0.0.1:19093 2、- http://127.0.0.1:29093 3、- http://127.0.0.1:39093 当第一个alertmanager不可用时 不会对23发送告警 当第二个alertmanager不可用时 不会对3发送告警,但对1正常发送 当第三个alertmanager不可用时 ,对12正常发送

注:本次测试使用的alertmanager版本为alertmanager-0.25.0.linux-amd64