Alertmanager 高可用部署

一、序言

本篇文章将介绍如何部署prometheus组件alertmanager高可用,参考官网文档:https://github.com/prometheus/alertmanager#high-availability

二、部署高可用架构

部署3个alertmanager 节点:

满足条件:

  • 3个节点使用相同的配置
  • 向集群宣告自己的通信接口
  • 配置所有的集群成员通信接口

在高可用(多实例)部署时,必须每个实例单独使用自己的存储,原因是:

  • Alertmanager 存储的是节点本地处理的告警状态(如分片数据、本地通知记录),这些数据是节点私有的,不需要也不应该共享。

1. 部署3个alertmanager 节点

这里使用docker-compose在一台主机上部署3个alertmanager 节点
root@localhost:~# tree alertmanager

alertmanager
├── alertmanager.yml
└── docker-compose.yml

docker-compose.yml:

  • 集群通信端口使用的都是9094,配置文件由当前目录下的alertmanager.yml映射到容器的/etc/alertmanager/alertmanager.yml,并且在本地声明了卷,并挂载到容器的/alertmanager目录,alertmanager指定存储目录为/alertmanager
version: '3.8'

services:
  # 节点 0
  alertmanager-0:
    image: quay.io/prometheus/alertmanager
    container_name: alertmanager-0
    restart: always
    ports:
      - "9093:9093"  # Web UI 端口
      - "9094:9094"  # 集群通信端口(用于节点间同步)
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
      - alertmanager-0-data:/alertmanager
    command:
      - "--config.file=/etc/alertmanager/alertmanager.yml"
      - "--storage.path=/alertmanager"
      - "--web.listen-address=0.0.0.0:9093"
      - "--cluster.listen-address=0.0.0.0:9094"  # 集群监听端口
      - "--cluster.peer=alertmanager-1:9094"     # 对端连接指向节点1
      - "--cluster.peer=alertmanager-2:9094"     # 对端连接指向节点2
    networks:
      - alertnet

  # 节点 1
  alertmanager-1:
    image: quay.io/prometheus/alertmanager
    container_name: alertmanager-1
    restart: always
    ports:
      - "9095:9093"  # 避免端口冲突,映射到主机9095
      - "9096:9094"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
      - alertmanager-1-data:/alertmanager
    command:
      - "--config.file=/etc/alertmanager/alertmanager.yml"
      - "--storage.path=/alertmanager"
      - "--web.listen-address=0.0.0.0:9093"
      - "--cluster.listen-address=0.0.0.0:9094"
      - "--cluster.peer=alertmanager-0:9094"     # 对端连接指向节点0
      - "--cluster.peer=alertmanager-2:9094"     # 对端连接指向节点2
    networks:
      - alertnet

  # 节点 2
  alertmanager-2:
    image: quay.io/prometheus/alertmanager
    container_name: alertmanager-2
    restart: always
    ports:
      - "9097:9093"  # 映射到主机9097
      - "9098:9094"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
      - alertmanager-2-data:/alertmanager
    command:
      - "--config.file=/etc/alertmanager/alertmanager.yml"
      - "--storage.path=/alertmanager"
      - "--web.listen-address=0.0.0.0:9093"
      - "--cluster.listen-address=0.0.0.0:9094"
      - "--cluster.peer=alertmanager-0:9094"     # 对端连接指向节点0
      - "--cluster.peer=alertmanager-1:9094"     # 对端连接指向节点1
    networks:
      - alertnet

networks:
  alertnet:  # 自定义网络,确保节点间通信

volumes:
  alertmanager-0-data: {}
  alertmanager-1-data: {}
  alertmanager-2-data: {}

alertmanager.yml:
alertmanager.yml配置就不过多介绍,是一个钉钉告警:

global:
  resolve_timeout: 5m
route:
  group_by: ['instance']  # 按告警名称分组
  group_wait: 30s          # 首次分组等待时间
  group_interval: 5m       # 同组告警更新间隔
  repeat_interval: 1h      # 未恢复告警的重复通知间隔
  receiver: 'dingtalk-webhook'  # 告警接收器对象
# 告警对象配置
receivers:
- name: 'dingtalk-webhook'
  webhook_configs:
  - url: 'http://192.168.25.225:8060/dingtalk/webhook1/send'
    send_resolved: true
# 告警抑制配置
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['instance','target_type','env']  # 相同标签的告警才会被抑制

启动docker-compos:

docker-compose -f docker-compose.yml up

2. 修改prometheus配置

/etc/prometheus/prometheus.yml:

alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 127.0.0.1:9093
           - 127.0.0.1:9095
           - 127.0.0.1:9097

将所有alertmanagers节点添加上,并重新加载prometheus;

3. alertmanagers 是如何同步告警的

Alertmanager 集群不依赖中心化存储(如数据库),而是通过 Gossip 协议(流言协议) 实现分布式状态同步。
Gossip 协议是一种去中心化的信息传播机制,类似 “谣言扩散”:每个实例(节点)会定期将自身的告警状态数据,随机同步给集群内的其他节点;收到数据的节点再继续转发给其他节点,最终在短时间内实现全集群数据一致。

官网高可用架构图如下:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值