基于 vmware_exporter 的 ESXi 监控方案技术分析

一、概述

1. 背景

A. 业务场景

数据中心和边缘节点大量使用 VMware ESXi 承载计算资源。稳定性和容量可视化是基础运维诉求,统一监控体系需要纳入 ESXi 与 vCenter 的指标。

B. 技术挑战

  • 多集群、多 vCenter 环境下的统一监控
  • ESXi 与 vCenter 指标的标准化采集
  • 监控数据的统一存储与可视化展示
  • 告警规则的统一管理与路由分发

2. 设计目标

A. 功能目标

  • 使用 vmware_exporter 采集 ESXi/vCenter 指标
  • 通过 Docker Compose 编排部署监控组件
  • 将指标接入 Prometheus 进行时序存储
  • 使用 Grafana 构建可视化仪表盘
  • 通过 Watchalert 实现端到端告警管理

B. 非功能目标

  • 支持多数据中心、多 vCenter 并行采集
  • 提供开箱即用的配置模板
  • 支持自签证书场景
  • 实现高可用的监控架构

二、架构设计

1. 系统架构

graph TB
    subgraph VMware基础设施
        ESXi1[ESXi主机集群1]
        ESXi2[ESXi主机集群2]
        vCenter[vCenter服务器]
    end

    subgraph 采集层
        Exp1[vmware_exporter<br/>北京集群:9272]
        Exp2[vmware_exporter<br/>南京集群:9273]
    end

    subgraph 存储层
        Prometheus[Prometheus<br/>时序数据库]
    end

    subgraph 告警层
        Watchalert[Watchalert<br/>告警路由与通知]
    end

    subgraph 可视化层
        Grafana[Grafana<br/>仪表盘]
    end

    ESXi1 --> vCenter
    ESXi2 --> vCenter
    vCenter --> Exp1
    vCenter --> Exp2
    Exp1 --> Prometheus
    Exp2 --> Prometheus
    Prometheus --> Watchalert
    Prometheus --> Grafana
    Watchalert -->|告警通知|运维团队

mermaid

2. 组件说明

A. vmware_exporter

B. Prometheus

  • 版本:3.5.0 LTS
  • 功能:抓取 exporter 指标,存储时序数据
  • 提供 PromQL 查询语言

C. Watchalert

  • 版本:3.8.0
  • 功能:接收 Prometheus 数据,配置监控项与告警表达式,支持 webhook 通知
  • 支持告警聚合、抑制、路由

D. Grafana

  • 版本:10.2.3
  • 功能:可视化查询与仪表盘展示
  • 支持多种数据源和丰富的图表类型

三、环境准备

1. 前置条件

A. 网络与账户

  • 确保可访问 vCenter 或 ESXi 的网络连通性
  • 准备只读账户,避免使用管理员账户
  • 密码通过环境变量或外部秘密管理,禁止硬编码

B. Docker 环境

  • 安装 Docker 与 Docker Compose
  • 确保容器间网络通信正常

C. 监控基础设施

  • 部署好 Prometheus、Watchalert 与 Grafana
  • 确保各组件间网络可达

2. 组件版本清单

组件名称版本说明
vmware_exporter0.18.4ESXi/vCenter 指标采集
Prometheus3.5.0 LTS时序数据存储
Watchalert3.8.0告警管理
Grafana10.2.3可视化展示

四、部署实施

1. vmware_exporter 部署

A. 环境变量配置

支持多集群、多 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

B. Docker Compose 编排

version: '3.8'

services:
  vmware_exporter_nj:
    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"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

  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"
    env_file:
      - ./config-bj.env
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "9272"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

C. 健康检查机制

  • 检测本地 9272 端口
  • 检测间隔 30 秒
  • 单次检测超时 10 秒
  • 连续失败 3 次后标记为不健康
  • 启动后 60 秒开始检测

D. 验证部署

启动后访问 metrics 接口:

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

检查容器日志,确认认证与连接正常:

docker logs vmware_exporter_nj
docker logs vmware_exporter_bj

2. Prometheus 接入配置

A. 抓取配置

在 Prometheus 的 scrape_configs 中添加 vmware_exporter 任务:

scrape_configs:
  - 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'

B. 标签管理

通过 relabel_configs 和 metric_relabel_configs 实现标签自定义:

  • project_name:项目名称
  • nodename:节点名称
  • datacenter:数据中心标识
  • host_name:主机名称
  • dc_name:数据中心名称

C. 验证接入

  1. Prometheus Targets 页面确认 vmware_exporter 处于 UP 状态
  2. 使用 PromQL 查询 vmware_* 前缀指标
  3. 确认指标标签正确应用

3. Grafana 可视化配置

A. 数据源配置

  1. 添加 Prometheus 数据源
  2. 指向 Prometheus HTTP 地址
  3. 配置访问权限和认证信息

B. 仪表盘导入

可导入社区仪表盘:

  • 仪表盘 ID:15446(VMware 总览)
  • 仪表盘 ID:11243(VMware 详细)

根据实际情况可能需要微调查询语句和变量。

C. 推荐监控面板

  • ESXi 主机状态概览
  • CPU 使用率趋势
  • 内存使用率趋势
  • 存储容量与使用率
  • 虚拟机状态分布
  • 网络流量统计

五、告警规则设计

1. 告警规则配置

以下规则可导入 Watchalert,根据实际环境调整阈值:

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宿主机离线,当前值 {{ $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%,当前值 {{ $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%,当前值 {{ $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%,当前值 {{ $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%,当前值 {{ $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%,当前值 {{ $value }}%"

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

2. 告警级别说明

级别说明典型场景
severity: 1严重告警宿主机离线、存储超阈值、资源过载
severity: 3一般告警虚拟机资源使用过高、快照过多

3. Watchalert 配置要点

  • 支持告警聚合:相同告警合并发送
  • 支持告警抑制:依赖关系避免告警风暴
  • 支持 webhook 通知:对接企业微信、钉钉等

六、监控数据流

1. 指标采集流程

sequenceDiagram
    participant ESXi as ESXi/vCenter
    participant Exporter as vmware_exporter
    participant Prometheus as Prometheus
    participant Grafana as Grafana
    participant Watchalert as Watchalert
    participant User as 运维人员

    ESXi->>Exporter: 暴露指标接口
    Exporter->>Exporter: 转换为Prometheus格式
    Prometheus->>Exporter: 定期抓取/metrics
    Prometheus->>Prometheus: 存储时序数据
    Grafana->>Prometheus: 查询指标数据
    Grafana->>User: 展示仪表盘
    Prometheus->>Watchalert: 推送告警评估
    Watchalert->>User: 发送告警通知

mermaid

2. 关键指标说明

指标名称说明单位
vmware_host_power_state主机电源状态0/1
vmware_datastore_freespace_size数据存储空闲空间字节
vmware_datastore_capacity_size数据存储总容量字节
vmware_vm_cpu_usage_average虚拟机 CPU 使用率百分比
vmware_vm_mem_usage_average虚拟机内存使用率百分比
vmware_host_cpu_usage主机 CPU 使用量兆赫兹
vmware_host_cpu_max主机 CPU 总量兆赫兹
vmware_host_memory_usage主机内存使用量字节
vmware_host_memory_max主机内存总量字节
vmware_vm_snapshots虚拟机快照数量

七、扩展功能

1. 鉴权功能增强

原版 vmware_exporter 未提供鉴权功能,存在安全风险。增强版已添加鉴权支持:

2. 镜像加速

使用国内镜像加速地址:

  • docker.cnb.cool/srebro/docker-images-chrom/pryorda-vmware_exporter:latest_amd64

八、最佳实践

1. 安全建议

  • 使用只读账户进行监控采集
  • 密码通过环境变量或外部秘密管理
  • 启用 exporter 鉴权功能
  • 限制网络访问范围

2. 性能优化

  • 合理设置 VSPHERE_SPECS_SIZE 参数
  • 使用 healthcheck 确保服务可用性
  • 调整 Prometheus 抓取间隔
  • 配置合理的指标保留策略

3. 运维建议

  • 定期检查容器健康状态
  • 监控 exporter 自身的资源消耗
  • 及时更新组件版本
  • 建立告警值班机制

参考资料

  1. vmware_exporter GitHub 仓库
  2. vmware_exporter 增强版仓库(带鉴权)
  3. Prometheus 官方文档
  4. Grafana 官方文档
  5. Watchalert GitHub 仓库
最后修改:2026 年 01 月 16 日
如果觉得我的文章对你有用,请随意赞赏