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 配置鉴权的功能

相关推荐
莫非王土也非王臣11 小时前
Prometheus监控多个网站状态并推送到企业微信群机器人的完整方案
机器人·企业微信·prometheus
goodlook01232 天前
监控平台搭建-日志-alloy篇(八)
grafana·prometheus
goodlook01232 天前
监控平台搭建-日志-springboot直接推送loki篇(九)
java·spring boot·后端·grafana
三不原则2 天前
实战:Prometheus 监控 GPU 使用率,设置智能告警阈值
prometheus
新钛云服2 天前
Grafana Polystat面板与腾讯云可观测平台的深度融合实践
大数据·云计算·腾讯云·grafana
flying robot3 天前
Prometheus[2.33.3]grafana[12.3.1]监控安装
grafana·prometheus
flying robot3 天前
Grafana对xx-export监控和AlertManager 告警
grafana
a41324475 天前
VMware ESXi8.0 环境下,加装nvidia RTX3090显卡,通过添加pci直通给ubuntu25虚拟机
linux·网络·esxi·3090
一只懒鱼a6 天前
Prometheus和Grafana的安装和使用
grafana·prometheus