Loading... # 基于 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. 系统架构 ```mermaid 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 -->|告警通知|运维团队 ```  ## 2. 组件说明 ### A. vmware_exporter - 版本:0.18.4 - 功能:连接 vCenter 或直接 ESXi,暴露 Prometheus 格式的 /metrics 接口 - 开源地址:https://github.com/pryorda/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_exporter | 0.18.4 | ESXi/vCenter 指标采集 | | Prometheus | 3.5.0 LTS | 时序数据存储 | | Watchalert | 3.8.0 | 告警管理 | | Grafana | 10.2.3 | 可视化展示 | # 四、部署实施 ## 1. vmware_exporter 部署 ### A. 环境变量配置 支持多集群、多 vCenter 场景,为每个集群创建独立的配置文件: config-bj.env(北京集群): ```bash 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(南京集群): ```bash 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 编排 ```yaml 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 接口: ```bash curl http://<host>:9272/metrics curl http://<host>:9273/metrics ``` 检查容器日志,确认认证与连接正常: ```bash docker logs vmware_exporter_nj docker logs vmware_exporter_bj ``` ## 2. Prometheus 接入配置 ### A. 抓取配置 在 Prometheus 的 scrape_configs 中添加 vmware_exporter 任务: ```yaml 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,根据实际环境调整阈值: ```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宿主机离线,当前值 {{ $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. 指标采集流程 ```mermaid 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: 发送告警通知 ```  ## 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 未提供鉴权功能,存在安全风险。增强版已添加鉴权支持: - 代码仓库:https://cnb.cool/sro/vmware_exporter - 镜像地址:docker.cnb.cool/sro/vmware_exporter:0.18.4 - 使用文档:https://cnb.cool/sro/vmware_exporter/-/blob/master/README.md ## 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 仓库](https://github.com/pryorda/vmware_exporter) 2. [vmware_exporter 增强版仓库(带鉴权)](https://cnb.cool/sro/vmware_exporter) 3. [Prometheus 官方文档](https://prometheus.io/docs/) 4. [Grafana 官方文档](https://grafana.com/docs/) 5. [Watchalert GitHub 仓库](https://github.com/opsre/WatchAlert) 最后修改:2026 年 01 月 16 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏