1.etcd集群部署

本次主要为了测试etcd告警,所以使用docker-compose 方式进行

mkdir etcd-cluster
cd etcd-cluster
vim docker-compose.yml

version: '3'
services:
  etcd1:
    image: quay.io/coreos/etcd:v3.5.1  # 使用官方 etcd 镜像
    container_name: etcd1
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_NAME=etcd1
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
    networks:
      - etcdnet
    ports:
      - "12379:2379"

  etcd2:
    image: quay.io/coreos/etcd:v3.5.1
    container_name: etcd2
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_NAME=etcd2
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
    networks:
      - etcdnet
    ports:
      - "22379:2379"

  etcd3:
    image: quay.io/coreos/etcd:v3.5.1
    container_name: etcd3
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_NAME=etcd3
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
    networks:
      - etcdnet
    ports:
      - "32379:2379"

networks:
  etcdnet:
    driver: bridge

# 进入etcd1容器,检查集群状态
docker exec -it etcd1 etcdctl --endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 endpoint status --write-out=table

# 检查集群成员
docker exec -it etcd1 etcdctl --endpoints=http://etcd1:2379 member list

vim prometheus.yml,增加如下内容:

  - job_name: 'etcd'
    static_configs:
      # 指向 etcd 集群的监控端口(容器内地址)
      - targets: ['IP:12379','IP:22379','IP:32379']
    # etcd 指标抓取的关键配置
    metrics_path: /metrics
    scheme: http

3.监控面板

前提

  1. Prometheus 已正常抓取 etcd 指标(Targets 为 UP)。
  2. Grafana 已添加 Prometheus 数据源(名称建议为 Prometheus,后续导入直接匹配)。

导入流程

  1. 打开 Grafana → 左侧菜单 Dashboards → 点击 New → 选择 Import
  2. Import via grafana.com 输入框填入 3070,点击 Load
  3. 配置:
    • Name:自定义仪表盘名称(如 Etcd Cluster Monitor)。
    • Folder:选择存放文件夹(默认 General)。
    • Prometheus Data Source:选择你添加的 Prometheus 数据源。
  4. 点击 Import,完成后自动跳转到 etcd 监控面板。

Dashboard 3070 核心面板说明

该仪表盘覆盖 etcd 集群全生命周期监控,核心模块如下:

  1. 集群概览
    • 节点状态(UP/DOWN)、Leader 节点、集群健康度。
    • 关键指标:etcd_server_has_leader(是否有主节点)、etcd_server_is_leader(当前节点是否为主)。
  2. 节点性能
    • 请求延迟(P99/P95/P50):etcd_server_proposals_duration_seconds
    • 读写 QPS、失败请求数、提案提交速率。
  3. 存储监控
    • 数据库大小:etcd_mvcc_db_total_size_in_bytes
    • WAL 写入延迟、磁盘 fsync 耗时(核心性能瓶颈指标)。
  4. 网络与集群同步
    • 节点间网络延迟:etcd_network_peer_round_trip_time_seconds
    • 选举次数、Leader 切换次数、数据同步进度。
  5. 告警相关指标
    • 集群无 Leader 时长、节点离线时长、存储使用率超限。

4.告警

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐