| 1 | # vSphere Collector V1 Compatibility Manifest |
| 2 | |
| 3 | Status: superseded historical baseline from the vSphere V2 migration in |
| 4 | PR #22458 / commit `18991fd4e`. |
| 5 | |
| 6 | The executable V1 golden fixture |
| 7 | `src/go/plugin/go.d/collector/vsphere/testdata/v1_compat_manifest.json` and |
| 8 | `TestCollector_V1CompatibilityManifest` were removed on 2026-05-22 with the |
| 9 | runtime chart bridge cleanup. Current executable coverage is provided by |
| 10 | `TestCollector_ChartTemplateYAML`, `TestCollector_V2CompatibilitySurface`, |
| 11 | `collecttest.AssertChartCoverage`, feature-specific V2 plan tests, and full |
| 12 | vSphere collector tests. |
| 13 | |
| 14 | This file is retained as migration-history evidence. Tables below that describe |
| 15 | pre-merge experiments removed by later user decisions are historical, not the |
| 16 | current accepted configuration or metric surface. |
| 17 | |
| 18 | This manifest records the pre-migration v1 contract that guides the framework v2 migration. |
| 19 | The migration preserves contexts, dimensions, old labels, units, configuration, |
| 20 | and metric meaning. Chart IDs are recorded for traceability but intentionally |
| 21 | change to normal framework V2 instance chart IDs by user decision on 2026-05-08. |
| 22 | The V2 chartengine path adds one new instance label, `id`, set to the vSphere |
| 23 | managed-object reference that V1 used as the chart-ID prefix. |
| 24 | |
| 25 | Runtime substitution: |
| 26 | |
| 27 | - `%s` in chart and dimension IDs is the vSphere managed object reference value |
| 28 | stored as the Netdata resource ID, for example synthetic `vcsim` IDs such as |
| 29 | `vm-62`, `host-21`, `datastore-59`, `domain-c28`, or `resgroup-27`. |
| 30 | - Default chart type is `line` when the code does not set `Type`. |
| 31 | - Default dimension algorithm is `absolute`; default multiplier and divisor are |
| 32 | `1`. |
| 33 | |
| 34 | ## Sources |
| 35 | |
| 36 | - `src/go/plugin/go.d/collector/vsphere/collector.go` |
| 37 | - `src/go/plugin/go.d/collector/vsphere/charts.yaml` (current chart source of truth; the transitional Go chart mirror was removed on 2026-05-22) |
| 38 | - `src/go/plugin/go.d/collector/vsphere/collect.go` |
| 39 | - `src/go/plugin/go.d/collector/vsphere/discover/metric_lists.go` |
| 40 | - `src/go/plugin/go.d/collector/vsphere/config_schema.json` |
| 41 | - `src/go/plugin/go.d/collector/vsphere/metadata.yaml` |
| 42 | - `src/go/plugin/go.d/config/go.d/vsphere.conf` |
| 43 | - `src/health/health.d/vsphere.conf` |
| 44 | - `src/go/plugin/go.d/collector/vsphere/collector_test.go` |
| 45 | |
| 46 | Removed executable golden scope: |
| 47 | |
| 48 | - the deleted golden fixture recorded V1 chart IDs and pinned contexts, titles, |
| 49 | units, families, chart types, priorities, label keys, label sources, |
| 50 | dimension names/algorithms/scales/options, and metric sample keys/values from |
| 51 | `vcsim`; |
| 52 | - it did not pin simulator-specific label values because `vcsim` can assign VM |
| 53 | runtime host labels differently between runs; |
| 54 | - it is no longer regenerated. Current V2 validation relies on chart-template |
| 55 | generation, chartengine materialization, metric-store coverage, and focused |
| 56 | feature tests instead of a large V1 runtime-chart golden. |
| 57 | |
| 58 | ## Collector Registration And Defaults |
| 59 | |
| 60 | | Field | Current v1 contract | |
| 61 | |---|---| |
| 62 | | Module | `vsphere` | |
| 63 | | Framework registration baseline | Pre-migration `Create`, returning `collectorapi.CollectorV1`; current implementation registers `CreateV2` while preserving this public chart/metric surface except chart IDs. | |
| 64 | | Default `update_every` | `20` seconds | |
| 65 | | Default HTTP timeout | `20s` | |
| 66 | | Default discovery interval | `5m` | |
| 67 | | Default host include | `/*` | |
| 68 | | Default VM include | `/*` | |
| 69 | | Default datastore include | `/*` | |
| 70 | | Default cluster include | `/*` | |
| 71 | | Default inventory path label | `false` | |
| 72 | | Default VM guest labels | empty allowlist | |
| 73 | | Default vSphere tag category labels | empty allowlist | |
| 74 | | Default custom attribute labels | empty allowlist | |
| 75 | | Default datastore cluster collection | `false` | |
| 76 | | Default datastore cluster include | `/*` | |
| 77 | | Default host NIC performance collection | `false` | |
| 78 | | Default host NIC include | `*` | |
| 79 | | Default host disk performance collection | `false` | |
| 80 | | Default host disk include | `*` | |
| 81 | | Default host storage adapter performance collection | `false` | |
| 82 | | Default host storage adapter include | `*` | |
| 83 | | Default host storage path performance collection | `false` | |
| 84 | | Default host storage path include | `*` | |
| 85 | | Default host CPU instance performance collection | `false` | |
| 86 | | Default host CPU instance include | `*` | |
| 87 | | Default vSAN collection | `false` | |
| 88 | | Default network topology collection | `false` | |
| 89 | | Collection output baseline | Pre-migration `Collect(context.Context) map[string]int64`; current public collection path writes to the framework V2 metric store. | |
| 90 | | Config schema embed | `config_schema.json` | |
| 91 | |
| 92 | ## Historical Configuration Contract |
| 93 | |
| 94 | This table records the migration baseline before later cleanup decisions. It is |
| 95 | not the authoritative current accepted surface after the 2026-05-20 and |
| 96 | 2026-05-22 removals documented in PR #22458 / commit `18991fd4e`. |
| 97 | |
| 98 | | YAML key | JSON key | Required by schema | Notes | |
| 99 | |---|---|---:|---| |
| 100 | | `vnode` | `vnode` | no | Existing job-level vnode association. | |
| 101 | | `update_every` | `update_every` | no | Default `20`. | |
| 102 | | `autodetection_retry` | `autodetection_retry` | no | Schema default `60`; metadata lists `0`. Preserve accepted key. | |
| 103 | | `url` | `url` | yes | From embedded HTTP config. | |
| 104 | | `timeout` | `timeout` | no | From embedded HTTP config. | |
| 105 | | `discovery_interval` | `discovery_interval` | no | Minimum `60`, default `300`. | |
| 106 | | `not_follow_redirects` | `not_follow_redirects` | no | From embedded HTTP config. | |
| 107 | | `host_include` | `host_include` | no | Selector list, default `/*`. | |
| 108 | | `vm_include` | `vm_include` | no | Selector list, default `/*`. | |
| 109 | | `datastore_include` | `datastore_include` | no | Selector list, default `/*`. | |
| 110 | | `cluster_include` | `cluster_include` | no | Selector list, default `/*`. | |
| 111 | | `tag_categories` | `tag_categories` | no | Optional vSphere tag category label allowlist. Default empty; each YAML list item is one glob pattern matching a tag category name. Matching categories become labels named `vsphere_tag_<sanitized_category>`; multiple tags in one category are sorted and joined with the pipe character. | |
| 112 | | `custom_attributes` | `custom_attributes` | no | Optional vSphere custom attribute label allowlist. Default empty; each YAML list item is one glob pattern matching a custom attribute name. Matching attributes become labels named `vsphere_custom_attribute_<sanitized_name>`. | |
| 113 | | `collect_datastore_clusters` | `collect_datastore_clusters` | no | Optional datastore cluster / StoragePod metrics. Default `false`. | |
| 114 | | `datastore_cluster_include` | `datastore_cluster_include` | no | Optional simple-pattern allowlist for datastore clusters. Default `/*`; matches `/Datacenter/DatastoreCluster`, datastore-cluster name, or managed object ID. | |
| 115 | | `collect_vsan` | `collect_vsan` | no | Optional vSAN metrics. Default `false`; requests vSAN cluster space/health and vSAN cluster, host, and VM performance metrics through the vSAN Management API for vSAN-enabled clusters. | |
| 116 | | `vsan_cluster_include` | `vsan_cluster_include` | no | Optional simple-pattern allowlist for vSAN-enabled clusters. Default `/*`; matches `/Datacenter/Cluster`, cluster name, managed object ID, or `vsan_uuid:<uuid>`. | |
| 117 | | `vsan_host_include` | `vsan_host_include` | no | Optional simple-pattern allowlist for vSAN host performance entities. Default `/*`; matches `/Datacenter/Cluster/Host`, host name, managed object ID, or `vsan_node_uuid:<uuid>`. | |
| 118 | | `vsan_vm_include` | `vsan_vm_include` | no | Optional simple-pattern allowlist for vSAN VM performance entities. Default `/*`; matches `/Datacenter/Cluster/Host/VM`, VM name, managed object ID, or `instance_uuid:<uuid>`. | |
| 119 | | `collect_network_topology` | `collect_network_topology` | no | Optional vSphere Network discovery for the cached topology Function. Default `false`; discovers Network/Distributed Virtual Port Group objects for topology only and emits no charts or metrics. | |
| 120 | | `username` | `username` | yes | Sensitive. | |
| 121 | | `password` | `password` | yes | Sensitive. | |
| 122 | | `bearer_token_file` | `bearer_token_file` | no | Hidden in UI schema. | |
| 123 | | `force_http2` | `force_http2` | no | Hidden in UI schema. | |
| 124 | | `proxy_url` | `proxy_url` | no | From embedded HTTP config. | |
| 125 | | `proxy_username` | `proxy_username` | no | Sensitive. | |
| 126 | | `proxy_password` | `proxy_password` | no | Sensitive. | |
| 127 | | `headers` | `headers` | no | Object or null. | |
| 128 | | `tls_skip_verify` | `tls_skip_verify` | no | From embedded HTTP config. | |
| 129 | | `tls_ca` | `tls_ca` | no | Absolute path or empty. | |
| 130 | | `tls_cert` | `tls_cert` | no | Absolute path or empty. | |
| 131 | | `tls_key` | `tls_key` | no | Absolute path or empty. | |
| 132 | | `body` | `body` | no | Hidden in UI schema. | |
| 133 | | `method` | `method` | no | Hidden in UI schema. | |
| 134 | |
| 135 | Stock config examples: |
| 136 | |
| 137 | - `vcenter1`: `url`, `username`, `password` |
| 138 | - `vcenter2`: `url`, `username`, `password` |
| 139 | - The stock config also documents selector formats, secret resolver syntax, |
| 140 | optional `vnode`, safe discovery defaults, and every valid host/VM power |
| 141 | state as commented examples. |
| 142 | |
| 143 | ## Label Contract |
| 144 | |
| 145 | | Resource | Labels and value sources | |
| 146 | |---|---| |
| 147 | | Inventory | V2 adds `id=inventory`; no old V1 labels | |
| 148 | | VM | `datacenter=vm.Hier.DC.Name`, `cluster=getVMClusterName(vm)`, `host=vm.Hier.Host.Name`, `vm=vm.Name`; V2 also adds `id=vm.ID` | |
| 149 | | Host | `datacenter=host.Hier.DC.Name`, `cluster=getHostClusterName(host)`, `host=host.Name`; V2 also adds `id=host.ID` | |
| 150 | | Datastore | `datacenter=ds.Hier.DC.Name`, `datastore=ds.Name`, `type=ds.Type`; V2 also adds `id=ds.ID` | |
| 151 | | Cluster | `datacenter=cl.Hier.DC.Name`, `cluster=cl.Name`; V2 also adds `id=cl.ID` | |
| 152 | | Datastore cluster | `id=pod.ID`, `datacenter=pod.Hier.DC.Name`, `datastore_cluster=pod.Name` | |
| 153 | | Host physical network interface performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name`, `interface=<vSphere-performance-instance>`, `interface_instance=<vSphere-performance-instance>` | |
| 154 | | Host disk/LUN/device performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name`, `disk=<vSphere-performance-instance>`, `disk_instance=<vSphere-performance-instance>` | |
| 155 | | Host storage adapter performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name`, `adapter=<vSphere-performance-instance>`, `adapter_instance=<vSphere-performance-instance>` | |
| 156 | | Host storage adapter aggregate performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name` | |
| 157 | | Host storage path performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name`, `path=<vSphere-performance-instance>`, `path_instance=<vSphere-performance-instance>` | |
| 158 | | Host storage path aggregate performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name` | |
| 159 | | Host CPU instance performance | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=host.Hier.Cluster.Name`, `host=host.Name`, `cpu=<vSphere-performance-instance>`, `cpu_instance=<vSphere-performance-instance>` | |
| 160 | | vSAN cluster | `id=cluster.ID`, `datacenter=cluster.Hier.DC.Name`, `cluster=cluster.Name`, `vsan_uuid=cluster.VSANUUID` | |
| 161 | | vSAN host | `id=host.ID`, `datacenter=host.Hier.DC.Name`, `cluster=getHostClusterName(host)`, `host=host.Name`, `vsan_node_uuid=host.VSANNodeUUID` | |
| 162 | | vSAN VM | `id=vm.ID`, `datacenter=vm.Hier.DC.Name`, `cluster=getVMClusterName(vm)`, `host=vm.Hier.Host.Name`, `vm=vm.Name`, `vm_instance_uuid=vm.InstanceUUID` | |
| 163 | | Resource pool | `datacenter=rp.Hier.DC.Name`, `cluster=rp.Hier.Cluster.Name`, `resource_pool=rp.Name`; V2 also adds `id=rp.ID` | |
| 164 | |
| 165 | Compatibility details: |
| 166 | |
| 167 | - `getVMClusterName()` returns an empty string when the VM cluster name equals |
| 168 | the host name. |
| 169 | - `getHostClusterName()` returns an empty string when the host cluster name |
| 170 | equals the host name. |
| 171 | - By default, no per-resource V2 host scopes are created; all metrics follow |
| 172 | the current job/global host behavior, with optional job-level `vnode`. |
| 173 | - Collector-generated ESXi/VM vnodes are excluded from this PR by user decision |
| 174 | on 2026-05-20. Reintroducing them requires a separate design for stable |
| 175 | resource identity and host-scope lifecycle. |
| 176 | - Empty host or VM real-time performance scrape results do not abort the whole |
| 177 | collection cycle. The collector logs a warning and still emits available |
| 178 | property/status metrics plus the remaining datastore, cluster, resource-pool, |
| 179 | and vSAN surfaces. |
| 180 | - Optional `tag_categories` and `custom_attributes` add user-defined |
| 181 | vSphere metadata labels to VM, host, datastore, cluster, resource-pool, and |
| 182 | datastore-cluster metrics when the matching resource has those values. |
| 183 | Labels use sanitized keys prefixed with `vsphere_tag_` or |
| 184 | `vsphere_custom_attribute_`. These labels are default-off because they may |
| 185 | expose ownership, business, environment, or internal naming data. |
| 186 | |
| 187 | ## Function Contract |
| 188 | |
| 189 | - `vsphere:readiness` is a read-only module Function with the framework job |
| 190 | selector parameter. It reports cached collector readiness rows for |
| 191 | target/credential presence, client/discovery/performance-counter state, |
| 192 | inventory counts, optional metric/label gates, network-topology gate, |
| 193 | and cached vSAN counts. It does not expose the configured vCenter URL, |
| 194 | username, password, or object inventory names, and it does not issue extra |
| 195 | vCenter API calls. |
| 196 | - `topology:vsphere` is the public read-only topology Function alias with the |
| 197 | framework job selector parameter and response type `topology`. It reports |
| 198 | cached inventory actors and links for datacenters, clusters, ESXi hosts, VMs, |
| 199 | datastores, datastore clusters, and resource pools. When |
| 200 | `collect_network_topology` is enabled, it also includes cached vSphere |
| 201 | Network/Distributed Virtual Port Group actors, accessibility/status |
| 202 | attributes, and host/VM network links. The canonical framework method also |
| 203 | registers as `vsphere:topology:vsphere`, but topology consumers should use |
| 204 | `topology:vsphere` to match the existing topology Function convention. |
| 205 | - Function surfaces are additive and do not change metric contexts, |
| 206 | dimensions, chart templates, default host scopes, or existing configuration |
| 207 | behavior. |
| 208 | |
| 209 | ## Chart And Dimension Contract |
| 210 | |
| 211 | | Resource | Lifecycle | Chart ID template | Context | Family | Units | Type | Priority constant | Dimensions | |
| 212 | |---|---|---|---|---|---|---|---|---| |
| 213 | | Inventory | static job-level chart from collector initialization | `inventory_objects` | `vsphere.inventory_objects` | `inventory` | `objects` | `line` | `prioInventoryObjects` | `inventory_datacenters=>datacenters`; `inventory_folders=>folders`; `inventory_clusters=>clusters`; `inventory_hosts=>hosts`; `inventory_vms=>vms`; `inventory_datastores=>datastores`; `inventory_resource_pools=>resource_pools` | |
| 214 | | Datastore cluster | optional charted only when `collect_datastore_clusters` is enabled and the StoragePod matches `datastore_cluster_include` | `datastore_cluster_space_utilization` | `vsphere.datastore_cluster_space_utilization` | `datastore clusters space` | `percentage` | `line` | optional V2 template | `datastore_cluster_space_utilization_used=>used div=100` | |
| 215 | | Datastore cluster | optional charted only when `collect_datastore_clusters` is enabled and the StoragePod matches `datastore_cluster_include` | `datastore_cluster_space_usage` | `vsphere.datastore_cluster_space_usage` | `datastore clusters space` | `bytes` | `line` | optional V2 template | `datastore_cluster_space_usage_capacity=>capacity`; `datastore_cluster_space_usage_free=>free`; `datastore_cluster_space_usage_used=>used` | |
| 216 | | Datastore cluster | optional charted only when `collect_datastore_clusters` is enabled and the StoragePod matches `datastore_cluster_include` | `datastore_cluster_storage_drs_status` | `vsphere.datastore_cluster_storage_drs_status` | `datastore clusters status` | `status` | `line` | optional V2 template | `datastore_cluster_storage_drs_status_enabled=>enabled`; `datastore_cluster_storage_drs_status_disabled=>disabled` | |
| 217 | | vSAN cluster | optional charted only when `collect_vsan` is enabled and vSAN space usage is returned for a vSAN-enabled cluster | `vsan_cluster_space_utilization` | `vsphere.vsan_cluster_space_utilization` | `vSAN clusters space` | `percentage` | `line` | optional V2 template | `vsan_cluster_space_utilization_used=>used div=100` | |
| 218 | | vSAN cluster | optional charted only when `collect_vsan` is enabled and vSAN space usage is returned for a vSAN-enabled cluster | `vsan_cluster_space_usage` | `vsphere.vsan_cluster_space_usage` | `vSAN clusters space` | `bytes` | `stacked` | optional V2 template | `vsan_cluster_space_usage_used=>used`; `vsan_cluster_space_usage_free=>free`; `vsan_cluster_space_usage_total=>total hidden` | |
| 219 | | vSAN cluster | optional charted only when `collect_vsan` is enabled and vSAN health is returned for a vSAN-enabled cluster | `vsan_cluster_health_status` | `vsphere.vsan_cluster_health_status` | `vSAN clusters space` | `status` | `line` | optional V2 template | `vsan_cluster_health_status_green=>green`; `vsan_cluster_health_status_yellow=>yellow`; `vsan_cluster_health_status_red=>red`; `vsan_cluster_health_status_unknown=>unknown` | |
| 220 | | vSAN cluster performance | optional charted only when `collect_vsan` is enabled and vSAN cluster performance is returned | `vsan_cluster_operations`; `vsan_cluster_throughput`; `vsan_cluster_latency`; `vsan_cluster_congestions` | `vsphere.vsan_cluster_operations`; `vsphere.vsan_cluster_throughput`; `vsphere.vsan_cluster_latency`; `vsphere.vsan_cluster_congestions` | `vSAN clusters performance` | `operations/s`; `bytes/s`; `microseconds`; `congestions/s` | `line`/`area` | optional V2 template | read/write operations, read/write throughput, read/write latency, congestions | |
| 221 | | vSAN host performance | optional charted only when `collect_vsan` is enabled and vSAN host performance is returned | `vsan_host_operations`; `vsan_host_throughput`; `vsan_host_latency`; `vsan_host_congestions`; `vsan_host_cache_hit_rate` | `vsphere.vsan_host_operations`; `vsphere.vsan_host_throughput`; `vsphere.vsan_host_latency`; `vsphere.vsan_host_congestions`; `vsphere.vsan_host_cache_hit_rate` | `vSAN hosts performance` | `operations/s`; `bytes/s`; `microseconds`; `congestions/s`; `percentage` | `line`/`area` | optional V2 template | read/write operations, read/write throughput, read/write latency, congestions, hit_rate | |
| 222 | | vSAN VM performance | optional charted only when `collect_vsan` is enabled and vSAN VM performance is returned | `vsan_vm_operations`; `vsan_vm_throughput`; `vsan_vm_latency` | `vsphere.vsan_vm_operations`; `vsphere.vsan_vm_throughput`; `vsphere.vsan_vm_latency` | `vSAN VMs performance` | `operations/s`; `bytes/s`; `microseconds` | `line`/`area` | optional V2 template | read/write operations, read/write throughput, read/write latency | |
| 223 | | VM | property/perf charted when VM is discovered | `%s_cpu_utilization` | `vsphere.vm_cpu_utilization` | `vms cpu` | `percentage` | `line` | `prioVMCPUUtilization` | `%s_cpu.usage.average=>used div=100` | |
| 224 | | VM | property/perf charted when VM is discovered | `%s_mem_utilization` | `vsphere.vm_mem_utilization` | `vms mem` | `percentage` | `line` | `prioVmMemoryUtilization` | `%s_mem.usage.average=>used div=100` | |
| 225 | | VM | property/perf charted when VM is discovered | `%s_mem_usage` | `vsphere.vm_mem_usage` | `vms mem` | `KiB` | `line` | `prioVmMemoryUsage` | `%s_mem.granted.average=>granted`; `%s_mem.consumed.average=>consumed`; `%s_mem.active.average=>active`; `%s_mem.shared.average=>shared` | |
| 226 | | VM | property/perf charted when VM is discovered | `%s_mem_swap_usage` | `vsphere.vm_mem_swap_usage` | `vms mem` | `KiB` | `line` | `prioVmMemorySwapUsage` | `%s_mem.swapped.average=>swapped` | |
| 227 | | VM | property/perf charted when VM is discovered | `%s_mem_swap_io_rate` | `vsphere.vm_mem_swap_io` | `vms mem` | `KiB/s` | `area` | `prioVmMemorySwapIO` | `%s_mem.swapinRate.average=>in`; `%s_mem.swapoutRate.average=>out` | |
| 228 | | VM | property/perf charted when VM is discovered | `%s_disk_io` | `vsphere.vm_disk_io` | `vms disk` | `KiB/s` | `area` | `prioVmDiskIO` | `%s_disk.read.average=>read`; `%s_disk.write.average=>write mul=-1` | |
| 229 | | VM | property/perf charted when VM is discovered | `%s_disk_max_latency` | `vsphere.vm_disk_max_latency` | `vms disk` | `milliseconds` | `line` | `prioVmDiskMaxLatency` | `%s_disk.maxTotalLatency.latest=>latency` | |
| 230 | | VM | property/perf charted when VM is discovered | `%s_net_traffic` | `vsphere.vm_net_traffic` | `vms net` | `KiB/s` | `area` | `prioVmNetworkTraffic` | `%s_net.bytesRx.average=>received`; `%s_net.bytesTx.average=>sent mul=-1` | |
| 231 | | VM | property/perf charted when VM is discovered | `%s_net_packets` | `vsphere.vm_net_packets` | `vms net` | `packets` | `line` | `prioVmNetworkPackets` | `%s_net.packetsRx.summation=>received`; `%s_net.packetsTx.summation=>sent mul=-1` | |
| 232 | | VM | property/perf charted when VM is discovered | `%s_net_drops` | `vsphere.vm_net_drops` | `vms net` | `drops` | `line` | `prioVmNetworkDrops` | `%s_net.droppedRx.summation=>received`; `%s_net.droppedTx.summation=>sent mul=-1` | |
| 233 | | VM | property/perf charted when VM is discovered | `%s_overall_status` | `vsphere.vm_overall_status` | `vms status` | `status` | `line` | `prioVmOverallStatus` | `%s_overall.status.green=>green`; `%s_overall.status.red=>red`; `%s_overall.status.yellow=>yellow`; `%s_overall.status.gray=>gray` | |
| 234 | | VM | property charted when VM is discovered | `%s_power_state` | `vsphere.vm_power_state` | `vms status` | `status` | `line` | `prioVMPowerState` | `%s_power_state.poweredOn=>powered_on`; `%s_power_state.poweredOff=>powered_off`; `%s_power_state.suspended=>suspended` | |
| 235 | | VM | property charted when VM is discovered | `%s_connection_state` | `vsphere.vm_connection_state` | `vms status` | `status` | `line` | `prioVMConnectionState` | `%s_connection_state.connected=>connected`; `%s_connection_state.disconnected=>disconnected`; `%s_connection_state.orphaned=>orphaned`; `%s_connection_state.inaccessible=>inaccessible`; `%s_connection_state.invalid=>invalid` | |
| 236 | | VM | property charted when VM is discovered | `%s_tools_running_status` | `vsphere.vm_tools_running_status` | `vms status` | `status` | `line` | `prioVMToolsRunningStatus` | `%s_tools_running_status.running=>running`; `%s_tools_running_status.notRunning=>not_running`; `%s_tools_running_status.executingScripts=>executing_scripts`; `%s_tools_running_status.unknown=>unknown` | |
| 237 | | VM | property charted when VM is discovered | `%s_tools_version_status` | `vsphere.vm_tools_version_status` | `vms status` | `status` | `line` | `prioVMToolsVersionStatus` | `%s_tools_version_status.current=>current`; `%s_tools_version_status.needUpgrade=>need_upgrade`; `%s_tools_version_status.notInstalled=>not_installed`; `%s_tools_version_status.unmanaged=>unmanaged`; `%s_tools_version_status.tooOld=>too_old`; `%s_tools_version_status.supportedOld=>supported_old`; `%s_tools_version_status.supportedNew=>supported_new`; `%s_tools_version_status.tooNew=>too_new`; `%s_tools_version_status.blacklisted=>blacklisted`; `%s_tools_version_status.unknown=>unknown` | |
| 238 | | VM | property charted when VM is discovered | `%s_consolidation_needed` | `vsphere.vm_consolidation_needed` | `vms status` | `status` | `line` | `prioVMConsolidationNeeded` | `%s_consolidation_needed.needed=>needed`; `%s_consolidation_needed.notNeeded=>not_needed` | |
| 239 | | VM | property/perf charted when VM is discovered | `%s_system_uptime` | `vsphere.vm_system_uptime` | `vms uptime` | `seconds` | `line` | `prioVmSystemUptime` | `%s_sys.uptime.latest=>uptime` | |
| 240 | | VM | property charted when VM is discovered | `%s_config_cpu` | `vsphere.vm_config_cpu` | `vms config` | `vCPUs` | `line` | `prioVMConfigCPU` | `%s_config_cpu=>vcpus` | |
| 241 | | VM | property charted when VM is discovered | `%s_config_memory` | `vsphere.vm_config_memory` | `vms config` | `MiB` | `line` | `prioVMConfigMemory` | `%s_config_memory=>memory` | |
| 242 | | VM | property charted when VM is discovered | `%s_config_devices` | `vsphere.vm_config_devices` | `vms config` | `devices` | `line` | `prioVMConfigDevices` | `%s_config_devices.disks=>disks`; `%s_config_devices.nics=>nics` | |
| 243 | | VM | property charted when VM is discovered | `%s_storage_usage` | `vsphere.vm_storage_usage` | `vms storage` | `bytes` | `line` | `prioVMStorageUsage` | `%s_storage.committed=>committed`; `%s_storage.uncommitted=>uncommitted`; `%s_storage.unshared=>unshared` | |
| 244 | | VM | snapshot property charted when VM is discovered | `%s_snapshot_count` | `vsphere.vm_snapshot_count` | `vms snapshots` | `snapshots` | `line` | `prioVMSnapshotCount` | `%s_snapshot_count=>count` | |
| 245 | | VM | snapshot property charted when VM is discovered | `%s_snapshot_max_age` | `vsphere.vm_snapshot_max_age` | `vms snapshots` | `seconds` | `line` | `prioVMSnapshotAge` | `%s_snapshot_max_age=>age` | |
| 246 | | VM | snapshot property charted when VM is discovered | `%s_snapshot_max_chain_depth` | `vsphere.vm_snapshot_max_chain_depth` | `vms snapshots` | `snapshots` | `line` | `prioVMSnapshotChainDepth` | `%s_snapshot_max_chain_depth=>depth` | |
| 247 | | Host | property/perf charted when host is discovered | `%s_cpu_usage_total` | `vsphere.host_cpu_utilization` | `hosts cpu` | `percentage` | `line` | `prioHostCPUUtilization` | `%s_cpu.usage.average=>used div=100` | |
| 248 | | Host | property/perf charted when host is discovered | `%s_mem_utilization` | `vsphere.host_mem_utilization` | `hosts mem` | `percentage` | `line` | `prioHostMemoryUtilization` | `%s_mem.usage.average=>used div=100` | |
| 249 | | Host | property/perf charted when host is discovered | `%s_mem_usage` | `vsphere.host_mem_usage` | `hosts mem` | `KiB` | `line` | `prioHostMemoryUsage` | `%s_mem.granted.average=>granted`; `%s_mem.consumed.average=>consumed`; `%s_mem.active.average=>active`; `%s_mem.shared.average=>shared`; `%s_mem.sharedcommon.average=>sharedcommon` | |
| 250 | | Host | property/perf charted when host is discovered | `%s_mem_swap_rate` | `vsphere.host_mem_swap_io` | `hosts mem` | `KiB/s` | `area` | `prioHostMemorySwapIO` | `%s_mem.swapinRate.average=>in`; `%s_mem.swapoutRate.average=>out` | |
| 251 | | Host | property/perf charted when host is discovered | `%s_disk_io` | `vsphere.host_disk_io` | `hosts disk` | `KiB/s` | `area` | `prioHostDiskIO` | `%s_disk.read.average=>read`; `%s_disk.write.average=>write mul=-1` | |
| 252 | | Host | property/perf charted when host is discovered | `%s_disk_max_latency` | `vsphere.host_disk_max_latency` | `hosts disk` | `milliseconds` | `line` | `prioHostDiskMaxLatency` | `%s_disk.maxTotalLatency.latest=>latency` | |
| 253 | | Host | property/perf charted when host is discovered | `%s_net_traffic` | `vsphere.host_net_traffic` | `hosts net` | `KiB/s` | `area` | `prioHostNetworkTraffic` | `%s_net.bytesRx.average=>received`; `%s_net.bytesTx.average=>sent mul=-1` | |
| 254 | | Host | property/perf charted when host is discovered | `%s_net_packets` | `vsphere.host_net_packets` | `hosts net` | `packets` | `line` | `prioHostNetworkPackets` | `%s_net.packetsRx.summation=>received`; `%s_net.packetsTx.summation=>sent mul=-1` | |
| 255 | | Host | property/perf charted when host is discovered | `%s_net_drops_total` | `vsphere.host_net_drops` | `hosts net` | `drops` | `line` | `prioHostNetworkDrops` | `%s_net.droppedRx.summation=>received`; `%s_net.droppedTx.summation=>sent mul=-1` | |
| 256 | | Host | property/perf charted when host is discovered | `%s_net_errors` | `vsphere.host_net_errors` | `hosts net` | `errors` | `line` | `prioHostNetworkErrors` | `%s_net.errorsRx.summation=>received`; `%s_net.errorsTx.summation=>sent mul=-1` | |
| 257 | | Host | property/perf charted when host is discovered | `%s_overall_status` | `vsphere.host_overall_status` | `hosts status` | `status` | `line` | `prioHostOverallStatus` | `%s_overall.status.green=>green`; `%s_overall.status.red=>red`; `%s_overall.status.yellow=>yellow`; `%s_overall.status.gray=>gray` | |
| 258 | | Host | property charted when host is discovered | `%s_power_state` | `vsphere.host_power_state` | `hosts status` | `status` | `line` | `prioHostPowerState` | `%s_power_state.poweredOn=>powered_on`; `%s_power_state.poweredOff=>powered_off`; `%s_power_state.standBy=>standby`; `%s_power_state.unknown=>unknown` | |
| 259 | | Host | property charted when host is discovered | `%s_connection_state` | `vsphere.host_connection_state` | `hosts status` | `status` | `line` | `prioHostConnectionState` | `%s_connection_state.connected=>connected`; `%s_connection_state.notResponding=>not_responding`; `%s_connection_state.disconnected=>disconnected` | |
| 260 | | Host | property charted when host is discovered | `%s_maintenance_status` | `vsphere.host_maintenance_status` | `hosts status` | `status` | `line` | `prioHostMaintenanceStatus` | `%s_maintenance_status.normal=>normal`; `%s_maintenance_status.inMaintenance=>in_maintenance` | |
| 261 | | Host | property/perf charted when host is discovered | `%s_system_uptime` | `vsphere.host_system_uptime` | `hosts uptime` | `seconds` | `line` | `prioHostSystemUptime` | `%s_sys.uptime.latest=>uptime` | |
| 262 | | Datastore | property charted when datastore is discovered; perf charts later only after perf data arrives | `%s_space_utilization` | `vsphere.datastore_space_utilization` | `datastores space` | `percentage` | `line` | `prioDatastoreSpaceUtilization` | `%s_used_space_pct=>used div=100` | |
| 263 | | Datastore | property charted when datastore is discovered; perf charts later only after perf data arrives | `%s_space_usage` | `vsphere.datastore_space_usage` | `datastores space` | `bytes` | `line` | `prioDatastoreSpaceUsage` | `%s_capacity=>capacity`; `%s_free_space=>free`; `%s_used_space=>used`; `%s_uncommitted=>uncommitted` | |
| 264 | | Datastore | property charted when datastore is discovered; perf charts later only after perf data arrives | `%s_overall_status` | `vsphere.datastore_overall_status` | `datastores status` | `status` | `line` | `prioDatastoreOverallStatus` | `%s_overall.status.green=>green`; `%s_overall.status.red=>red`; `%s_overall.status.yellow=>yellow`; `%s_overall.status.gray=>gray` | |
| 265 | | Datastore | perf chart created only after datastore perf data arrives | `%s_disk_io` | `vsphere.datastore_disk_io` | `datastores disk` | `KiB/s` | `area` | `prioDatastoreDiskIO` | `%s_datastore.read.average=>read`; `%s_datastore.write.average=>write mul=-1` | |
| 266 | | Datastore | perf chart created only after datastore perf data arrives | `%s_disk_iops` | `vsphere.datastore_disk_iops` | `datastores disk` | `operations/s` | `line` | `prioDatastoreDiskIOPS` | `%s_datastore.numberReadAveraged.average=>reads`; `%s_datastore.numberWriteAveraged.average=>writes mul=-1` | |
| 267 | | Datastore | perf chart created only after datastore perf data arrives | `%s_disk_latency` | `vsphere.datastore_disk_latency` | `datastores disk` | `milliseconds` | `line` | `prioDatastoreDiskLatency` | `%s_datastore.totalReadLatency.average=>read`; `%s_datastore.totalWriteLatency.average=>write` | |
| 268 | | Cluster | property chart created when cluster properties refresh | `%s_hosts` | `vsphere.cluster_hosts` | `clusters hosts` | `hosts` | `line` | `prioClusterHosts` | `%s_num_hosts=>total`; `%s_num_effective_hosts=>effective` | |
| 269 | | Cluster | property chart created when cluster properties refresh | `%s_cpu_capacity` | `vsphere.cluster_cpu_capacity` | `clusters cpu` | `MHz` | `line` | `prioClusterCPUCapacity` | `%s_total_cpu=>total`; `%s_effective_cpu=>effective` | |
| 270 | | Cluster | property chart created when cluster properties refresh | `%s_mem_capacity` | `vsphere.cluster_mem_capacity` | `clusters mem` | `bytes` | `line` | `prioClusterMemCapacity` | `%s_total_memory=>total`; `%s_effective_memory=>effective` | |
| 271 | | Cluster | property chart created when cluster properties refresh | `%s_cpu_topology` | `vsphere.cluster_cpu_topology` | `clusters cpu` | `count` | `line` | `prioClusterCPUTopology` | `%s_num_cpu_cores=>cores`; `%s_num_cpu_threads=>threads` | |
| 272 | | Cluster | property chart created when cluster properties refresh | `%s_drs_config` | `vsphere.cluster_drs_config` | `clusters config` | `status` | `line` | `prioClusterDRSConfig` | `%s_drs_enabled=>enabled` | |
| 273 | | Cluster | property chart created when cluster properties refresh | `%s_drs_mode` | `vsphere.cluster_drs_mode` | `clusters config` | `status` | `line` | `prioClusterDRSMode` | `%s_drs_mode.manual=>manual`; `%s_drs_mode.partiallyAutomated=>partially_automated`; `%s_drs_mode.fullyAutomated=>fully_automated`; `%s_drs_mode.unknown=>unknown` | |
| 274 | | Cluster | property chart created when cluster properties refresh | `%s_drs_vmotion_rate` | `vsphere.cluster_drs_vmotion_rate` | `clusters config` | `level` | `line` | `prioClusterDRSVmotionRate` | `%s_drs_vmotion_rate=>rate` | |
| 275 | | Cluster | property chart created when cluster properties refresh | `%s_ha_config` | `vsphere.cluster_ha_config` | `clusters config` | `status` | `line` | `prioClusterHAConfig` | `%s_ha_enabled=>enabled`; `%s_ha_adm_ctrl_enabled=>admission_control` | |
| 276 | | Cluster | property chart created when cluster properties refresh | `%s_ha_host_monitoring` | `vsphere.cluster_ha_host_monitoring` | `clusters config` | `status` | `line` | `prioClusterHAHostMonitoring` | `%s_ha_host_monitoring.enabled=>enabled`; `%s_ha_host_monitoring.disabled=>disabled`; `%s_ha_host_monitoring.unknown=>unknown` | |
| 277 | | Cluster | property chart created when cluster properties refresh | `%s_ha_vm_monitoring` | `vsphere.cluster_ha_vm_monitoring` | `clusters config` | `status` | `line` | `prioClusterHAVMMonitoring` | `%s_ha_vm_monitoring.vmMonitoringDisabled=>disabled`; `%s_ha_vm_monitoring.vmMonitoringOnly=>vm_monitoring_only`; `%s_ha_vm_monitoring.vmAndAppMonitoring=>vm_and_app_monitoring`; `%s_ha_vm_monitoring.unknown=>unknown` | |
| 278 | | Cluster | property chart created when cluster properties refresh | `%s_ha_vm_component_protection` | `vsphere.cluster_ha_vm_component_protection` | `clusters config` | `status` | `line` | `prioClusterHAVMComponentProtection` | `%s_ha_vm_component_protection.enabled=>enabled`; `%s_ha_vm_component_protection.disabled=>disabled`; `%s_ha_vm_component_protection.unknown=>unknown` | |
| 279 | | Cluster | property chart created when cluster properties refresh | `%s_overall_status` | `vsphere.cluster_overall_status` | `clusters status` | `status` | `line` | `prioClusterOverallStatus` | `%s_overall.status.green=>green`; `%s_overall.status.red=>red`; `%s_overall.status.yellow=>yellow`; `%s_overall.status.gray=>gray` | |
| 280 | | Cluster | property chart created when cluster properties refresh | `%s_vmotions` | `vsphere.cluster_vmotions` | `clusters migrations` | `migrations` | `line` | `prioClusterVMotions` | `%s_num_vmotions=>vmotions algo=incremental` | |
| 281 | | Cluster | property chart created when cluster properties refresh | `%s_drs_score` | `vsphere.cluster_drs_score` | `clusters drs` | `percentage` | `line` | `prioClusterDRSScore` | `%s_drs_score=>score` | |
| 282 | | Cluster | property chart created when cluster properties refresh | `%s_drs_balance` | `vsphere.cluster_drs_balance` | `clusters drs` | `score` | `line` | `prioClusterDRSBalance` | `%s_current_balance=>current div=1000`; `%s_target_balance=>target div=1000` | |
| 283 | | Cluster | property chart created when cluster properties refresh | `%s_vm_count` | `vsphere.cluster_vm_count` | `clusters vms` | `VMs` | `line` | `prioClusterVMCount` | `%s_usage_total_vm_count=>total`; `%s_usage_powered_off_vm_count=>powered_off` | |
| 284 | | Cluster | property chart created when cluster properties refresh | `%s_usage_cpu` | `vsphere.cluster_usage_cpu` | `clusters cpu` | `MHz` | `line` | `prioClusterUsageCPU` | `%s_usage_cpu_demand_mhz=>demand`; `%s_usage_cpu_entitled_mhz=>entitled`; `%s_usage_cpu_reservation_mhz=>reserved` | |
| 285 | | Cluster | property chart created when cluster properties refresh | `%s_usage_mem` | `vsphere.cluster_usage_mem` | `clusters mem` | `MB` | `line` | `prioClusterUsageMem` | `%s_usage_mem_demand_mb=>demand`; `%s_usage_mem_entitled_mb=>entitled`; `%s_usage_mem_reservation_mb=>reserved` | |
| 286 | | Cluster | perf chart created only after cluster perf data arrives | `%s_cpu_utilization` | `vsphere.cluster_cpu_utilization` | `clusters cpu` | `percentage` | `line` | `prioClusterCPUUtilization` | `%s_cpu.usage.average=>used div=100` | |
| 287 | | Cluster | perf chart created only after cluster perf data arrives | `%s_cpu_usage_mhz` | `vsphere.cluster_cpu_usage` | `clusters cpu` | `MHz` | `line` | `prioClusterCPUUsage` | `%s_cpu.usagemhz.average=>used`; `%s_cpu.totalmhz.average=>total` | |
| 288 | | Cluster | perf chart created only after cluster perf data arrives | `%s_mem_utilization` | `vsphere.cluster_mem_utilization` | `clusters mem` | `percentage` | `line` | `prioClusterMemUtilization` | `%s_mem.usage.average=>used div=100` | |
| 289 | | Cluster | perf chart created only after cluster perf data arrives | `%s_mem_usage` | `vsphere.cluster_mem_usage` | `clusters mem` | `KiB` | `line` | `prioClusterMemUsage` | `%s_mem.consumed.average=>consumed`; `%s_mem.active.average=>active`; `%s_mem.granted.average=>granted`; `%s_mem.shared.average=>shared`; `%s_mem.overhead.average=>overhead`; `%s_mem.swapused.average=>swap_used` | |
| 290 | | Cluster | perf chart created only after cluster perf data arrives | `%s_services_fairness` | `vsphere.cluster_services_fairness` | `clusters drs` | `score` | `line` | `prioClusterServicesFairness` | `%s_clusterServices.cpufairness.latest=>cpu`; `%s_clusterServices.memfairness.latest=>memory` | |
| 291 | | Cluster | perf chart created only after cluster perf data arrives | `%s_services_effective_cpu` | `vsphere.cluster_services_effective_cpu` | `clusters cpu` | `MHz` | `line` | `prioClusterServicesEffectiveCPU` | `%s_clusterServices.effectivecpu.average=>effective_cpu` | |
| 292 | | Cluster | perf chart created only after cluster perf data arrives | `%s_services_effective_mem` | `vsphere.cluster_services_effective_mem` | `clusters mem` | `MB` | `line` | `prioClusterServicesEffectiveMem` | `%s_clusterServices.effectivemem.average=>effective_mem` | |
| 293 | | Cluster | perf chart created only after cluster perf data arrives | `%s_services_failover` | `vsphere.cluster_services_failover` | `clusters ha` | `failures` | `line` | `prioClusterServicesFailover` | `%s_clusterServices.failover.latest=>failures_tolerable` | |
| 294 | | Cluster | perf chart created only after cluster perf data arrives | `%s_vm_migrations` | `vsphere.cluster_vm_migrations` | `clusters vmop` | `operations` | `line` | `prioClusterVMMigrations` | `%s_vmop.numVMotion.latest=>vmotion`; `%s_vmop.numSVMotion.latest=>svmotion`; `%s_vmop.numXVMotion.latest=>xvmotion` | |
| 295 | | Cluster | perf chart created only after cluster perf data arrives | `%s_vm_lifecycle` | `vsphere.cluster_vm_lifecycle` | `clusters vmop` | `operations` | `line` | `prioClusterVMLifecycle` | `%s_vmop.numPoweron.latest=>poweron`; `%s_vmop.numPoweroff.latest=>poweroff`; `%s_vmop.numCreate.latest=>create`; `%s_vmop.numDestroy.latest=>destroy`; `%s_vmop.numClone.latest=>clone`; `%s_vmop.numDeploy.latest=>deploy` | |
| 296 | | Cluster | perf chart created only after cluster perf data arrives | `%s_vm_management` | `vsphere.cluster_vm_management` | `clusters vmop` | `operations` | `line` | `prioClusterVMManagement` | `%s_vmop.numReconfigure.latest=>reconfigure`; `%s_vmop.numReset.latest=>reset`; `%s_vmop.numSuspend.latest=>suspend`; `%s_vmop.numRegister.latest=>register`; `%s_vmop.numUnregister.latest=>unregister` | |
| 297 | | Cluster | perf chart created only after cluster perf data arrives | `%s_vm_guest_ops` | `vsphere.cluster_vm_guest_ops` | `clusters vmop` | `operations` | `line` | `prioClusterVMGuestOps` | `%s_vmop.numRebootGuest.latest=>reboot`; `%s_vmop.numShutdownGuest.latest=>shutdown`; `%s_vmop.numStandbyGuest.latest=>standby` | |
| 298 | | Cluster | perf chart created only after cluster perf data arrives | `%s_vm_cold_migrations` | `vsphere.cluster_vm_cold_migrations` | `clusters vmop` | `operations` | `line` | `prioClusterVMColdMigrations` | `%s_vmop.numChangeDS.latest=>change_ds`; `%s_vmop.numChangeHost.latest=>change_host`; `%s_vmop.numChangeHostDS.latest=>change_host_ds` | |
| 299 | | Resource pool | property chart created when resource pool properties refresh | `%s_cpu_usage` | `vsphere.resource_pool_cpu_usage` | `resource pools cpu` | `MHz` | `line` | `prioResourcePoolCPUUsage` | `%s_cpu_usage=>usage`; `%s_cpu_demand=>demand` | |
| 300 | | Resource pool | property chart created when resource pool properties refresh | `%s_cpu_entitlement` | `vsphere.resource_pool_cpu_entitlement` | `resource pools cpu` | `MHz` | `line` | `prioResourcePoolCPUEntitlement` | `%s_cpu_entitlement_distributed=>distributed` | |
| 301 | | Resource pool | property chart created when resource pool properties refresh | `%s_cpu_allocation` | `vsphere.resource_pool_cpu_allocation` | `resource pools cpu` | `MHz` | `line` | `prioResourcePoolCPUAllocation` | `%s_cpu_reservation_used=>reservation_used`; `%s_cpu_unreserved_for_vm=>unreserved_for_vm`; `%s_cpu_max_usage=>max_usage` | |
| 302 | | Resource pool | property chart created when resource pool properties refresh | `%s_mem_usage` | `vsphere.resource_pool_mem_usage` | `resource pools mem` | `MB` | `line` | `prioResourcePoolMemUsage` | `%s_mem_usage_host=>host`; `%s_mem_usage_guest=>guest` | |
| 303 | | Resource pool | property chart created when resource pool properties refresh | `%s_mem_entitlement` | `vsphere.resource_pool_mem_entitlement` | `resource pools mem` | `MB` | `line` | `prioResourcePoolMemEntitlement` | `%s_mem_entitlement_distributed=>distributed` | |
| 304 | | Resource pool | property chart created when resource pool properties refresh | `%s_mem_allocation` | `vsphere.resource_pool_mem_allocation` | `resource pools mem` | `bytes` | `line` | `prioResourcePoolMemAllocation` | `%s_mem_reservation_used=>reservation_used`; `%s_mem_unreserved_for_vm=>unreserved_for_vm`; `%s_mem_max_usage=>max_usage` | |
| 305 | | Resource pool | property chart created when resource pool properties refresh | `%s_mem_breakdown` | `vsphere.resource_pool_mem_breakdown` | `resource pools mem` | `MB` | `line` | `prioResourcePoolMemBreakdown` | `%s_mem_private=>private`; `%s_mem_shared=>shared`; `%s_mem_swapped=>swapped`; `%s_mem_ballooned=>ballooned`; `%s_mem_overhead=>overhead`; `%s_mem_consumed_overhead=>consumed_overhead`; `%s_mem_compressed=>compressed div=1024` | |
| 306 | | Resource pool | property chart created when resource pool properties refresh | `%s_cpu_config` | `vsphere.resource_pool_cpu_config` | `resource pools cpu` | `MHz` | `line` | `prioResourcePoolCPUConfig` | `%s_cpu_reservation=>reservation`; `%s_cpu_limit=>limit` | |
| 307 | | Resource pool | property chart created when resource pool properties refresh | `%s_mem_config` | `vsphere.resource_pool_mem_config` | `resource pools mem` | `MB` | `line` | `prioResourcePoolMemConfig` | `%s_mem_reservation=>reservation`; `%s_mem_limit=>limit` | |
| 308 | | Resource pool | property chart created when resource pool properties refresh | `%s_overall_status` | `vsphere.resource_pool_overall_status` | `resource pools status` | `status` | `line` | `prioResourcePoolOverallStatus` | `%s_overall.status.green=>green`; `%s_overall.status.red=>red`; `%s_overall.status.yellow=>yellow`; `%s_overall.status.gray=>gray` | |
| 309 | |
| 310 | ## Metric Source Lists |
| 311 | |
| 312 | Performance counter lists are selected in |
| 313 | `src/go/plugin/go.d/collector/vsphere/discover/metric_lists.go`. |
| 314 | |
| 315 | VM performance counters: |
| 316 | |
| 317 | - `cpu.usage.average` |
| 318 | - `mem.usage.average` |
| 319 | - `mem.granted.average` |
| 320 | - `mem.consumed.average` |
| 321 | - `mem.active.average` |
| 322 | - `mem.shared.average` |
| 323 | - `mem.swapinRate.average` |
| 324 | - `mem.swapoutRate.average` |
| 325 | - `mem.swapped.average` |
| 326 | - `net.bytesRx.average` |
| 327 | - `net.bytesTx.average` |
| 328 | - `net.packetsRx.summation` |
| 329 | - `net.packetsTx.summation` |
| 330 | - `net.droppedRx.summation` |
| 331 | - `net.droppedTx.summation` |
| 332 | - `disk.read.average` |
| 333 | - `disk.write.average` |
| 334 | - `disk.maxTotalLatency.latest` |
| 335 | - `sys.uptime.latest` |
| 336 | |
| 337 | Host performance counters: |
| 338 | |
| 339 | - `cpu.usage.average` |
| 340 | - `mem.usage.average` |
| 341 | - `mem.granted.average` |
| 342 | - `mem.consumed.average` |
| 343 | - `mem.active.average` |
| 344 | - `mem.shared.average` |
| 345 | - `mem.sharedcommon.average` |
| 346 | - `mem.swapinRate.average` |
| 347 | - `mem.swapoutRate.average` |
| 348 | - `net.bytesRx.average` |
| 349 | - `net.bytesTx.average` |
| 350 | - `net.packetsRx.summation` |
| 351 | - `net.packetsTx.summation` |
| 352 | - `net.droppedRx.summation` |
| 353 | - `net.droppedTx.summation` |
| 354 | - `net.errorsRx.summation` |
| 355 | - `net.errorsTx.summation` |
| 356 | - `disk.read.average` |
| 357 | - `disk.write.average` |
| 358 | - `disk.maxTotalLatency.latest` |
| 359 | - `sys.uptime.latest` |
| 360 | |
| 361 | Power counters requested with empty instance when vSphere exposes them: |
| 362 | |
| 363 | - VM: `power.power.average` |
| 364 | - VM: `power.energy.summation` |
| 365 | - Host: `power.power.average` |
| 366 | - Host: `power.powerCap.average` |
| 367 | - Host: `power.energy.summation` |
| 368 | - Host: `power.capacity.usable.average` |
| 369 | - Host: `power.capacity.usage.average` |
| 370 | - Host: `power.capacity.usagePct.average` |
| 371 | - Host: `power.capacity.usageIdle.average` |
| 372 | - Host: `power.capacity.usageSystem.average` |
| 373 | - Host: `power.capacity.usageVm.average` |
| 374 | |
| 375 | Datastore performance counters: |
| 376 | |
| 377 | - `datastore.numberReadAveraged.average` |
| 378 | - `datastore.numberWriteAveraged.average` |
| 379 | - `datastore.totalReadLatency.average` |
| 380 | - `datastore.totalWriteLatency.average` |
| 381 | - `datastore.read.average` |
| 382 | - `datastore.write.average` |
| 383 | |
| 384 | Cluster performance counters: |
| 385 | |
| 386 | - `clusterServices.effectivecpu.average` |
| 387 | - `clusterServices.effectivemem.average` |
| 388 | - `clusterServices.cpufairness.latest` |
| 389 | - `clusterServices.memfairness.latest` |
| 390 | - `clusterServices.failover.latest` |
| 391 | - `cpu.usage.average` |
| 392 | - `cpu.usagemhz.average` |
| 393 | - `cpu.totalmhz.average` |
| 394 | - `mem.usage.average` |
| 395 | - `mem.consumed.average` |
| 396 | - `mem.overhead.average` |
| 397 | - `mem.active.average` |
| 398 | - `mem.granted.average` |
| 399 | - `mem.shared.average` |
| 400 | - `mem.swapused.average` |
| 401 | - `vmop.numVMotion.latest` |
| 402 | - `vmop.numSVMotion.latest` |
| 403 | - `vmop.numXVMotion.latest` |
| 404 | - `vmop.numPoweron.latest` |
| 405 | - `vmop.numPoweroff.latest` |
| 406 | - `vmop.numCreate.latest` |
| 407 | - `vmop.numDestroy.latest` |
| 408 | - `vmop.numClone.latest` |
| 409 | - `vmop.numDeploy.latest` |
| 410 | - `vmop.numReset.latest` |
| 411 | - `vmop.numSuspend.latest` |
| 412 | - `vmop.numReconfigure.latest` |
| 413 | - `vmop.numRegister.latest` |
| 414 | - `vmop.numUnregister.latest` |
| 415 | - `vmop.numChangeDS.latest` |
| 416 | - `vmop.numChangeHost.latest` |
| 417 | - `vmop.numChangeHostDS.latest` |
| 418 | - `vmop.numRebootGuest.latest` |
| 419 | - `vmop.numShutdownGuest.latest` |
| 420 | - `vmop.numStandbyGuest.latest` |
| 421 | - `clusterServices.clusterDrsScore.latest` |
| 422 | - `clusterServices.vmDrsScore.latest` |
| 423 | |
| 424 | ## Property Metric Semantics |
| 425 | |
| 426 | | Resource | Property path requested | Metric behavior | |
| 427 | |---|---|---| |
| 428 | | VM | discovery requests `name`, `parent`, `runtime.host`, `runtime.connectionState`, `runtime.powerState`, `runtime.consolidationNeeded`, `summary.guest`, `summary.config`, `summary.storage`, `summary.overallStatus`, `snapshot`; also `config.instanceUuid` only when `collect_vsan` is enabled | Emits `overall.status.{green,red,yellow,gray}`, `power_state.*`, `connection_state.*`, VMware Tools running/version state, disk consolidation-needed state, configured CPU/memory/device counts, aggregate storage usage, and snapshot aggregate metrics for all discovered VMs. Emits real-time aggregate performance counters only when the VM is `poweredOn`. If `runtime.host` is absent for a non-running VM, the VM folder parent is used to recover the datacenter label when possible. Guest hostname/IP and guest OS labels are excluded from this PR by user decision. Per-virtual-disk capacity/performance and per-vNIC performance are excluded from this PR by 2026-05-22 user decision. VM power and energy metrics are emitted when vSphere returns aggregate `power.*` counters. VM vSAN performance is emitted only when `collect_vsan` is enabled and vSAN returns a matching VM instance UUID. | |
| 429 | | Host | discovery requests `name`, `parent`, `runtime.connectionState`, `runtime.powerState`, `runtime.inMaintenanceMode`, `summary.overallStatus`; also `config.vsanHostConfig.clusterInfo.nodeUuid` only when `collect_vsan` is enabled | Emits `overall.status.{green,red,yellow,gray}`, `power_state.*`, `connection_state.*`, and `maintenance_status.*` for all discovered hosts. Emits real-time aggregate performance counters only when the host is `poweredOn`. Per-host child-instance NIC, disk, storage-adapter, storage-path, and CPU-instance performance metrics are excluded from this PR by 2026-05-22 user decision. Host power, energy, and power-capacity metrics are emitted when vSphere returns aggregate `power.*` counters. Host vSAN performance is emitted only when `collect_vsan` is enabled and vSAN returns a matching host node UUID. | |
| 430 | | Datastore | refresh requests `summary`, `overallStatus` | Emits `capacity`, `free_space`, `used_space`, `used_space_pct`, and `overall.status.*`. Capacity/free/used are zeroed when `Accessible=false`. | |
| 431 | | Network | discovery requests `name`, `parent`, `summary`, `host`, and `vm` only when `collect_network_topology` is enabled | Emits no metrics. Cached Network and Distributed Virtual Port Group status/relationships are used only by the topology Function. | |
| 432 | | Datastore cluster | discovery requests `StoragePod` `name`, `parent`, `summary`, `podStorageDrsEntry`; only when `collect_datastore_clusters` is enabled | Emits optional StoragePod capacity, free, used, utilization, and Storage DRS enabled/disabled status for datastore clusters matching `datastore_cluster_include`. | |
| 433 | | Cluster | refresh requests `name`, `summary`, `configurationEx`, `overallStatus`; discovery includes `configurationEx.vsanConfigInfo` only when `collect_vsan` is enabled | Emits capacity/topology/DRS/HA/usage/overall-status property metrics, with conditional fields reset to zero before update. vSAN cluster space, health, and performance metrics are emitted only when `collect_vsan` is enabled, the cluster is vSAN-enabled, and vSAN API calls return data. | |
| 434 | | Resource pool | refresh requests `name`, `summary`, `config`, `runtime`, `overallStatus` | Emits quick stats, runtime allocation, config reservation/limit, memory breakdown, and overall-status metrics. | |
| 435 | |
| 436 | ## Lifecycle Contract |
| 437 | |
| 438 | - Hosts, VMs, datastores, clusters, resource pools, and optional datastore |
| 439 | clusters are tracked in discovered maps. |
| 440 | - Each absent resource increments a failure counter per collection. |
| 441 | - `failedUpdatesLimit` is `10`. |
| 442 | - When the failure counter reaches `10`, charts whose ID starts with |
| 443 | `<resourceID>_` are marked removed and not-created, making them obsolete. |
| 444 | - Datastore property charts are created when the datastore is present. |
| 445 | - Datastore performance charts are created only after performance data arrives. |
| 446 | - Cluster property charts are created when the cluster is present. |
| 447 | - Cluster performance charts are created only after performance data arrives. |
| 448 | - Non-powered-on hosts and VMs are discovered when vSphere returns them and the |
| 449 | include selectors keep them. Their property/status metrics keep the resource |
| 450 | alive; real-time host/VM performance query specs are not generated for them. |
| 451 | - Optional VM virtual disk capacity/performance and VM network-interface |
| 452 | performance metrics are not part of this PR. They were hard-removed before |
| 453 | merge by 2026-05-22 user decision. Existing aggregate VM disk and network |
| 454 | contexts remain default-on. |
| 455 | - Optional datastore cluster metrics are not part of the legacy V1 surface. |
| 456 | They are emitted only when `collect_datastore_clusters` is enabled, only for |
| 457 | StoragePod objects matching `datastore_cluster_include`. |
| 458 | - Optional host disk/LUN/device, storage-adapter, storage-path, and CPU-instance |
| 459 | metrics are not part of this PR. They were hard-removed before merge by |
| 460 | 2026-05-22 user decision. Existing aggregate host disk, network, CPU, memory, |
| 461 | and uptime contexts remain default-on. |
| 462 | - Host/VM power metrics are not part of the legacy V1 surface. They are |
| 463 | requested by adding selected aggregate `power.*` counters with empty instance |
| 464 | to powered-on host and VM performance queries when vSphere exposes those |
| 465 | counters. They emit one aggregate set per included host or VM and therefore |
| 466 | use the existing host/VM include selectors instead of a new child selector. |
| 467 | The `collect_power_metrics` option was removed before merge by 2026-05-22 |
| 468 | user decision. |
| 469 | - Optional vSAN metrics are not part of the legacy V1 surface. They are queried |
| 470 | only when `collect_vsan` is enabled, only for clusters whose vSAN config is |
| 471 | enabled and match the dedicated vSAN selectors, and only through the |
| 472 | vSAN Management API. Missing vSAN API support, missing vSAN Performance |
| 473 | Service, or unavailable vSAN counters cause one-time warnings and no emitted |
| 474 | vSAN series for that query. The first implemented vSAN surface covers cluster |
| 475 | space, cluster health, and cluster/host/VM vSAN performance; vSAN events and |
| 476 | deeper disk-group, disk, component, or CMMDS entity metrics are not emitted by |
| 477 | this option. |
| 478 | |
| 479 | ## Health Alert Contract |
| 480 | |
| 481 | | Template | Context | Lookup/calc | Warning | Critical | Recipient | |
| 482 | |---|---|---|---|---|---| |
| 483 | | `vsphere_vm_cpu_utilization` | `vsphere.vm_cpu_utilization` | `average -10m unaligned match-names of used` | `$this > (($status >= $WARNING) ? (75) : (85))` | `$this > (($status == $CRITICAL) ? (85) : (95))` | `silent` | |
| 484 | | `vsphere_vm_mem_utilization` | `vsphere.vm_mem_utilization` | `$used` | `$this > (($status >= $WARNING) ? (80) : (90))` | `$this > (($status == $CRITICAL) ? (90) : (98))` | `silent` | |
| 485 | | `vsphere_vm_snapshot_chain_depth` | `vsphere.vm_snapshot_max_chain_depth` | `$depth` | `$this > 3` | none | `sysadmin` | |
| 486 | | `vsphere_vm_snapshot_age` | `vsphere.vm_snapshot_max_age` | `$age` | none | `$this > 86400` | `sysadmin` | |
| 487 | | `vsphere_host_cpu_utilization` | `vsphere.host_cpu_utilization` | `average -10m unaligned match-names of used` | `$this > (($status >= $WARNING) ? (75) : (85))` | `$this > (($status == $CRITICAL) ? (85) : (95))` | `sysadmin` | |
| 488 | | `vsphere_host_mem_utilization` | `vsphere.host_mem_utilization` | `$used` | `$this > (($status >= $WARNING) ? (80) : (90))` | `$this > (($status == $CRITICAL) ? (90) : (98))` | `sysadmin` | |
| 489 | |
| 490 | ## Current Artifact Drift To Preserve Or Fix Explicitly |
| 491 | |
| 492 | The migration must preserve runtime behavior from code. Existing artifact drift |
| 493 | must be fixed only as explicit metadata/docs updates: |
| 494 | |
| 495 | - Code sets `vsphere.host_net_traffic` chart type to `area`; metadata currently |
| 496 | says `line`. |
| 497 | - Code sets VM and host network drop units to `drops`; metadata currently says |
| 498 | `packets`. |
| 499 | - Cluster performance counter selection includes |
| 500 | `clusterServices.clusterDrsScore.latest` and |
| 501 | `clusterServices.vmDrsScore.latest`, but the current chart templates do not |
| 502 | expose chart dimensions for those exact counter keys. A v2 migration must not |
| 503 | accidentally create public series for them unless an enrichment row explicitly |
| 504 | adds new contexts/dimensions. |