Используются следующие примеры / perfmanager / main. go для получения показателей для виртуальной машины, такие как следующий datastore.write.average , который успешно возвращает такие значения как показано ниже, имя (имя виртуальной машины), экземпляр (52021f65-c9367fc0-51ce-6c3be5b63f98), v.Name (datastore.write.average), v.ValueCSV (), единицы (КБ / с).
Но Я не могу понять, как вернуть имя хранилища данных, связанное с этими значениями?
Приветствуется любая помощь, включая код, который я использую.
c := client.Client
mgr := view.NewManager(c)
v, err := mgr.CreateContainerView(ctx, c.ServiceContent.RootFolder, nil, true)
if err != nil {
return errors.Wrap(err, "error in CreateContainerView")
}
defer func() {if err := v.Destroy(ctx); err != nil {m.Logger().Debug(errors.Wrap(err, "error trying to destroy view from vshphere"))}}()
vmsRefs, err := v.Find(ctx, []string{"VirtualMachine"}, nil)
if err != nil {
return errors.Wrap(err, "error in Retrieve ")
}
perfManager := performance.NewManager(c)
counters, err := perfManager.CounterInfoByName(ctx)
if err != nil {
return errors.Wrap(err, "error in Retrieve")
}
var names []string
names = append(names, "datastore.write.average")
spec := types.PerfQuerySpec{
MaxSample: 1,
MetricId: []types.PerfMetricId{{Instance: "*"}},
IntervalId: 20,
}
sample, err := perfManager.SampleByName(ctx, spec, names, vmsRefs)
if err != nil {
return errors.Wrap(err, "error in Retrieve")
}
result, err := perfManager.ToMetricSeries(ctx, sample)
if err != nil {
return errors.Wrap(err, "error in Retrieve")
}
for _, metric := range result{
name := metric.Entity
for _, v := range metric.Value{
counter := counters[v.Name]
units := counter.UnitInfo.GetElementDescription().Label
instance := v.Instance
if instance == ""{
instance = "-"
}
if len(v.Value) != 0 {
fmt.Printf("%s\t%s\t%s\t%s\t%s\n",
name, instance, v.Name, v.ValueCSV(), units)
}
}