Alertmanager高可用
日常部署alertmanager組件的時候,都是用的單點架構,架構圖如下所示:
那么顯然這樣是存在單點故障的,另外對運維而言,其實單點故障是很可怕的,收不到報警有時候是致命的,所以要用高可用的報警方式:
alertmanager的高可用方式有兩種方法,都是很好的解決方案,第一種就是引入負載均衡,通過負載均衡的方法保證服務可用,架構如下:
這種方式可以實現高可用 並且可以靈活擴展,雲服務的話一般都有負載均衡。
今天主要介紹官方提供的集群方法,架構如下:
Alertmanager引入了Gossip機制。Gossip機制為多個Alertmanager之間提供了信息傳遞的機制。確保及時在多個Alertmanager分別接收到相同告警信息的情況下,也只有一個告警通知被發送給Receiver。
集群環境搭建
為了能夠讓Alertmanager節點之間進行通訊,需要在Alertmanager啟動時設置相應的參數。其中主要的參數包括:
--cluster.listen-address string: 當前實例集群服務監聽地址
--cluster.peer value: 初始化時關聯的其它實例的集群服務地址
現在准備一台機器部署Alertmanager集群
機器:
192.168.50.58
這里我為了節約資源 在一台機器啟三個實例。
生產環境不建議都裝在一台機器
定義Alertmanager實例01,其中Alertmanager的服務運行在9093端口,集群服務地址運行在8001端口。
定義Alertmanager實例02,其中主服務運行在9094端口,集群服務運行在8002端口。
定義Alertmanager實例03,其中主服務運行在9095端口,集群服務運行在8002端口。為了將01,02,03組成集群
02 03 啟動時需要定義—cluster.peer參數並且指向01實例的集群服務地址:8001。
實例 | 集群端口 | 服務端口 |
---|---|---|
Alertmanager-01 | 8001 | 9093 |
Alertmanager-02 | 8002 | 9094 |
Alertmanager-03 | 8003 | 9095 |
[root@alert-manager-dev-1 src]# cd alertmanager
[root@alert-manager-dev-1 alertmanager]# ls
alert1.log alert2.log alert3.log alertmanager alertmanager.yml amtool data LICENSE NOTICE
[root@alert-manager-dev-1 alertmanager]# cat alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'wechat'
receivers:
- name: 'wechat'
wechat_configs:
- corp_id: 'ww10e9ec08a926549b' #企業ID
#to_user: '' #userid
to_user: '' #組id
agent_id: '' #agentid
api_secret: '' #生成的secret
send_resolved: true
- name: 'web.hook'
webhook_configs:
- url: 'http://192.168.50.58:5000/webhook'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
啟動實例01:
nohup ./alertmanager --web.listen-address=":9093" --cluster.listen-address="127.0.0.1:8001" --config.file="alertmanager.yml" --log.level=debug 2>&1 > alert1.log &
啟動實例02:
nohup ./alertmanager --web.listen-address=":9094" --cluster.listen-address="127.0.0.1:8002" --cluster.peer=127.0.0.1:8001 --config.file="alertmanager.yml" --storage.path=/data/0994/ --log.level=debug 2>&1 > alert2.log
啟動實例03:
nohup ./alertmanager --web.listen-address=":9095" --cluster.listen-address="127.0.0.1:8003" --cluster.peer=127.0.0.1:8001 --config.file="alertmanager.yml" --storage.path=/data/9095/ --log.level=debug 2>&1 > alert3.log &
修改Prometheus.yaml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.50.58:9093
- 192.168.50.58:9094
- 192.168.50.58:9095
重新加載Prometheus
curl -X POST http://localhost:9090/-/reload
完成后訪問任意Alertmanager節點http://localhost:9093/#/status,可以查看當前Alertmanager集群的狀態。
到這里就完成了 之后可以測試告警。