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  )