github.com/vmware/govmomi@v0.51.0/examples/perfmanager/main.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 /* 6 This example program shows how to collect performance metrics from virtual machines using govmomi. 7 */ 8 9 package main 10 11 import ( 12 "context" 13 "flag" 14 "fmt" 15 16 "github.com/vmware/govmomi/examples" 17 "github.com/vmware/govmomi/performance" 18 "github.com/vmware/govmomi/view" 19 "github.com/vmware/govmomi/vim25" 20 "github.com/vmware/govmomi/vim25/types" 21 ) 22 23 var interval = flag.Int("i", 20, "Interval ID") 24 25 func main() { 26 examples.Run(func(ctx context.Context, c *vim25.Client) error { 27 // Get virtual machines references 28 m := view.NewManager(c) 29 30 v, err := m.CreateContainerView(ctx, c.ServiceContent.RootFolder, nil, true) 31 if err != nil { 32 return err 33 } 34 35 defer v.Destroy(ctx) 36 37 vmsRefs, err := v.Find(ctx, []string{"VirtualMachine"}, nil) 38 if err != nil { 39 return err 40 } 41 42 // Create a PerfManager 43 perfManager := performance.NewManager(c) 44 45 // Retrieve counters name list 46 counters, err := perfManager.CounterInfoByName(ctx) 47 if err != nil { 48 return err 49 } 50 51 var names []string 52 for name := range counters { 53 names = append(names, name) 54 } 55 56 // Create PerfQuerySpec 57 spec := types.PerfQuerySpec{ 58 MaxSample: 1, 59 MetricId: []types.PerfMetricId{{Instance: "*"}}, 60 IntervalId: int32(*interval), 61 } 62 63 // Query metrics 64 sample, err := perfManager.SampleByName(ctx, spec, names, vmsRefs) 65 if err != nil { 66 return err 67 } 68 69 result, err := perfManager.ToMetricSeries(ctx, sample) 70 if err != nil { 71 return err 72 } 73 74 // Read result 75 for _, metric := range result { 76 name := metric.Entity 77 78 for _, v := range metric.Value { 79 counter := counters[v.Name] 80 units := counter.UnitInfo.GetElementDescription().Label 81 82 instance := v.Instance 83 if instance == "" { 84 instance = "-" 85 } 86 87 if len(v.Value) != 0 { 88 fmt.Printf("%s\t%s\t%s\t%s\t%s\n", 89 name, instance, v.Name, v.ValueCSV(), units) 90 } 91 } 92 } 93 return nil 94 }) 95 }