github.com/netdata/go.d.plugin@v0.58.1/modules/vsphere/discover/metric_lists.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package discover 4 5 import ( 6 "sort" 7 "time" 8 9 rs "github.com/netdata/go.d.plugin/modules/vsphere/resources" 10 11 "github.com/vmware/govmomi/performance" 12 "github.com/vmware/govmomi/vim25/types" 13 ) 14 15 func (d Discoverer) collectMetricLists(res *rs.Resources) error { 16 d.Debug("discovering : metric lists : starting resources metric lists collection process") 17 t := time.Now() 18 perfCounters, err := d.CounterInfoByName() 19 if err != nil { 20 return err 21 } 22 23 hostML := simpleHostMetricList(perfCounters) 24 for _, h := range res.Hosts { 25 h.MetricList = hostML 26 } 27 vmML := simpleVMMetricList(perfCounters) 28 for _, v := range res.VMs { 29 v.MetricList = vmML 30 } 31 32 d.Infof("discovering : metric lists : collected metric lists for %d/%d hosts, %d/%d vms, process took %s", 33 len(res.Hosts), 34 len(res.Hosts), 35 len(res.VMs), 36 len(res.VMs), 37 time.Since(t), 38 ) 39 40 return nil 41 } 42 43 func simpleHostMetricList(pci map[string]*types.PerfCounterInfo) performance.MetricList { 44 return simpleMetricList(hostMetrics, pci) 45 } 46 47 func simpleVMMetricList(pci map[string]*types.PerfCounterInfo) performance.MetricList { 48 return simpleMetricList(vmMetrics, pci) 49 } 50 51 func simpleMetricList(metrics []string, pci map[string]*types.PerfCounterInfo) performance.MetricList { 52 sort.Strings(metrics) 53 54 var pml performance.MetricList 55 for _, v := range metrics { 56 m, ok := pci[v] 57 if !ok { 58 // TODO: should be logged 59 continue 60 } 61 // TODO: only summary metrics for now 62 // TODO: some metrics only appear if Instance is *, for example 63 // virtualDisk.totalWriteLatency.average.scsi0:0 64 // virtualDisk.numberWriteAveraged.average.scsi0:0 65 // virtualDisk.write.average.scsi0:0 66 // virtualDisk.totalReadLatency.average.scsi0:0 67 // virtualDisk.numberReadAveraged.average.scsi0:0 68 // virtualDisk.read.average.scsi0:0 69 // disk.numberReadAveraged.average 70 // disk.numberWriteAveraged.average 71 // TODO: metrics will be unsorted after if at least one Instance is * 72 pml = append(pml, types.PerfMetricId{CounterId: m.Key, Instance: ""}) 73 } 74 return pml 75 } 76 77 var ( 78 vmMetrics = []string{ 79 "cpu.usage.average", 80 81 "mem.usage.average", 82 "mem.granted.average", 83 "mem.consumed.average", 84 "mem.active.average", 85 "mem.shared.average", 86 // Refers to VMkernel swapping! 87 "mem.swapinRate.average", 88 "mem.swapoutRate.average", 89 "mem.swapped.average", 90 91 "net.bytesRx.average", 92 "net.bytesTx.average", 93 "net.packetsRx.summation", 94 "net.packetsTx.summation", 95 "net.droppedRx.summation", 96 "net.droppedTx.summation", 97 98 // the only summary disk metrics 99 "disk.read.average", 100 "disk.write.average", 101 "disk.maxTotalLatency.latest", 102 103 "sys.uptime.latest", 104 } 105 106 hostMetrics = []string{ 107 "cpu.usage.average", 108 109 "mem.usage.average", 110 "mem.granted.average", 111 "mem.consumed.average", 112 "mem.active.average", 113 "mem.shared.average", 114 "mem.sharedcommon.average", 115 // Refers to VMkernel swapping! 116 "mem.swapinRate.average", 117 "mem.swapoutRate.average", 118 119 "net.bytesRx.average", 120 "net.bytesTx.average", 121 "net.packetsRx.summation", 122 "net.packetsTx.summation", 123 "net.droppedRx.summation", 124 "net.droppedTx.summation", 125 "net.errorsRx.summation", 126 "net.errorsTx.summation", 127 128 // the only summary disk metrics 129 "disk.read.average", 130 "disk.write.average", 131 "disk.maxTotalLatency.latest", 132 133 "sys.uptime.latest", 134 } 135 )