summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/vsphere/discover/metric_lists.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/vsphere/discover/metric_lists.go135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/vsphere/discover/metric_lists.go b/src/go/collectors/go.d.plugin/modules/vsphere/discover/metric_lists.go
new file mode 100644
index 000000000..0eecb81ea
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/vsphere/discover/metric_lists.go
@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package discover
+
+import (
+ "sort"
+ "time"
+
+ rs "github.com/netdata/netdata/go/go.d.plugin/modules/vsphere/resources"
+
+ "github.com/vmware/govmomi/performance"
+ "github.com/vmware/govmomi/vim25/types"
+)
+
+func (d Discoverer) collectMetricLists(res *rs.Resources) error {
+ d.Debug("discovering : metric lists : starting resources metric lists collection process")
+ t := time.Now()
+ perfCounters, err := d.CounterInfoByName()
+ if err != nil {
+ return err
+ }
+
+ hostML := simpleHostMetricList(perfCounters)
+ for _, h := range res.Hosts {
+ h.MetricList = hostML
+ }
+ vmML := simpleVMMetricList(perfCounters)
+ for _, v := range res.VMs {
+ v.MetricList = vmML
+ }
+
+ d.Infof("discovering : metric lists : collected metric lists for %d/%d hosts, %d/%d vms, process took %s",
+ len(res.Hosts),
+ len(res.Hosts),
+ len(res.VMs),
+ len(res.VMs),
+ time.Since(t),
+ )
+
+ return nil
+}
+
+func simpleHostMetricList(pci map[string]*types.PerfCounterInfo) performance.MetricList {
+ return simpleMetricList(hostMetrics, pci)
+}
+
+func simpleVMMetricList(pci map[string]*types.PerfCounterInfo) performance.MetricList {
+ return simpleMetricList(vmMetrics, pci)
+}
+
+func simpleMetricList(metrics []string, pci map[string]*types.PerfCounterInfo) performance.MetricList {
+ sort.Strings(metrics)
+
+ var pml performance.MetricList
+ for _, v := range metrics {
+ m, ok := pci[v]
+ if !ok {
+ // TODO: should be logged
+ continue
+ }
+ // TODO: only summary metrics for now
+ // TODO: some metrics only appear if Instance is *, for example
+ // virtualDisk.totalWriteLatency.average.scsi0:0
+ // virtualDisk.numberWriteAveraged.average.scsi0:0
+ // virtualDisk.write.average.scsi0:0
+ // virtualDisk.totalReadLatency.average.scsi0:0
+ // virtualDisk.numberReadAveraged.average.scsi0:0
+ // virtualDisk.read.average.scsi0:0
+ // disk.numberReadAveraged.average
+ // disk.numberWriteAveraged.average
+ // TODO: metrics will be unsorted after if at least one Instance is *
+ pml = append(pml, types.PerfMetricId{CounterId: m.Key, Instance: ""})
+ }
+ return pml
+}
+
+var (
+ vmMetrics = []string{
+ "cpu.usage.average",
+
+ "mem.usage.average",
+ "mem.granted.average",
+ "mem.consumed.average",
+ "mem.active.average",
+ "mem.shared.average",
+ // Refers to VMkernel swapping!
+ "mem.swapinRate.average",
+ "mem.swapoutRate.average",
+ "mem.swapped.average",
+
+ "net.bytesRx.average",
+ "net.bytesTx.average",
+ "net.packetsRx.summation",
+ "net.packetsTx.summation",
+ "net.droppedRx.summation",
+ "net.droppedTx.summation",
+
+ // the only summary disk metrics
+ "disk.read.average",
+ "disk.write.average",
+ "disk.maxTotalLatency.latest",
+
+ "sys.uptime.latest",
+ }
+
+ hostMetrics = []string{
+ "cpu.usage.average",
+
+ "mem.usage.average",
+ "mem.granted.average",
+ "mem.consumed.average",
+ "mem.active.average",
+ "mem.shared.average",
+ "mem.sharedcommon.average",
+ // Refers to VMkernel swapping!
+ "mem.swapinRate.average",
+ "mem.swapoutRate.average",
+
+ "net.bytesRx.average",
+ "net.bytesTx.average",
+ "net.packetsRx.summation",
+ "net.packetsTx.summation",
+ "net.droppedRx.summation",
+ "net.droppedTx.summation",
+ "net.errorsRx.summation",
+ "net.errorsTx.summation",
+
+ // the only summary disk metrics
+ "disk.read.average",
+ "disk.write.average",
+ "disk.maxTotalLatency.latest",
+
+ "sys.uptime.latest",
+ }
+)