Prometheus 监控 ESXi 实战

Prometheus 监控 ESXi 实践

背景与目标

背景

  • 数据中心/边缘节点大量使用 VMware ESXi 承载计算资源,稳定性和容量可视化是基础运维诉求。
  • 统一监控体系希望纳入 ESXi 与 vCenter 的指标,统一到 Prometheus,前端由 Grafana 呈现。
  • 告警统一走内部的 Watchalert 组件,支持告警的聚合、抑制、通知。

目标

  • 使用 pryorda/vmware_exporter 采集 ESXi/vCenter 指标,通过 Docker 编排部署
  • 将指标接入 Prometheus,并在 Grafana 中构建仪表盘展示
  • 通过 Watchalert 完成端到端告警:规则、路由、通知
  • 提供可复制的最小实践与运维排障建议

架构设计

组件清单

组件名称-版本 地址 说明
vmware_exporter-0.18.4 https://github.com/pryorda/vmware_exporter 连接 vCenter 或直接 ESXi,暴露 /metrics
Prometheus-3.5.0 LTS https://prometheus.io/download/ 抓取 exporter,存储时序数据
Watchalert-3.8.0 https://github.com/opsre/WatchAlert 接收 Prometheus数据,配置监控项,告警表达式,webhook 告警通知
Grafana-10.2.3 https://grafana.com/grafana/download?pg=oss-graf\&plcmt=hero-btn-1 可视化查询与仪表盘

环境准备

前提条件

  • 可访问 vCenter 或 ESXi 的网络连通性与账户(建议只读账户),密码通过环境变量或外部秘密管理(.env / Vault),避免硬编码
  • Docker 与 Compose 环境
  • 部署好 Prometheus、Watchalert 与Grafana

部署 vmware_exporter(Docker-compose)

  • 若编排中已包含 vmware_exporter 服务,确保以下环境变量正确:
    • VSPHERE_HOST:vCenter 或 ESXi 地址

    • VSPHERE_USER:采集账户用户名

    • VSPHERE_PASSWORD:采集账户密码

    • VSPHERE_IGNORE_SSL:自签证书场景设为 true

参考 config.env片段(示例)

  • 这里演示多集群/多 vCenter,可挂载配置文件到容器中

    config-bj.env

    VSPHERE_USER=administrator@vsphere.local
    VSPHERE_PASSWORD='xxxxxx'
    VSPHERE_HOST=172.10.30.1
    VSPHERE_IGNORE_SSL=TRUE
    VSPHERE_SPECS_SIZE=2000

    config-nj.env

    VSPHERE_USER=administrator@vsphere.local
    VSPHERE_PASSWORD='xxxxxx'
    VSPHERE_HOST=172.22.33.1
    VSPHERE_IGNORE_SSL=TRUE
    VSPHERE_SPECS_SIZE=2000

参考 Compose 片段(示例)

yaml 复制代码
version: '3.8'

services:
  vmware_exporter_nj:
    #image: pryorda/vmware_exporter:latest
    image: docker.cnb.cool/srebro/docker-images-chrom/pryorda-vmware_exporter:latest_amd64 #已配置镜像加速地址
    container_name: vmware_exporter_nj
    restart: always
    ports:
      - "9272:9272"
    env_file:
      - ./config-nj.env
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "9272"]  # 检测本地9272端口
      interval: 30s      # 检测间隔
      timeout: 10s       # 单次检测超时时间
      retries: 3         # 连续失败3次后标记为不健康
      start_period: 60s  # 启动后60秒开始检测

  vmware_exporter_bj:
    image: docker.cnb.cool/srebro/docker-images-chrom/pryorda-vmware_exporter:latest_amd64 #已配置镜像加速地址
    container_name: vmware_exporter_bj
    restart: always
    ports:
      - "9273:9272"    # 主机9273映射容器9272端口
    env_file:
      - ./config-bj.env
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "9272"]  # 检测容器内部9272端口
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

启动与健康检查

  • 启动后访问,可见看到 vmware_ 前缀的指标

    http://<host>:9272/metrics 和 http://<host>:9273/metrics

  • 关注容器日志,确认认证与连接正常,无大量超时

接入 Prometheus

抓取配置

在 Prometheus 的 scrape_configs 中加入 vmware_exporter, ⚠️ 注意自定义标签。

yaml 复制代码
scrape_configs:
#vmware_exporter
  - job_name: 'vmware_vcenter'
    metrics_path: '/metrics'
    static_configs:
    - targets: ['172.22.33.218:9272']
      labels:
        project_name: "Datacenter-srebro"
        nodename: "EXSI-172.1.5.17"
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - source_labels: [__address__]
        regex: '.*:9272$'
        target_label: datacenter
        replacement: 'Datacenter-srebro'
    ##用于标签值的自定义
    metric_relabel_configs:
      - action: replace
        target_label: host_name
        replacement: 'EXSI-172.1.5.17'  # 新值
      - action: replace
        target_label: dc_name
        replacement: 'EXSI-172.1.5.17'  # 新值

初次验证

  • Prometheus Targets 页面应看到 vmware_exporter 处于 UP 状态
  • PromQL 中可以查询 vmware_* 指标前缀数据

Grafana 图表展示

数据源与仪表盘

  • 添加 Prometheus 数据源,指向 Prometheus HTTP 地址。
  • 可导入社区仪表盘,1544611243可能需要根据自己的实际情况微调

告警规则与 Watchalert

  • 这里我将提供一个标准的 prometheus 的 rules.yaml 文件,支持一键导入 watchalert 中。可能需要根据自己的实际情况微调

示例规则(根据实际指标名调整):

yaml 复制代码
rules:
  - alert: ESXI宿主机离线
    expr: vmware_host_power_state == 0
    for: 30s
    labels:
      severity: 1
    annotations:
      summary: "ESXI宿主机离线"
      description: "区域:${labels.project_name} 宿主机:${labels.host_name} ESXI宿主机离线,当前值 ${labels.value},请登录vCenter查看"

  - alert: ESXi存储使用率超阈值
    expr: ((1 - (vmware_datastore_freespace_size / vmware_datastore_capacity_size)) * 100) > 85
    for: 1m
    labels:
      severity: 1
    annotations:
      summary: "ESXi存储使用率超阈值"
      description: "区域:${labels.project_name} 存储名:${labels.ds_name} 使用率超过85%,当前值 ${labels.value}%"

  - alert: ESXi虚拟机CPU使用率过高
    expr: vmware_vm_cpu_usage_average / 100 >= 85
    for: 30s
    labels:
      severity: 3
    annotations:
      summary: "ESXi虚拟机CPU使用率过高"
      description: "区域:${labels.project_name} 主机:${labels.nodename} CPU使用率超过85%,当前值 ${labels.value}%"

  - alert: ESXi虚拟机内存使用率过高
    expr: vmware_vm_mem_usage_average / 100 >= 90
    for: 30s
    labels:
      severity: 3
    annotations:
      summary: "ESXi虚拟机内存使用率过高"
      description: "区域:${labels.project_name} 主机:${labels.nodename} 内存使用率超过90%,当前值 ${labels.value}%"

  - alert: ESXi实例CPU负载过高
    expr: (vmware_host_cpu_usage / vmware_host_cpu_max) * 100 > 70
    for: 1m
    labels:
      severity: 1
    annotations:
      summary: "ESXi实例CPU负载过高"
      description: "区域:${labels.project_name} 宿主机:${labels.host_name} CPU负载超过70%,当前值 ${labels.value}%"

  - alert: ESXi实例内存使用率过高
    expr: (vmware_host_memory_usage / vmware_host_memory_max) * 100 > 85
    for: 30s
    labels:
      severity: 1
    annotations:
      summary: "ESXi实例内存使用率过高"
      description: "区域:${labels.project_name} 宿主机:${labels.nodename} 内存使用率超过85%,当前值 ${labels.value}%"

  - alert: ESXi虚拟机快照数量过多
    expr: vmware_vm_snapshots > 5
    for: 30s
    labels:
      severity: 3
    annotations:
      summary: "ESXi虚拟机快照数量过多"
      description: "区域:${labels.project_name} 主机:${labels.nodename} 快照数量超过5个,当前值 ${labels.value}"

补充: 关于 vmware_exporter 配置鉴权的功能

相关推荐
AC赳赳老秦8 小时前
外文文献精读:DeepSeek翻译并解析顶会论文核心技术要点
前端·flutter·zookeeper·自动化·rabbitmq·prometheus·deepseek
qq_312920111 天前
Proxmox VE 监控:把集群指标秒级推送到 InfluxDB 2.x,Grafana 大屏一步到位
运维·grafana
牛奶咖啡132 天前
Prometheus+Grafana构建云原生分布式监控系统(十二)_基于DNS的服务发现
云原生·prometheus·dns·搭建自己的dns服务器·使用bind搭建dns服务器·配置正向解析·基于dns的服务发现
A-刘晨阳2 天前
Prometheus + Grafana + Alertmanager 实现邮件监控告警及配置告警信息
运维·云计算·grafana·prometheus·监控·邮件
饺子大魔王的男人2 天前
告别服务器失联!Prometheus+Alertmanager+cpolar 让监控告警不局限于内网
运维·服务器·prometheus
电话交换机IPPBX-3CX3 天前
如何使用 Grafana 可视化你的 3CX 呼叫中心电话系统
grafana·ip pbx·电话交换机·企业电话系统
牛奶咖啡133 天前
Prometheus+Grafana构建云原生分布式监控系统(十一)_基于consul的服务发现
云原生·prometheus·consul的安装部署·consul服务自动发现·consul服务的注册删除·consul服务的更新·实现自动去consul注册服务
Otto_10274 天前
在 OpenStack Rocky 中部署 Prometheus + Grafana
openstack·grafana·prometheus
牛奶咖啡134 天前
Prometheus+Grafana构建云原生分布式监控系统(十)_prometheus的服务发现机制(一)
云原生·prometheus·prometheus服务发现·静态服务发现·动态服务发现·基于文件的服务发现配置实践·prometheus标签重写
玄德公笔记4 天前
Prometheus监控k8s的metric详解(第二版)-01-scrape 指标抓取
kubernetes·k8s·prometheus·监控·metric·scrape·k8s监控