vSphere monitoring checklist: the signals every host, VM, and vCenter needs

Send this to someone standing up vSphere monitoring for the first time, or rebuilding an alerting setup that pages too often and misses real incidents. It lists the signals worth collecting across the hypervisor plane (ESXi hosts and VMs) and the management plane (vCenter Server Appliance).

vSphere does not fail like a generic Linux box. CPU contention is invisible from inside the guest. Memory goes from fine to catastrophic in minutes once host swapping starts. A datastore at 99% full looks identical to one at 5% full from inside a VM, until every VM on it halts. And vCenter can degrade for weeks before anyone notices, because DRS, HA, and the API quietly keep working until they don’t. Generic CPU/disk/network dashboards miss most of this.

Use this checklist as a ladder. Survival is the floor: it tells you when something is dead. Operational catches the incidents that cause 3 a.m. pages. Mature and Expert add depth that experienced operators add after painful lessons. Skip levels at your own risk; a team that jumps straight to per-NUMA-node CPU tracking without monitoring host swap is going to have a bad time.

The two planes: hypervisor and management

A vSphere environment has two interdependent planes, and you must monitor them separately. Signals from one plane do not substitute for signals from the other.

Hypervisor plane (per ESXi host and per VM). This is where workloads run. The VMkernel scheduler arbitrates CPU, the four-tier memory reclamation cascade (TPS, balloon, compression, host swap) decides who gets punished when memory is tight, and the storage I/O path queues VM disk traffic. Most performance incidents live here.

Management plane (vCenter Server Appliance). This is the control plane. vpxd and an embedded PostgreSQL (vPostgres) hold inventory, tasks, events, alarms, and stats. When vCenter degrades, you lose DRS, HA monitoring, vMotion orchestration, provisioning, and visibility. Running VMs keep running, but you can no longer manage them.

flowchart TD
  subgraph Mgmt["Management plane: vCenter/VCSA"]
    M1["SDK/api reachable"]
    M2["vpxd + vPostgres up"]
    M3["/storage/* partitions"]
    M4["Cert expiry (STS + machine SSL)"]
    M5["DRS + HA cluster health"]
  end
  subgraph Hyp["Hypervisor plane: per host + per VM"]
    H1["Host connected + VM power state"]
    H2["CPU ready, co-stop, max-limited"]
    H3["Balloon, compression, swap"]
    H4["DAVG/KAVG/GAVG + queue depth"]
    H5["Snapshot age + datastore free"]
  end
  M2 -.depends on.-> M3
  M4 -.breaks.-> M1
  M2 -.manages.-> H1
  M5 -.reads.-> H2
  M5 -.reads.-> H3

Survival: is it up?

The absolute minimum. With only these, you know when something is dead but you are blind to degradation.

SignalPlaneSourcePage when
ESXi host connection stateHypervisorHostSystem.runtime.connectionStateHost notResponding for more than 10 minutes while another host in the cluster is connected
VM power stateHypervisorVM runtimeUnexpected poweredOff on a production VM
Datastore free spaceHypervisoresxcli storage filesystem list, datastore summaryLess than 5% free and less than 500GB free (or less than 10GB on small datastores)
vCenter SDK reachabilityManagementAuthenticated POST /sdk RetrieveServiceContentAny failure of an authenticated probe
vpxd and vPostgres upManagementvmon-cli --status, service-control --statusEither service down after VCSA uptime exceeds 600s
Machine SSL and STS cert expiryManagementvecs-cli, checksts.pyAny certificate already expired

Ship only these six signals and you catch the most common outages: host down, datastore full, vCenter down, certificate expired. You miss everything that degrades slowly.

Operational: the signals that catch real incidents

This is the level where a competent team can actually diagnose a production incident. Grouped by domain.

Host and VM compute

SignalWhy it mattersWarning sign
CPU ready per VM (cpu.ready.summation)Time a vCPU was runnable but waiting for a pCPU. Invisible from inside the guest.More than 5% sustained is TICKET; more than 10% sustained with host CPU above 85% is PAGE
CPU co-stop (cpu.costop.summation)Multi-vCPU scheduling penalty.More than 3% sustained; near-zero is healthy
CPU max-limited (cpu.maxlimited.summation)Time lost to a forgotten CPU limit. Looks like contention from inside the guest.Any non-zero value where the VM owner reports perf issues
Host CPU utilizationOverall compute pressure.More than 85% sustained with ready above 5%
NUMA localityPercentage of memory accesses satisfied locally.Below 80% for any workload; below 70% for databases

Convert ready and co-stop summation counters to a percentage: value_ms / (interval_ms * vCPU_count) * 100. The raw counter is in milliseconds and rolls up, which hides spikes. A VM at 0% ready for 4.5 minutes and 50% for 30 seconds looks like 5% in a 5-minute rollup.

The vCPU oversizing trap is the most common mistake at this level. Adding vCPUs increases ready time because the scheduler must find more simultaneously-free pCPUs. A 16-vCPU VM on a host at 65% utilization can still have severe ready and co-stop. Co-stop is the smoking gun.

Memory

Memory is cliff-edge. A host at 85% consumed might be fine, or it might be in crisis. Percentage tells you nothing.

SignalWhy it mattersWarning sign
Balloon per VM (mem.vmmemctl.average)First tier of active reclamation. Forces guest paging invisible to ESXi.More than 5% of VM configured memory sustained; any sustained non-zero is PLAN
Host swap rate (mem.swapinRate.average, mem.swapoutRate.average)Last resort. Orders of magnitude slower than RAM.Any sustained swap-in above 0 for more than 60 seconds is PAGE
Memory compression rate (mem.compressionRate.average)The danger zone between balloon and swap.Any sustained non-zero
Swap with zero balloonVMware Tools not running or balloon driver disabled. Host skipped directly to swap.Always investigate

Watch for the cascade: balloon rises, then compression, then swap-out, then swap-in. Once swap-in is non-zero you are in an active emergency on every VM on the host. Swap I/O also competes with VM disk I/O on the datastore, which feeds back into storage latency.

Storage

SignalWhy it mattersWarning sign
DAVG (disk.deviceLatency.average)Latency at the physical device.All-flash: above 5ms; HDD: above 20ms
KAVG (disk.kernelLatency.average)Latency added by the VMkernel (queue, locks).Above 2ms indicates VMkernel queuing
GAVG (disk.totalLatency.average)Total latency seen by the VM.Above 30ms sustained with QUED above 0 is PAGE
Outstanding I/Os (QUED, ACTV)Queue saturation.QUED above 0 sustained for more than 30 seconds
Datastore free spaceCliff-edge at 100%.Less than 5% and less than 500GB free is PAGE
Snapshot age and chain depthForgotten snapshots fill datastores and slow reads.Older than 72 hours or chain deeper than 3

The DAVG/KAVG split tells you where the problem lives. High DAVG with normal KAVG means the array or IP storage network is the bottleneck. High KAVG with normal DAVG means the VMkernel is queuing: SCSI reservation conflicts, VMFS metadata locking, or queue depth saturation. Treat NFS datastores as a special case, because DAVG includes network latency to the NFS server.

The snapshot time bomb is the single most common preventable incident. A snapshot left for weeks grows a delta VMDK that consumes the same datastore as the base disk, and consolidation of a large delta stuns the VM. VMware recommends no more than 2-3 snapshots per chain and no snapshot older than 72 hours.

Network

SignalWhy it mattersWarning sign
Dropped packets per vNIC and pNICRing buffer overflow, traffic shaping, uplink saturation.Any sustained non-zero outside configured shaping
Physical uplink utilizationNIC teams do not aggregate bandwidth per flow. vMotion can consume an entire 10GbE link.Above 80% sustained on any uplink
vMotion failures and stun timeInfrastructure mismatch, vMotion net congestion, memory-dirty workloads.Any failure; stun more than 5 seconds on production VMs

Availability and HA

SignalWhy it mattersWarning sign
ESXi host connection stateLost management connectivity, potential HA event.notResponding for more than 10 minutes with another host connected is PAGE
HA cluster health and failover capacityWhether HA can restart VMs after host failure.Host isolated or partitioned for more than 5 minutes is PAGE; admission control violation is TICKET
VM heartbeat (VMware Tools)Guest OS liveness. Red heartbeat with VM running suggests guest crash or extreme CPU starvation.Red for more than 60 seconds on production VM
DRS balance and migration countWhether DRS is actually balancing or thrashing.High imbalance despite migrations; more than 10 migrations/hour sustained

HA uses both network and datastore heartbeats. If a host loses network heartbeats but datastore heartbeats continue, the host is “isolated” not “dead,” and the isolation response policy decides what happens next. Always know your isolation response. “Leave powered on” avoids split-brain but leaves VMs on the isolated host unmanageable.

vCenter itself

vCenter is infrastructure. Monitor it like infrastructure.

SignalWhy it mattersWarning sign
Per-partition disk usageA specific /storage/* mount fills while / looks fine./storage/db above 80%; /storage/log above 85%; any partition at 100% is PAGE
vPostgres database sizeSEAT tables (stats, events, alarms, tasks) grow without bound.vpx_event more than 10M rows; growth more than 1GB/week
NTP offsetClock skew breaks SSO, cert validation, log correlation.More than 5 seconds drift is TICKET
vpxd error rateSpecific patterns precede outages.OOM, database-connect, SSL/cert errors; more than 3x baseline
Authentication failure rateBrute force, broken service accounts.More than 10 failures from single IP in 1 hour
All certificate typesMachine SSL, STS signing, solution user, VMCA root. STS is the most critical and invisible in a browser.Expired is PAGE; less than 7 days is TICKET; less than 30 days is PLAN

Critical detail on certificates: the STS signing certificate is separate from the machine SSL certificate. The STS cert is not visible in a browser, has its own lifecycle, and causes complete authentication failure when it expires. Check it with checksts.py (the vSphere Certificate Checker script published in VMware KB 79163 ), not with openssl s_client against port 443. Starting in vCenter 8.0 U3h, Machine SSL certificates issued by VMCA may auto-renew shortly before expiry when VMCA certificate mode is set, but this does not cover every certificate type. The STS cert must still be checked manually on current releases.

Critical detail on disk: the VCSA has roughly ten dedicated /storage/* mounts. /storage/log fills fastest when a service is error-looping, because errors generate more logs, which fill the partition, which causes more services to fail. /storage/db filling crashes vPostgres, which is immediately catastrophic.

Mature: signals for proactive teams

Add these once Operational is solid. They give 30 to 60 minutes of warning before most outages.

  • Per-service CPU and memory on the VCSA (vpxd, vPostgres, STS, rhttpproxy), not just overall appliance utilization. Per-service data points to which subsystem is the bottleneck.
  • vPostgres internals: connection count vs max_connections, dead tuple ratio on major tables, WAL directory size, longest running transaction. Dead tuples above 30% on a major table means autovacuum is losing.
  • VCSA VM-level metrics from the hypervisor. A VCSA at 0% internal CPU with 50% CPU ready at the host is severely degraded. Memory balloon, swap, and datastore latency at the VM level are invisible from inside the guest.
  • Task queue depth and average task duration. VM power-on taking 30 seconds instead of 10, or vMotion taking 30 minutes instead of 5, is the user-facing pain metric.
  • Statistics rollup lag. If the 5-minute rollup takes more than 4 minutes, it is about to overlap the next interval. Historical charts go stale and the rollup itself creates I/O pressure.
  • CPU co-stop and max-limited per VM. Add co-stop to every multi-vCPU VM.
  • NUMA locality per VM for databases and in-memory caches.
  • Memory compression rate per host as an early warning before swap.
  • Network dropped packets and per-uplink utilization individually, not aggregated.
  • VCHA replication state and lag if you run vCenter HA.
  • vCLS health. If vCLS VMs are powered off or deleted, DRS stops working. Check under Cluster > Monitor > vSphere Cluster Services.
  • Storage path health and APD/PDL events. A single remaining path to a production datastore is a TICKET; APD or PDL is a PAGE.

Expert: signals earned the hard way

Operators add these after a specific incident.

  • Per-VM SCSI sense codes. Reading them resolves storage incidents hours faster.
  • SCSI reservation conflicts per LUN for VMFS metadata lock contention.
  • Per-VM CPU system vs user time. High system time often points to VMkernel overhead from NSX or storage drivers.
  • vMotion network and vSAN network latency via vmkping.
  • Guest OS time drift inside VMs after vMotion or snapshot revert.
  • Per-NUMA-node CPU utilization to catch asymmetric load.
  • VMkernel log error rate (/var/log/vmkernel.log) for early hardware and driver failure.
  • STS Java heap utilization and GC frequency.
  • vPostgres checkpoint frequency and autovacuum cadence per table.
  • vmon restart counts per service to catch silent crash loops that external probes miss.
  • SDK session count by client IP to find the misbehaving backup or monitoring integration hammering the API.
  • Path state change rate to detect path thrashing before it becomes an outage.

What most teams get wrong

  • Monitoring guest CPU instead of host CPU ready. A VM at 30% guest CPU with 15% ready is running at roughly 85% of requested speed. The guest has no idea.
  • Treating memory as a percentage. A host at 85% consumed might be fine, or might be actively swapping. Monitor balloon, compression, and swap as independent reclamation indicators.
  • No snapshot monitoring. Snapshots are the number one preventable cause of datastore-full incidents. Monitor count and age daily.
  • Blaming the array when KAVG is the problem. DAVG and KAVG must be monitored separately.
  • Cluster averages instead of per-host data. A cluster averaging 60% can have one host at 90% and another at 30%.
  • Not monitoring vCenter itself. Thousands of VM dashboards, zero on the VCSA disk and database.
  • Missing CPU limits (max-limited). A limit-constrained VM shows low ready and high max-limited. Many environments have forgotten limits silently throttling production.
  • NIC teaming treated as bandwidth aggregation. A failed uplink means all traffic shifts to the remaining link. Teaming does not aggregate per flow unless you use LACP with an appropriate hashing policy, and even then a single flow uses one link.
  • HA “protected” with admission control disabled. “Protected” is aspirational. With admission control off, restart capacity is not guaranteed.
  • Ignoring certificate expiration. It hits teams every two years like clockwork, on the STS signing cert, not the browser cert.
  • Latency without queue context. High latency with empty queues points to a different cause than high latency with full queues.
  • vSAN capacity blindness. vSAN degrades significantly above 70% capacity, unlike traditional arrays.

How Netdata helps

Netdata’s value in a vSphere environment is correlation across the two planes at per-second resolution, which catches the spikes vCenter’s 5-minute rollups hide. The netdata/go.d vSphere collector pulls host and VM performance counters from the vCenter API; VCSA service and filesystem health is collected via the standard Linux collector set once SSH or agent-based collection is enabled on the appliance.

  • Per-second CPU ready, co-stop, and max-limited per VM, alongside host CPU utilization, lets you distinguish genuine overcommitment (high ready plus high host CPU) from vCPU oversizing (high ready plus moderate host CPU) from forgotten limits (low ready plus high max-limited).
  • Memory cascade correlation: balloon, compression, and host swap on the same chart makes the death spiral visible before swap-in starts.
  • DAVG, KAVG, and GAVG alongside queue depth per datastore identifies whether latency originates at the array, the VMkernel, or both.
  • Anomaly detection on vpxd error rate and SDK response time surfaces slow degradation that precedes vCenter outages, well before thresholds trip.
  • Certificate expiry tracking across all certificate types (including STS, not just machine SSL) prevents the most common preventable vCenter outage.
  • Composite pattern detection for the memory cascade, storage latency cliff, and vpxd overload cascade, so you see the pattern forming instead of reacting to a single threshold.