Мониторинг vSphere / vCenter с помощью Proto Observability

Сбор метрик и событий vCenter Server: инвентарь, performance counters хостов, VM, datastore, кластеров и потока событий vSphere.

На этой странице:

Сбор метрик vSphere

Интеграция vsphere собирает метрики через vSphere SOAP API (/sdk на TCP 443) с помощью pyvmomi-клиента. JMX не используется — образ агента берётся обычный, без суффикса -jmx.

Чек собирает 87 метрик семью группами: CPU, память, сеть, диск, ресурсный шедулер (rescpu.*), системные (sys.*) и сводные (vm.count / host.count). Дополнительно тянутся события vSphere (power on/off, vMotion, reconfigure, clone, destroy и т.д.) и одна Service Check на инстанс.

Конфигурация vCenter

  1. Создайте read-only пользователя для агента (через vSphere Web Client → Administration → Single Sign On → Users and Groups или dir-cli в Photon shell):

    user:    protoobp@vsphere.local
    role:    Read-only (или кастомная с минимальным набором — см. ниже)
    scope:   на корневой объект vCenter, propagate=true
    

    Для базового сбора метрик достаточно встроенной роли Read-only. Для сбора тегов через REST API дополнительно понадобятся привилегии Global → vCenter Server, Global → Tag и Profile-driven storage.

  2. Откройте сетевой доступ агенту до vCenter по TCP 443. Альтернативный порт не поддерживается — pyvmomi.SmartConnect в текущей версии чека ходит на дефолтный 443 без override-параметра.

Конфигурация ProtoOBP агента

Если агент запускается в виде службы на хосте

  1. Создайте файл /etc/protoobp-agent/conf.d/vsphere.d/conf.yaml:

    init_config:
    
    instances:
      - host: vcenter.example.com
        username: protoobp@vsphere.local
        password: "<PASSWORD>"
    
        # Чек — cluster-level, метрики не привязаны к хосту агента.
        # Обязательно true.
        empty_default_hostname: true
    
        # Текущая (non-legacy) реализация чека — обязательный параметр.
        use_legacy_check_version: false
    
        # 1 — базовый набор, 4 — все доступные performance counters.
        # 4 даёт ~1100 точек на каждый run на инвентарь из 10 VM + 7 host.
        collection_level: 4
    
        # realtime — VM/Host метрики (резолюция 20s).
        # Для Datacenter / Cluster / Datastore нужен `historical`.
        collection_type: realtime
    
        # Тянуть события vCenter (power on/off, vMotion, reconfigure и т.п.).
        collect_events: true
    
        # Теги через REST API (vAPI). Включайте только при наличии
        # Read-only роли с правами Global → Tag.
        collect_tags: false
    
        # Самоподписанный сертификат vCenter — на проде корректный путь:
        # положить CA в ssl_capath. На стендах допустимо ssl_verify: false
        # (тогда добавьте tls_ignore_warning: true, чтобы убрать варнинги
        # urllib3 в логах чека).
        ssl_verify: true
    
        # ВАЖНО
        excluded_host_tags:
          - vsphere_type
          - vsphere_host
          - vsphere_cluster
          - vsphere_compute
          - vsphere_datacenter
          - vsphere_folder
          - vsphere_datastore
          - vsphere_resource_pool
    
        # Произвольные теги на всех метриках/событиях этого инстанса.
        tags:
          - env:production
          - vcenter:main
    
  2. Перезапустите агента: systemctl restart protoobp-agent.

Если агент запускается в виде Docker контейнера

vCenter — это внешний сервис, контейнером ProtoOBP не управляется, поэтому autodiscovery-лейблы здесь не применимы. Подсуньте конфиг файлом через bind-mount:

services:
  protoobp-agent:
    image: registry.git.proto.group/protoobp/protoobp-artifacts/protoobp-agent:7.40.3
    volumes:
      - ./agent-conf/vsphere.d/conf.yaml:/etc/protoobp-agent/conf.d/vsphere.d/conf.yaml:ro
    environment:
      POBP_API_KEY: <API_KEY>
      POBP_POBP_URL: <protoobp-backend-url>
      # Глобальные теги — навешиваются на все метрики/события агента
      # (в дополнение к tags: внутри conf.yaml).
      POBP_TAGS: env:production project:vcenter

Где ./agent-conf/vsphere.d/conf.yaml — тот же instances:-блок, что описан в предыдущей секции (вместе с excluded_host_tags — без него метрики придут без лейблов инвентаря).

Параметр excluded_host_tags

На практике это обязательный параметр: без него дашборды и алерты по виртуальным машинам, ESXi-хостам и кластерам не заработают.

   excluded_host_tags:
     - vsphere_type
     - vsphere_host
     - vsphere_cluster
     - vsphere_compute
     - vsphere_datacenter
     - vsphere_folder
     - vsphere_datastore
     - vsphere_resource_pool

Проверка

Убедитесь, что проверка запустилась и собирает метрики:

docker exec protoobp-agent agent status | grep -A 8 "^    vsphere"

Ожидаемый вывод — Total Runs > 0, Last Successful Execution Date заполнен, Metric Samples ненулевые:

vsphere (6.2.0)
  Instance ID: vsphere:68d783e6f300152 [OK]
  Total Runs: 3
  Metric Samples: Last Run: 1106, Total: 3300
  Events: Last Run: 2, Total: 4
  Service Checks: Last Run: 1, Total: 3
  Average Execution Time : 458ms

Собираемые метрики

В ProtoOBP backend (Prometheus / VictoriaMetrics) метрики приходят с префиксом vsphere_.

Лейблы

Общие (на всех метриках)

Добавляются агентом и ProtoOBP backend’ом:

ЛейблЗначение
envТег env (через tags: в конфиге чека или POBP_TAGS)
serviceТег service
hostИмя инвентарного объекта vSphere (host, VM, datastore, cluster, DC)
Специфичные для vSphere
ЛейблГде появляетсяПример
vcenter_serverНа всех метрикахvcenter.example.com
vsphere_typeНа всех метрикахvm / host / datacenter / cluster / datastore
vsphere_datacenterНа всех объектах в DCDC0
vsphere_clusterНа объектах внутри clusterDC0_C0
vsphere_hostНа VM и компонентах host’аDC0_C0_H0
vsphere_resource_poolНа VM в resource poolDC0_C0_RP1
vsphere_folderЕсли объект в кастомной folderProduction
vsphere_computeCompute resource (cluster или standalone)DC0_C0
vsphere_datastoreНа объектах datastoreLocalDS_0

Метрики CPU

Группа vsphere_cpu_* (27 метрик). Несут лейбл vsphere_type = vm или host.

Имя метрикиЕдиницаОписание
vsphere_cpu_usage_avg%Использование CPU (доля от capacity)
vsphere_cpu_usagemhz_avgMHzИспользование CPU в абсолютных значениях
vsphere_cpu_utilization_avg%Утилизация physical CPU (host) с учётом hyper-threading
vsphere_cpu_coreUtilization_avg%Утилизация по физическим ядрам (host)
vsphere_cpu_totalCapacity_avgMHzСуммарная capacity CPU
vsphere_cpu_reservedCapacity_avgMHzЗарезервированная capacity
vsphere_cpu_demand_avgMHzCPU, запрошенное VM (могло не быть выделено)
vsphere_cpu_demandEntitlementRatio_latest%demand / entitlement
vsphere_cpu_entitlement_latestMHzCPU entitlement (право на ресурс по shares + reservation)
vsphere_cpu_run_summsВремя в состоянии run (выполнение vCPU на pCPU)
vsphere_cpu_ready_summsВремя ожидания vCPU доступа к pCPU (главный индикатор CPU contention)
vsphere_cpu_readiness_avg%То же, в процентах
vsphere_cpu_wait_summsВремя в состоянии wait (idle + ввод/вывод)
vsphere_cpu_idle_summsВремя idle vCPU
vsphere_cpu_costop_summsco-stop time (синхронизация SMP vCPU)
vsphere_cpu_overlap_summsВремя, в течение которого ESXi обрабатывал прерывания от имени vCPU
vsphere_cpu_system_summsCPU времени, потраченного гипервизором на обслуживание VM
vsphere_cpu_used_summsОбщее CPU-время, потраченное VM/host
vsphere_cpu_latency_avg%Доля времени, когда VM не могла получить запрошенный CPU

Метрики памяти

Группа vsphere_mem_* (33 метрики). Самые ходовые:

Имя метрикиЕдиницаОписание
vsphere_mem_usage_avg%Использование памяти (доля от назначенной)
vsphere_mem_active_avgKBАктивно используемая память (working set)
vsphere_mem_activewrite_avgKBАктивно изменяемая память (write working set)
vsphere_mem_consumed_avgKBФизически выделенная VM/host’у память
vsphere_mem_granted_avgKBПамять, выданная гостю (включая shared)
vsphere_mem_shared_avgKBShared pages (за счёт TPS — transparent page sharing)
vsphere_mem_sharedcommon_avgKBShared pages, дедуплицированные между VM
vsphere_mem_zero_avgKBPages, заполненные нулями (не занимают физпамять)
vsphere_mem_overhead_avgKBOverhead гипервизора per VM
vsphere_mem_overheadMax_avgKBМаксимальный overhead для VM
vsphere_mem_overheadTouched_avgKBРеально использованный overhead
vsphere_mem_swapped_avgKBПамять VM, выгруженная гипервизором в swap
vsphere_mem_swapin_avgKBПамять VM, прочитанная из swap
vsphere_mem_swapout_avgKBПамять VM, записанная в swap
vsphere_mem_swaptarget_avgKBЦелевой объём swap для VM (от memory ballooning policy)
vsphere_mem_vmmemctl_avgKBПамять, отнятая у VM через balloon driver
vsphere_mem_vmmemctltarget_avgKBЦелевой размер balloon
vsphere_mem_entitlement_avgKBMemory entitlement (право на память)
vsphere_mem_unreserved_avgKBНезарезервированная физическая память (host)
vsphere_mem_reservedCapacity_avgMBЗарезервированная capacity
vsphere_mem_totalCapacity_avgMBСуммарная физпамять (host)
vsphere_mem_lowfreethreshold_avgKBПорог, ниже которого ESXi начинает агрессивный reclaim
vsphere_mem_sysUsage_avgKBПамять, занятая VMkernel
vsphere_mem_heap_avgKBHeap VMkernel
vsphere_mem_heapfree_avgKBСвободно в heap’е VMkernel
vsphere_mem_vmfs_pbc_size_latestKBРазмер pointer block cache VMFS
vsphere_mem_vmfs_pbc_sizeMax_latestKBМаксимальный размер PBC
vsphere_mem_vmfs_pbc_overhead_latestKBOverhead на PBC
vsphere_mem_vmfs_pbc_workingSet_latestKBРабочее множество PBC
vsphere_mem_vmfs_pbc_workingSetMax_latestKBМаксимальный рабочий набор PBC

Метрики сети

Группа vsphere_net_* (12 метрик). Несут лейбл vsphere_type = vm или host.

Имя метрикиЕдиницаОписание
vsphere_net_usage_avgKB/sСуммарный сетевой трафик (rx+tx)
vsphere_net_received_avgKB/sПринято
vsphere_net_transmitted_avgKB/sОтправлено
vsphere_net_bytesRx_avgKB/sПринято байт
vsphere_net_bytesTx_avgKB/sОтправлено байт
vsphere_net_packetsRx_sumpacketsПринято пакетов
vsphere_net_packetsTx_sumpacketsОтправлено пакетов
vsphere_net_broadcastRx_sumpacketsПринято broadcast-пакетов
vsphere_net_broadcastTx_sumpacketsОтправлено broadcast-пакетов
vsphere_net_multicastRx_sumpacketsПринято multicast-пакетов
vsphere_net_pnicBytesRx_avgKB/sТрафик на физическом NIC (host)
vsphere_net_pnicBytesTx_avgKB/sИсходящий трафик на физическом NIC (host)

Метрики диска

Группа vsphere_disk_* и vsphere_virtualDisk_*.

Имя метрикиЕдиницаОписание
vsphere_disk_usage_avgKB/sСуммарный disk I/O
vsphere_disk_read_avgKB/sRead I/O
vsphere_disk_write_avgKB/sWrite I/O
vsphere_disk_maxTotalLatency_latestmsМаксимальная latency на любой LUN
vsphere_virtualDisk_read_avgKB/sRead на virtual disk (per VM)
vsphere_virtualDisk_write_avgKB/sWrite на virtual disk (per VM)
vsphere_datastore_maxTotalLatency_latestmsМаксимальная latency datastore (требует collection_type: historical)

Метрики ресурсного шедулера (rescpu)

Группа vsphere_rescpu_* (13 метрик) — глобальный шедулер ESXi, скользящие средние и пики:

Базовое имяОписание
vsphere_rescpu_actav(1|5|15)_latestActive average за 1 / 5 / 15 минут
vsphere_rescpu_actpk(1|5|15)_latestActive peak за 1 / 5 / 15 минут
vsphere_rescpu_runav(1|5|15)_latestRun average за 1 / 5 / 15 минут
vsphere_rescpu_runpk(1|5|15)_latestRun peak за 1 / 5 / 15 минут
vsphere_rescpu_sampleCount_latestКоличество сэмплов в окне
vsphere_rescpu_samplePeriod_latestДлительность окна сэмплирования

Системные метрики

Имя метрикиЕдиницаОписание
vsphere_sys_uptime_latestsecondsUptime VM/host
vsphere_sys_osUptime_latestsecondsUptime гостевой OS (только при включённых VMware Tools)
vsphere_sys_heartbeat_latestcounterHeartbeats от VMware Tools (рост = живой гость)

Сводные счётчики инвентаря

Появляются на уровне Datacenter / Cluster / Resource Pool / Host:

Имя метрикиЕдиницаГде появляетсяОписание
vsphere_vm_countVMDC, Cluster, RP, HostКоличество VM в области
vsphere_host_counthostDC, ClusterКоличество ESXi-хостов в области

Service check

ИмяОписание
vsphere.can_connectOK если SmartConnect успешен; CRITICAL при сетевых/auth ошибках

В Prometheus-эндпоинте появляется как vsphere_can_connect, лейбл vcenter_server различает несколько инстансов.

Ключевые метрики для дашбордов и алертов

Здоровье инфраструктуры

  • vsphere_can_connect != 0 — алерт: агент не может подключиться к vCenter (auth, сеть, expired session).
  • vsphere_sys_heartbeat_latest не растёт у работающей VM — VMware Tools умерли или гость завис.
  • vsphere_host_count упал — потеряли ESXi-хост (HA event).

CPU contention

  • rate(vsphere_cpu_ready_sum[5m]) / 200 (на 1 vCPU за 20s окно = 20000 ms) → доля времени ready. Алерт > 5%.
  • vsphere_cpu_latency_avg > 5 — VM ждёт CPU > 5% времени.
  • vsphere_cpu_costop_sum > 0 стабильно — SMP-конкуренция, скорее всего у VM слишком много vCPU для текущего host’а.

Memory pressure

  • vsphere_mem_swapped_avg > 0 или vsphere_mem_vmmemctl_avg > 0 — ESXi отнимает у VM память (balloon или swap, активный reclaim).
  • vsphere_mem_active_avg / vsphere_mem_granted_avg > 0.9 — горячая VM, скоро упрётся в выделенный объём.
  • vsphere_mem_unreserved_avg на host’е стремится к 0 — кончается свободная физпамять для новых reservations.

Disk / Datastore

  • vsphere_disk_maxTotalLatency_latest > 20 (ms) — деградация storage путей или LUN-а.
  • vsphere_datastore_maxTotalLatency_latest > 30 (ms) — конкретный datastore тормозит.
  • rate(vsphere_disk_read_avg[5m]) и _write_avg — IOPS-профиль для capacity planning.

Сеть

  • rate(vsphere_net_packetsRx_sum[5m])_packetsTx_sum или наоборот — асимметрия (приёмник/отправитель).
  • vsphere_net_pnicBytesRx_avg приближается к bandwidth NIC → насыщение физического линка.

Capacity / shape

  • vsphere_vm_count per cluster в динамике — рост парка.
  • vsphere_cpu_totalCapacity_avg - sum(rate(vsphere_cpu_usagemhz_avg)) — свободная capacity для миграций.

События vSphere

При collect_events: true чек подписывается на vSphere Event Manager и шлёт каждое событие в ProtoOBP backend как Event с тегами vcenter_server, vsphere_datacenter, vsphere_host, vsphere_vm.

Покрываются стандартные события vCenter:

  • VM lifecycle: VmCreatedEvent, VmRemovedEvent, VmClonedEvent, VmReconfiguredEvent, VmRenamedEvent.
  • Power: VmPoweredOnEvent, VmPoweredOffEvent, VmSuspendedEvent, VmGuestRebootEvent, VmGuestShutdownEvent.
  • Migration: VmMigratedEvent (vMotion), VmRelocatedEvent (Storage vMotion), DrsVmMigratedEvent (DRS-driven), DrsVmPoweredOnEvent.
  • HA / Cluster: HostConnectionLostEvent, HostDisconnectedEvent, HostShutdownEvent, DasHostFailedEvent, VmFailedToPowerOnEvent.
  • Permission / Auth: UserLoginSessionEvent, UserLogoutSessionEvent, BadUsernameSessionEvent, PermissionAddedEvent.
  • Alarms: AlarmStatusChangedEvent, AlarmCreatedEvent.