From 89d4b462b07bdddde50257359cebabd54d09f643 Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Wed, 11 Sep 2024 23:11:16 +0530 Subject: [PATCH 1/6] initial commit --- metricbeat/docs/fields.asciidoc | 64 +++---- .../module/vsphere/datastore/_meta/data.json | 56 +++--- .../module/vsphere/datastore/_meta/fields.yml | 27 +-- metricbeat/module/vsphere/datastore/data.go | 14 +- .../module/vsphere/datastore/data_test.go | 32 ++-- .../module/vsphere/datastore/datastore.go | 89 +++++----- .../vsphere/datastore/datastore_test.go | 25 ++- metricbeat/module/vsphere/fields.go | 2 +- metricbeat/module/vsphere/host/host.go | 71 ++++---- .../vsphere/virtualmachine/_meta/data.json | 162 +++++++++--------- .../vsphere/virtualmachine/_meta/fields.yml | 18 +- .../vsphere/virtualmachine/virtualmachine.go | 2 +- 12 files changed, 307 insertions(+), 255 deletions(-) diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 8e488f8036c5..34073a1c79ec 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -67010,76 +67010,92 @@ format: percent -- -*`vsphere.datastore.fstype`*:: +*`vsphere.datastore.disk.capacity.bytes`*:: + -- -Filesystem type. +Configured size of the datastore. -type: keyword +type: long + +format: bytes -- -*`vsphere.datastore.host.count`*:: +*`vsphere.datastore.disk.capacity.usage.bytes`*:: + -- -Number of hosts. +The amount of storage capacity currently being consumed by or on the entity. type: long +format: bytes + -- -*`vsphere.datastore.host.names`*:: +*`vsphere.datastore.disk.provisioned.bytes`*:: + -- -List of all the host names. +Amount of storage set aside for use by a datastore or a virtual machine. + + +type: long + +format: bytes + +-- + +*`vsphere.datastore.fstype`*:: ++ +-- +Filesystem type. type: keyword -- -*`vsphere.datastore.iops`*:: +*`vsphere.datastore.host.count`*:: + -- -Storage I/O Control aggregated Input/Output Operations Per Second. +Number of hosts. type: long -- -*`vsphere.datastore.name`*:: +*`vsphere.datastore.host.names`*:: + -- -Datastore name. +List of all the host names. type: keyword -- -*`vsphere.datastore.read.bytes`*:: +*`vsphere.datastore.name`*:: + -- -Rate of reading data from the datastore. - +Datastore name. -type: long -format: bytes +type: keyword -- -*`vsphere.datastore.read.latency.total.ms`*:: +*`vsphere.datastore.read.bytes`*:: + -- -Average amount of time for a read operation from the datastore in milliseconds. +Rate of reading data from the datastore. type: long +format: bytes + -- *`vsphere.datastore.status`*:: @@ -67124,16 +67140,6 @@ format: bytes -- -*`vsphere.datastore.write.latency.total.ms`*:: -+ --- -Average amount of time for a write operation from the datastore in milliseconds. - - -type: long - --- - [float] === datastorecluster @@ -68119,7 +68125,7 @@ type: long *`vsphere.virtualmachine.snapshot.info`*:: + -- -Deatils of the snapshots of this virtualmachine. +Details of the snapshots of this virtualmachine. type: object diff --git a/metricbeat/module/vsphere/datastore/_meta/data.json b/metricbeat/module/vsphere/datastore/_meta/data.json index 9ab349a293c7..a6b0289236ce 100644 --- a/metricbeat/module/vsphere/datastore/_meta/data.json +++ b/metricbeat/module/vsphere/datastore/_meta/data.json @@ -10,39 +10,51 @@ "period": 10000 }, "service": { - "address": "127.0.0.1:55632", + "address": "127.0.0.1:33365", "type": "vsphere" }, "vsphere": { "datastore": { + "host": { + "count": 1, + "names": ["DC3_H0"] + }, + "status": "green", + "vm": { + "count": 6, + "names": ["DC3_H0_VM0"] + }, + "read": { + "bytes": 0 + }, + "write": { + "bytes": 337000 + }, + "disk": { + "capacity": { + "usage": { + "bytes": 520505786368 + }, + "bytes": 1610344300544 + }, + "provisioned": { + "bytes": 520505786368 + } + }, "capacity": { "free": { - "bytes": 10973641441280 + "bytes": 37120094208 }, "total": { - "bytes": 10995116277760 + "bytes": 74686664704 }, "used": { - "bytes": 21474836480, - "pct": 0.001953125 + "bytes": 37566570496, + "pct": 0.502988996026061 } }, - "fstype": "OTHER", - "host": { - "count": 1, - "names": [ - "localhost_localdomain" - ] - }, - "name": "LocalDS_0", - "status": "green", - "vm": { - "count": 2, - "names": [ - "ha-host_VM0", - "ha-host_VM1" - ] - } + "fstype": "local", + "name": "LocalDS_0" } } -} \ No newline at end of file +} diff --git a/metricbeat/module/vsphere/datastore/_meta/fields.yml b/metricbeat/module/vsphere/datastore/_meta/fields.yml index e9fb22a486d5..07a478936344 100644 --- a/metricbeat/module/vsphere/datastore/_meta/fields.yml +++ b/metricbeat/module/vsphere/datastore/_meta/fields.yml @@ -24,6 +24,21 @@ description: > Percentage of datastore capacity used. format: percent + - name: disk.capacity.bytes + type: long + description: > + Configured size of the datastore. + format: bytes + - name: disk.capacity.usage.bytes + type: long + description: > + The amount of storage capacity currently being consumed by or on the entity. + format: bytes + - name: disk.provisioned.bytes + type: long + description: > + Amount of storage set aside for use by a datastore or a virtual machine. + format: bytes - name: fstype type: keyword description: > @@ -36,10 +51,6 @@ type: keyword description: > List of all the host names. - - name: iops - type: long - description: > - Storage I/O Control aggregated Input/Output Operations Per Second. - name: name type: keyword description: > @@ -49,10 +60,6 @@ description: > Rate of reading data from the datastore. format: bytes - - name: read.latency.total.ms - type: long - description: > - Average amount of time for a read operation from the datastore in milliseconds. - name: status type: keyword description: > @@ -70,8 +77,4 @@ description: > Rate of writing data to the datastore. format: bytes - - name: write.latency.total.ms - type: long - description: > - Average amount of time for a write operation from the datastore in milliseconds. diff --git a/metricbeat/module/vsphere/datastore/data.go b/metricbeat/module/vsphere/datastore/data.go index 0b438f96268f..413854cafa77 100644 --- a/metricbeat/module/vsphere/datastore/data.go +++ b/metricbeat/module/vsphere/datastore/data.go @@ -65,16 +65,16 @@ func mapPerfMetricToEvent(event mapstr.M, perfMetricMap map[string]interface{}) if val, exist := perfMetricMap["datastore.read.average"]; exist { event.Put("read.bytes", val.(int64)*bytesMultiplier) } - if val, exist := perfMetricMap["datastore.totalReadLatency.average"]; exist { - event.Put("read.latency.total.ms", val) - } if val, exist := perfMetricMap["datastore.write.average"]; exist { event.Put("write.bytes", val.(int64)*bytesMultiplier) } - if val, exist := perfMetricMap["datastore.totalWriteLatency.average"]; exist { - event.Put("write.latency.total.ms", val) + if val, exist := perfMetricMap["disk.capacity.latest"]; exist { + event.Put("disk.capacity.bytes", val.(int64)*bytesMultiplier) + } + if val, exist := perfMetricMap["disk.capacity.usage.average"]; exist { + event.Put("disk.capacity.usage.bytes", val.(int64)*bytesMultiplier) } - if val, exist := perfMetricMap["datastore.datastoreIops.average"]; exist { - event.Put("iops", val) + if val, exist := perfMetricMap["disk.provisioned.latest"]; exist { + event.Put("disk.provisioned.bytes", val.(int64)*bytesMultiplier) } } diff --git a/metricbeat/module/vsphere/datastore/data_test.go b/metricbeat/module/vsphere/datastore/data_test.go index 4ecc091794c3..23189e3e49f9 100644 --- a/metricbeat/module/vsphere/datastore/data_test.go +++ b/metricbeat/module/vsphere/datastore/data_test.go @@ -28,7 +28,6 @@ import ( ) func TestEventMapping(t *testing.T) { - var m *DataStoreMetricSet var datastoreTest = mo.Datastore{ Summary: types.DatastoreSummary{ Name: "datastore-test", @@ -47,11 +46,11 @@ func TestEventMapping(t *testing.T) { var metricDataTest = metricData{ perfMetrics: map[string]interface{}{ - "datastore.read.average": int64(100), - "datastore.write.average": int64(200), - "datastore.datastoreIops.average": int64(10), - "datastore.totalReadLatency.average": int64(100), - "datastore.totalWriteLatency.average": int64(100), + "datastore.read.average": int64(100), + "datastore.write.average": int64(200), + "disk.capacity.latest": int64(10000), + "disk.capacity.usage.average": int64(5000), + "disk.provisioned.latest": int64(5000), }, assetNames: assetNames{ outputHostNames: []string{"DC3_H0"}, @@ -59,11 +58,10 @@ func TestEventMapping(t *testing.T) { }, } - outputEvent := m.mapEvent(datastoreTest, &metricDataTest) + outputEvent := (&DataStoreMetricSet{}).mapEvent(datastoreTest, &metricDataTest) testEvent := mapstr.M{ "fstype": "local", "status": types.ManagedEntityStatus("green"), - "iops": int64(10), "name": "datastore-test", "host": mapstr.M{ "count": 1, @@ -75,19 +73,20 @@ func TestEventMapping(t *testing.T) { }, "read": mapstr.M{ "bytes": int64(102400), - "latency": mapstr.M{ - "total": mapstr.M{ - "ms": int64(100), - }, - }, }, "write": mapstr.M{ "bytes": int64(204800), - "latency": mapstr.M{ - "total": mapstr.M{ - "ms": int64(100), + }, + "disk": mapstr.M{ + "capacity": mapstr.M{ + "bytes": int64(10240000), + "usage": mapstr.M{ + "bytes": int64(5120000), }, }, + "provisioned": mapstr.M{ + "bytes": int64(5120000), + }, }, "capacity": mapstr.M{ "free": mapstr.M{ @@ -104,5 +103,4 @@ func TestEventMapping(t *testing.T) { } assert.Exactly(t, outputEvent, testEvent) - } diff --git a/metricbeat/module/vsphere/datastore/datastore.go b/metricbeat/module/vsphere/datastore/datastore.go index 3014ec0e3f5d..79ab67fe9783 100644 --- a/metricbeat/module/vsphere/datastore/datastore.go +++ b/metricbeat/module/vsphere/datastore/datastore.go @@ -66,11 +66,11 @@ type assetNames struct { // Define metrics to be collected var metricSet = map[string]struct{}{ - "datastore.read.average": {}, - "datastore.write.average": {}, - "datastore.datastoreIops.average": {}, - "datastore.totalReadLatency.average": {}, - "datastore.totalWriteLatency.average": {}, + "datastore.read.average": {}, + "datastore.write.average": {}, + "disk.capacity.latest": {}, + "disk.capacity.usage.average": {}, + "disk.provisioned.latest": {}, } // Fetch methods implements the data gathering and data conversion to the right @@ -97,7 +97,7 @@ func (m *DataStoreMetricSet) Fetch(ctx context.Context, reporter mb.ReporterV2) v, err := mgr.CreateContainerView(ctx, c.ServiceContent.RootFolder, []string{"Datastore"}, true) if err != nil { - return fmt.Errorf("error in CreateContainerView: %w", err) + return fmt.Errorf("error in creating container view: %w", err) } defer func() { @@ -122,39 +122,28 @@ func (m *DataStoreMetricSet) Fetch(ctx context.Context, reporter mb.ReporterV2) return fmt.Errorf("failed to retrieve metrics: %w", err) } - // Filter for required metrics - var metricIds []types.PerfMetricId - for metricName := range metricSet { - if metric, ok := metrics[metricName]; ok { - metricIds = append(metricIds, types.PerfMetricId{CounterId: metric.Key}) - } else { - m.Logger().Warnf("Metric %s not found", metricName) - } - } - - pc := property.DefaultCollector(c) + pc := property.DefaultCollector(client.Client) for i := range dst { - select { - case <-ctx.Done(): + if ctx.Err() != nil { return ctx.Err() - default: - assetNames, err := getAssetNames(ctx, pc, &dst[i]) - if err != nil { - m.Logger().Errorf("Failed to retrieve object from datastore %s: %v", dst[i].Name, err) - } + } - metricMap, err := m.getPerfMetrics(ctx, perfManager, dst[i], metricIds) - if err != nil { - m.Logger().Errorf("Failed to retrieve performance metrics from datastore %s: %v", dst[i].Name, err) - } + assetNames, err := getAssetNames(ctx, pc, &dst[i]) + if err != nil { + m.Logger().Errorf("Failed to retrieve object from datastore %s: %v", dst[i].Name, err) + } - reporter.Event(mb.Event{ - MetricSetFields: m.mapEvent(dst[i], &metricData{ - perfMetrics: metricMap, - assetNames: assetNames, - }), - }) + metricMap, err := m.getPerfMetrics(ctx, perfManager, dst[i], metrics) + if err != nil { + m.Logger().Errorf("Failed to retrieve performance metrics from datastore %s: %v", dst[i].Name, err) } + + reporter.Event(mb.Event{ + MetricSetFields: m.mapEvent(dst[i], &metricData{ + perfMetrics: metricMap, + assetNames: assetNames, + }), + }) } return nil @@ -167,6 +156,7 @@ func getAssetNames(ctx context.Context, pc *property.Collector, ds *mo.Datastore if err := pc.Retrieve(ctx, ds.Vm, []string{"name"}, &objects); err != nil { return assetNames{}, err } + for _, ob := range objects { if ob.Reference().Type == "VirtualMachine" { name := strings.ReplaceAll(ob.Name, ".", "_") @@ -174,6 +164,7 @@ func getAssetNames(ctx context.Context, pc *property.Collector, ds *mo.Datastore } } } + // calling Host explicitly because of mo.Datastore.Host has types.DatastoreHostMount instead of mo.ManagedEntity outputHostNames := make([]string, 0, len(ds.Host)) if len(ds.Host) > 0 { @@ -205,17 +196,37 @@ func getAssetNames(ctx context.Context, pc *property.Collector, ds *mo.Datastore }, nil } -func (m *DataStoreMetricSet) getPerfMetrics(ctx context.Context, perfManager *performance.Manager, dst mo.Datastore, metricIds []types.PerfMetricId) (metricMap map[string]interface{}, err error) { +func (m *DataStoreMetricSet) getPerfMetrics(ctx context.Context, perfManager *performance.Manager, dst mo.Datastore, metrics map[string]*types.PerfCounterInfo) (metricMap map[string]interface{}, err error) { metricMap = make(map[string]interface{}) - period := m.Module().Config().Period - refreshRate := int32(period.Seconds()) + period := int32(m.Module().Config().Period.Seconds()) + availableMetric, err := perfManager.AvailableMetric(ctx, dst.Reference(), period) + if err != nil { + return nil, fmt.Errorf("failed to get available metrics: %w", err) + } + + availableMetricByKey := availableMetric.ByKey() + + // Filter for required metrics + var metricIDs []types.PerfMetricId + for key, metric := range metricSet { + if counter, ok := metrics[key]; ok { + if _, exists := availableMetricByKey[counter.Key]; exists { + metricIDs = append(metricIDs, types.PerfMetricId{ + CounterId: counter.Key, + Instance: "*", + }) + } + } else { + m.Logger().Warnf("Metric %s not found", metric) + } + } spec := types.PerfQuerySpec{ Entity: dst.Reference(), - MetricId: metricIds, + MetricId: metricIDs, MaxSample: 1, - IntervalId: refreshRate, // using refreshRate as interval + IntervalId: period, // using refreshRate as interval } // Query performance data diff --git a/metricbeat/module/vsphere/datastore/datastore_test.go b/metricbeat/module/vsphere/datastore/datastore_test.go index d9a9a5487809..a33ed414b399 100644 --- a/metricbeat/module/vsphere/datastore/datastore_test.go +++ b/metricbeat/module/vsphere/datastore/datastore_test.go @@ -19,7 +19,6 @@ package datastore import ( "testing" - "time" mbtest "github.com/elastic/beats/v7/metricbeat/mb/testing" @@ -33,19 +32,15 @@ func TestFetchEventContents(t *testing.T) { model := simulator.VPX() err := model.Create() require.NoError(t, err, "failed to create model") - t.Cleanup(func() { model.Remove() }) + t.Cleanup(model.Remove) ts := model.Service.NewServer() - t.Cleanup(func() { ts.Close() }) + t.Cleanup(ts.Close) f := mbtest.NewReportingMetricSetV2WithContext(t, getConfig(ts)) events, errs := mbtest.ReportingFetchV2WithContext(f) - if len(errs) > 0 { - t.Fatalf("Expected 0 error, had %d. %v\n", len(errs), errs) - } - require.Empty(t, errs, "expected no error") - - require.NotEmpty(t, events, "didn't get any event, should have gotten at least X") + require.Empty(t, errs, "Expected no errors during fetch") + require.NotEmpty(t, events, "Expected to receive at least one event") event := events[0].MetricSetFields @@ -63,6 +58,9 @@ func TestFetchEventContents(t *testing.T) { "vm.count", "write.bytes", "capacity.used.bytes", + "disk.capacity.usage.bytes", + "disk.capacity.bytes", + "disk.provisioned.bytes", } for _, field := range fields { value, err := event.GetValue(field) @@ -85,10 +83,10 @@ func TestDataStoreMetricSetData(t *testing.T) { model := simulator.ESX() err := model.Create() require.NoError(t, err, "failed to create model") - t.Cleanup(func() { model.Remove() }) + t.Cleanup(model.Remove) ts := model.Service.NewServer() - t.Cleanup(func() { ts.Close() }) + t.Cleanup(ts.Close) f := mbtest.NewReportingMetricSetV2WithContext(t, getConfig(ts)) @@ -97,15 +95,12 @@ func TestDataStoreMetricSetData(t *testing.T) { } func getConfig(ts *simulator.Server) map[string]interface{} { - urlSimulator := ts.URL.Scheme + "://" + ts.URL.Host + ts.URL.Path - return map[string]interface{}{ "module": "vsphere", "metricsets": []string{"datastore"}, - "hosts": []string{urlSimulator}, + "hosts": []string{ts.URL.String()}, "username": "user", "password": "pass", "insecure": true, - "period": time.Second * 20, } } diff --git a/metricbeat/module/vsphere/fields.go b/metricbeat/module/vsphere/fields.go index 7693e0a43286..896c91362296 100644 --- a/metricbeat/module/vsphere/fields.go +++ b/metricbeat/module/vsphere/fields.go @@ -32,5 +32,5 @@ func init() { // AssetVsphere returns asset data. // This is the base64 encoded zlib format compressed contents of module/vsphere. func AssetVsphere() string { - return "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" + return "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" } diff --git a/metricbeat/module/vsphere/host/host.go b/metricbeat/module/vsphere/host/host.go index 6248f3e6cba3..cd791f5d21bf 100644 --- a/metricbeat/module/vsphere/host/host.go +++ b/metricbeat/module/vsphere/host/host.go @@ -136,36 +136,27 @@ func (m *HostMetricSet) Fetch(ctx context.Context, reporter mb.ReporterV2) error return fmt.Errorf("failed to retrieve metrics: %w", err) } - // Filter for required metrics - var metricIds []types.PerfMetricId - for metricName := range metricSet { - if metric, ok := metrics[metricName]; ok { - metricIds = append(metricIds, types.PerfMetricId{CounterId: metric.Key}) - } else { - m.Logger().Warnf("Metric %s not found", metricName) - } - } - pc := property.DefaultCollector(c) for i := range hst { - select { - case <-ctx.Done(): + if ctx.Err() != nil { return ctx.Err() - default: - assetNames, err := getAssetNames(ctx, pc, &hst[i]) - if err != nil { - m.Logger().Errorf("Failed to retrieve object from host %s: %v", hst[i].Name, err) - } - - metricMap, err := m.getPerfMetrics(ctx, perfManager, hst[i], metricIds) - if err != nil { - m.Logger().Errorf("Failed to retrieve performance metrics from host %s: %v", hst[i].Name, err) - } + } + assetNames, err := getAssetNames(ctx, pc, &hst[i]) + if err != nil { + m.Logger().Errorf("Failed to retrieve object from host %s: %v", hst[i].Name, err) + } - reporter.Event(mb.Event{ - MetricSetFields: m.mapEvent(hst[i], &metricData{perfMetrics: metricMap, assetNames: assetNames}), - }) + metricMap, err := m.getPerfMetrics(ctx, perfManager, hst[i], metrics) + if err != nil { + m.Logger().Errorf("Failed to retrieve performance metrics from host %s: %v", hst[i].Name, err) } + + reporter.Event(mb.Event{ + MetricSetFields: m.mapEvent(hst[i], &metricData{ + perfMetrics: metricMap, + assetNames: assetNames, + }), + }) } return nil @@ -213,17 +204,37 @@ func getAssetNames(ctx context.Context, pc *property.Collector, hs *mo.HostSyste }, nil } -func (m *HostMetricSet) getPerfMetrics(ctx context.Context, perfManager *performance.Manager, hst mo.HostSystem, metricIds []types.PerfMetricId) (metricMap map[string]interface{}, err error) { +func (m *HostMetricSet) getPerfMetrics(ctx context.Context, perfManager *performance.Manager, hst mo.HostSystem, metrics map[string]*types.PerfCounterInfo) (metricMap map[string]interface{}, err error) { metricMap = make(map[string]interface{}) - period := m.Module().Config().Period - refreshRate := int32(period.Seconds()) + period := int32(m.Module().Config().Period.Seconds()) + availableMetric, err := perfManager.AvailableMetric(ctx, hst.Reference(), period) + if err != nil { + return nil, fmt.Errorf("failed to get available metrics: %w", err) + } + + availableMetricByKey := availableMetric.ByKey() + + // Filter for required metrics + var metricIDs []types.PerfMetricId + for key, metric := range metricSet { + if counter, ok := metrics[key]; ok { + if _, exists := availableMetricByKey[counter.Key]; exists { + metricIDs = append(metricIDs, types.PerfMetricId{ + CounterId: counter.Key, + Instance: "*", + }) + } + } else { + m.Logger().Warnf("Metric %s not found", metric) + } + } spec := types.PerfQuerySpec{ Entity: hst.Reference(), - MetricId: metricIds, + MetricId: metricIDs, MaxSample: 1, - IntervalId: refreshRate, + IntervalId: period, } // Query performance data diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/data.json b/metricbeat/module/vsphere/virtualmachine/_meta/data.json index 87d765a67321..edefcf50facd 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/data.json +++ b/metricbeat/module/vsphere/virtualmachine/_meta/data.json @@ -1,93 +1,93 @@ { - "@timestamp": "2024-08-12T04:51:25.851Z", - "event": { - "dataset": "vsphere.virtualmachine", - "duration": 115000, - "module": "vsphere" - }, - "metricset": { - "name": "virtualmachine", - "period": 10000 - }, - "service": { - "address": "127.0.0.1:39149", - "type": "vsphere" - }, - "vsphere": { - "virtualmachine": { - "name": "xt0nmfpv9", - "uptime": 5348978, - "status": "green", - "host": { - "id": "host-32", - "hostname": "phx-w1c1-esxi04.com" + "@timestamp": "2024-08-12T04:51:25.851Z", + "event": { + "dataset": "vsphere.virtualmachine", + "duration": 115000, + "module": "vsphere" + }, + "metricset": { + "name": "virtualmachine", + "period": 10000 + }, + "service": { + "address": "127.0.0.1:39149", + "type": "vsphere" + }, + "vsphere": { + "virtualmachine": { + "name": "xt0nmfpv9", + "uptime": 5348978, + "status": "green", + "host": { + "id": "host-32", + "hostname": "phx-w1c1-esxi04.com" + }, + "cpu": { + "free": { + "mhz": 0 }, - "cpu": { - "free": { - "mhz": 0 - }, - "used": { - "mhz": 161 - }, - "total": { - "mhz": 0 - } - }, - "network": { - "names": [ - "PROD_VCF_VMS" - ], - "count": 1 + "used": { + "mhz": 161 }, - "memory": { - "used": { - "guest": { - "bytes": 686817280 - }, - "host": { - "bytes": 29027729408 - } - }, - "total": { - "guest": { - "bytes": 68719476736 - } + "total": { + "mhz": 0 + } + }, + "network": { + "names": [ + "PROD_VCF_VMS" + ], + "count": 1 + }, + "memory": { + "used": { + "guest": { + "bytes": 686817280 }, - "free": { - "guest": { - "bytes": 68032659456 - } + "host": { + "bytes": 29027729408 } }, - "network_names": [ - "PROD_VCF_VMS" - ], - "datastore": { - "count": 1, - "names": [ - "VxRailtoup-Virtual-Datastore-bc1d-5aa310fb" - ] + "total": { + "guest": { + "bytes": 68719476736 + } }, - "os": "CentOS 4/5/6/7 (64-bit)", - "snapshot": { - "info": [ - { - "id": 123, - "name": "Snapshot_1", + "free": { + "guest": { + "bytes": 68032659456 + } + } + }, + "network_names": [ + "PROD_VCF_VMS" + ], + "datastore": { + "count": 1, + "names": [ + "VxRailtoup-Virtual-Datastore-bc1d-5aa310fb" + ] + }, + "os": "CentOS 4/5/6/7 (64-bit)", + "snapshot": { + "info": [ + { + "id": 123, + "name": "Snapshot_1", "description": "Test snapshot 1", - "createtime": "2024-09-01T12:34:56Z", - "state": "PoweredOff" - }, - { - "id": 745, - "name": "Snapshot_2", + "createtime": "2024-09-01T12:34:56Z", + "state": "PoweredOff" + }, + { + "id": 745, + "name": "Snapshot_2", "description": "Test snapshot 2", - "createtime": "2024-09-03T2:34:56Z", - "state": "PoweredOn" - } - ], - "count": 2 - } + "createtime": "2024-09-03T2:34:56Z", + "state": "PoweredOn" + } + ], + "count": 2 } } } +} \ No newline at end of file diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml index 2e0d61050df5..2d9e21d61a92 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml +++ b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml @@ -99,7 +99,23 @@ fields: - name: info type: object - description: Deatils of the snapshots of this virtualmachine. + description: Details of the snapshots of this virtualmachine. + fields: + - name: id + type: keyword + description: The unique identifier that distinguishes this snapshot from other snapshots of the virtual machine. + - name: name + type: keyword + description: Name of the snapshot. + - name: description + type: keyword + description: Description of the snapshot. + - name: createtime + type: keyword + description: The date and time the snapshot was taken. + - name: state + type: keyword + description: The power state of the virtual machine when this snapshot was taken. - name: count type: long description: The number of snapshots of this virtualmachine. diff --git a/metricbeat/module/vsphere/virtualmachine/virtualmachine.go b/metricbeat/module/vsphere/virtualmachine/virtualmachine.go index bcc42b516538..9446e7ebb031 100644 --- a/metricbeat/module/vsphere/virtualmachine/virtualmachine.go +++ b/metricbeat/module/vsphere/virtualmachine/virtualmachine.go @@ -136,7 +136,7 @@ func (m *MetricSet) Fetch(ctx context.Context, reporter mb.ReporterV2) error { // Retrieve summary property for all machines var vmt []mo.VirtualMachine - err = v.Retrieve(ctx, []string{"VirtualMachine"}, []string{"summary", "datastore"}, &vmt) + err = v.Retrieve(ctx, []string{"VirtualMachine"}, []string{"summary", "datastore", "snapshot"}, &vmt) if err != nil { return fmt.Errorf("virtualmachine: error in Retrieve: %w", err) } From eddbb897be73be54e542b554324326779bfc5c1d Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Thu, 12 Sep 2024 14:34:30 +0530 Subject: [PATCH 2/6] update field mappings --- metricbeat/docs/fields.asciidoc | 2 +- metricbeat/module/vsphere/fields.go | 2 +- .../module/vsphere/host/_meta/data.json | 127 ++++++++++++------ .../vsphere/virtualmachine/_meta/fields.yml | 19 +-- .../vsphere/virtualmachine/data_test.go | 10 +- .../vsphere/virtualmachine/virtualmachine.go | 6 +- 6 files changed, 95 insertions(+), 71 deletions(-) diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 34073a1c79ec..916eb81b7294 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -68122,7 +68122,7 @@ type: long -- -*`vsphere.virtualmachine.snapshot.info`*:: +*`vsphere.virtualmachine.snapshot.info.*`*:: + -- Details of the snapshots of this virtualmachine. diff --git a/metricbeat/module/vsphere/fields.go b/metricbeat/module/vsphere/fields.go index 896c91362296..7de0917aa4fd 100644 --- a/metricbeat/module/vsphere/fields.go +++ b/metricbeat/module/vsphere/fields.go @@ -32,5 +32,5 @@ func init() { // AssetVsphere returns asset data. // This is the base64 encoded zlib format compressed contents of module/vsphere. func AssetVsphere() string { - return "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" + return "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" } diff --git a/metricbeat/module/vsphere/host/_meta/data.json b/metricbeat/module/vsphere/host/_meta/data.json index 568d08f97c9c..865498ac44c1 100644 --- a/metricbeat/module/vsphere/host/_meta/data.json +++ b/metricbeat/module/vsphere/host/_meta/data.json @@ -1,46 +1,55 @@ { - "@timestamp": "2017-10-12T08:05:34.853Z", - "event": { - "dataset": "vsphere.host", - "duration": 115000, - "module": "vsphere" - }, + "@timestamp": "2022-09-06T06:41:22.128Z", "metricset": { "name": "host", "period": 10000 }, "service": { - "address": "127.0.0.1:55538", + "address": "https://localhost:8989/sdk", "type": "vsphere" }, + "event": { + "module": "vsphere", + "duration": 23519250, + "dataset": "vsphere.host" + }, "vsphere": { "host": { "cpu": { - "free": { - "mhz": 4521 + "used": { + "mhz": 67 }, "total": { "mhz": 4588 }, - "used": { - "mhz": 67 + "free": { + "mhz": 4521 } }, - "datastore": { - "count": 1, - "names": [ - "LocalDS_0" - ] - }, "disk": { - "read": { - "bytes": 159744 + "capacity": { + "usage": { + "bytes": 0 + } + }, + "devicelatency": { + "average": { + "ms": 0 + } + }, + "latency": { + "total": { + "ms": 18 + } }, "total": { - "bytes": 401408 + "bytes": 262000 + }, + "read": { + "bytes": 13000 }, "write": { - "bytes": 259072 + "bytes": 248000 } }, "memory": { @@ -54,49 +63,79 @@ "bytes": 1472200704 } }, - "name": "localhost.localdomain", "network": { "bandwidth": { - "received": { - "bytes": 270336 - }, "total": { - "bytes": 532480 + "bytes": 372000 }, "transmitted": { - "bytes": 249856 + "bytes": 0 + }, + "received": { + "bytes": 371000 } }, - "count": 1, - "names": [ - "VM Network" - ], "packets": { + "received": { + "count": 9463 + }, + "errors": { + "transmitted": { + "count": 0 + }, + "received": { + "count": 0 + }, + "total": { + "count": 0 + } + }, "multicast": { + "total": { + "count": 6679 + }, + "transmitted": { + "count": 0 + }, "received": { - "count": 61 + "count": 6679 } }, - "received": { - "count": 4569 + "dropped": { + "received": { + "count": 0 + }, + "total": { + "count": 0 + }, + "transmitted": { + "count": 0 + } }, "transmitted": { - "count": 4578 + "count": 54 } } }, - "network_names": [ - "VM Network" - ], - "status": "gray", - "uptime": 77229, "vm": { "count": 2, "names": [ - "ha-host_VM0", - "ha-host_VM1" + "DC0_H0_VM0", + "DC0_H0_VM1" ] - } + }, + "datastore": { + "count": 1, + "names": [ + "LocalDS_0" + ] + }, + "network_names": [ + "VM Network" + ], + "name": "DC0_H0", + "status": "green", + "uptime": 1728865 } } -} \ No newline at end of file +} diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml index 2d9e21d61a92..783ca427b345 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml +++ b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml @@ -97,25 +97,10 @@ - name: snapshot type: group fields: - - name: info + - name: info.* type: object + object_type: keyword description: Details of the snapshots of this virtualmachine. - fields: - - name: id - type: keyword - description: The unique identifier that distinguishes this snapshot from other snapshots of the virtual machine. - - name: name - type: keyword - description: Name of the snapshot. - - name: description - type: keyword - description: Description of the snapshot. - - name: createtime - type: keyword - description: The date and time the snapshot was taken. - - name: state - type: keyword - description: The power state of the virtual machine when this snapshot was taken. - name: count type: long description: The number of snapshots of this virtualmachine. diff --git a/metricbeat/module/vsphere/virtualmachine/data_test.go b/metricbeat/module/vsphere/virtualmachine/data_test.go index e48518fa8a95..32abe001c391 100644 --- a/metricbeat/module/vsphere/virtualmachine/data_test.go +++ b/metricbeat/module/vsphere/virtualmachine/data_test.go @@ -19,12 +19,12 @@ package virtualmachine import ( "testing" - "time" "github.com/stretchr/testify/assert" "github.com/vmware/govmomi/vim25/mo" "github.com/vmware/govmomi/vim25/types" + "github.com/elastic/beats/v7/libbeat/common" "github.com/elastic/elastic-agent-libs/mapstr" ) @@ -64,14 +64,14 @@ func TestEventMapping(t *testing.T) { ID: 123, Name: "Snapshot_1", Description: "Test snapshot 1", - CreateTime: time.Time{}, + CreateTime: common.Time{}, State: types.VirtualMachinePowerStatePoweredOff, }, { ID: 745, Name: "Snapshot_2", Description: "Test snapshot 2", - CreateTime: time.Time{}, + CreateTime: common.Time{}, State: types.VirtualMachinePowerStatePoweredOn, }, }, @@ -133,14 +133,14 @@ func TestEventMapping(t *testing.T) { ID: 123, Name: "Snapshot_1", Description: "Test snapshot 1", - CreateTime: time.Time{}, + CreateTime: common.Time{}, State: types.VirtualMachinePowerStatePoweredOff, }, { ID: 745, Name: "Snapshot_2", Description: "Test snapshot 2", - CreateTime: time.Time{}, + CreateTime: common.Time{}, State: types.VirtualMachinePowerStatePoweredOn, }, }, diff --git a/metricbeat/module/vsphere/virtualmachine/virtualmachine.go b/metricbeat/module/vsphere/virtualmachine/virtualmachine.go index 9446e7ebb031..124bc0c56e55 100644 --- a/metricbeat/module/vsphere/virtualmachine/virtualmachine.go +++ b/metricbeat/module/vsphere/virtualmachine/virtualmachine.go @@ -22,8 +22,8 @@ import ( "errors" "fmt" "strings" - "time" + "github.com/elastic/beats/v7/libbeat/common" "github.com/elastic/beats/v7/metricbeat/mb" "github.com/elastic/beats/v7/metricbeat/module/vsphere" "github.com/elastic/elastic-agent-libs/mapstr" @@ -64,7 +64,7 @@ type VMSnapshotData struct { ID int32 `json:"id"` Name string `json:"name"` Description string `json:"description"` - CreateTime time.Time `json:"createtime"` + CreateTime common.Time `json:"createtime"` State types.VirtualMachinePowerState `json:"state"` } @@ -294,7 +294,7 @@ func fetchSnapshots(snapshotTree []types.VirtualMachineSnapshotTree) []VMSnapsho ID: snapshot.Id, Name: snapshot.Name, Description: snapshot.Description, - CreateTime: snapshot.CreateTime, + CreateTime: common.Time(snapshot.CreateTime), State: snapshot.State, }) From 8a7cdb7a6b2f799bab985404ce55c425106b1b97 Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Thu, 12 Sep 2024 15:24:25 +0530 Subject: [PATCH 3/6] update virtual machine data.json --- .../vsphere/virtualmachine/_meta/data.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/data.json b/metricbeat/module/vsphere/virtualmachine/_meta/data.json index edefcf50facd..71ae93a3d441 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/data.json +++ b/metricbeat/module/vsphere/virtualmachine/_meta/data.json @@ -72,18 +72,18 @@ "snapshot": { "info": [ { - "id": 123, - "name": "Snapshot_1", - "description": "Test snapshot 1", - "createtime": "2024-09-01T12:34:56Z", - "state": "PoweredOff" + "id": 1, + "name": "VM Snapshot 7%2f3%2f2024, 4:01:21 PM", + "description": "Created to demo", + "createtime": "2024-07-03T20:01:34.329Z", + "state": "poweredOn" }, { - "id": 745, - "name": "Snapshot_2", - "description": "Test snapshot 2", - "createtime": "2024-09-03T2:34:56Z", - "state": "PoweredOn" + "createtime": "2024-07-05T23:35:40.859Z", + "state": "poweredOn", + "id": 2, + "name": "VM Snapshot 7%2f5%2f2024, 7:35:37 PM", + "description": "backup" } ], "count": 2 From d7db1ede11d8929414d1b830d8ce9dadebd3ec38 Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Thu, 12 Sep 2024 15:50:39 +0530 Subject: [PATCH 4/6] format data.json --- metricbeat/module/vsphere/datastore/_meta/data.json | 10 +++++++--- metricbeat/module/vsphere/host/_meta/data.json | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/metricbeat/module/vsphere/datastore/_meta/data.json b/metricbeat/module/vsphere/datastore/_meta/data.json index a6b0289236ce..dc690b8d40e9 100644 --- a/metricbeat/module/vsphere/datastore/_meta/data.json +++ b/metricbeat/module/vsphere/datastore/_meta/data.json @@ -17,12 +17,16 @@ "datastore": { "host": { "count": 1, - "names": ["DC3_H0"] + "names": [ + "DC3_H0" + ] }, "status": "green", "vm": { "count": 6, - "names": ["DC3_H0_VM0"] + "names": [ + "DC3_H0_VM0" + ] }, "read": { "bytes": 0 @@ -57,4 +61,4 @@ "name": "LocalDS_0" } } -} +} \ No newline at end of file diff --git a/metricbeat/module/vsphere/host/_meta/data.json b/metricbeat/module/vsphere/host/_meta/data.json index 865498ac44c1..462000c6243e 100644 --- a/metricbeat/module/vsphere/host/_meta/data.json +++ b/metricbeat/module/vsphere/host/_meta/data.json @@ -120,7 +120,7 @@ "vm": { "count": 2, "names": [ - "DC0_H0_VM0", + "DC0_H0_VM0", "DC0_H0_VM1" ] }, @@ -138,4 +138,4 @@ "uptime": 1728865 } } -} +} \ No newline at end of file From 53b73ad6e9a626d1fbd8697b4b291ebc78655f48 Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Thu, 12 Sep 2024 18:01:26 +0530 Subject: [PATCH 5/6] resolve review comments --- metricbeat/docs/fields.asciidoc | 4 +- .../module/vsphere/datastore/_meta/fields.yml | 4 +- metricbeat/module/vsphere/fields.go | 2 +- .../vsphere/virtualmachine/_meta/data.json | 178 +++++++++--------- 4 files changed, 94 insertions(+), 94 deletions(-) diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 916eb81b7294..5e1c335d0d66 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -67025,7 +67025,7 @@ format: bytes *`vsphere.datastore.disk.capacity.usage.bytes`*:: + -- -The amount of storage capacity currently being consumed by or on the entity. +The amount of storage capacity currently being consumed by datastore. type: long @@ -67037,7 +67037,7 @@ format: bytes *`vsphere.datastore.disk.provisioned.bytes`*:: + -- -Amount of storage set aside for use by a datastore or a virtual machine. +Amount of storage set aside for use by a datastore. type: long diff --git a/metricbeat/module/vsphere/datastore/_meta/fields.yml b/metricbeat/module/vsphere/datastore/_meta/fields.yml index 07a478936344..e44f5cec7f2a 100644 --- a/metricbeat/module/vsphere/datastore/_meta/fields.yml +++ b/metricbeat/module/vsphere/datastore/_meta/fields.yml @@ -32,12 +32,12 @@ - name: disk.capacity.usage.bytes type: long description: > - The amount of storage capacity currently being consumed by or on the entity. + The amount of storage capacity currently being consumed by datastore. format: bytes - name: disk.provisioned.bytes type: long description: > - Amount of storage set aside for use by a datastore or a virtual machine. + Amount of storage set aside for use by a datastore. format: bytes - name: fstype type: keyword diff --git a/metricbeat/module/vsphere/fields.go b/metricbeat/module/vsphere/fields.go index 7de0917aa4fd..54f4f093b7a8 100644 --- a/metricbeat/module/vsphere/fields.go +++ b/metricbeat/module/vsphere/fields.go @@ -32,5 +32,5 @@ func init() { // AssetVsphere returns asset data. // This is the base64 encoded zlib format compressed contents of module/vsphere. func AssetVsphere() string { - return "eJzkXM1uGzkSvucpCnPZZOHoAXxYIJtgJgOsM4PY46tBsUturtlkL1ktQXn6Bcn+k/pHUovdsTE6BIEssb76L1ZV6yO84P4WtjZP0eA7ABIk8RZ+2d77d355B5Cg5UbkJLS6hX+9AwAo/wqZTgrpvmZQIrN4C8/sHcBGoEzsrf/oR1AswzYJ96J97j5sdJGX7/RQOTyofRiXhSU09ft9B7pXDWuNxFrv9xILr8/haBBqo03G3EdWrQ8cI2qjShgxS7pmchzb0GntE92/tvPX6sQX3O+0SXr+PsJf9fqPsAR6A0xKoBThSwU+EAVmreaCESawE5T6z5RiXw3i5bpQNIhXavU8Dey3IlujcXBrmBcgbPRjn7hWG3GMYrqCWJIJa52NcK3IaLlCxdYS+5QSqKy1lsjUNDn8rhLBGaGFXYqUogFLRnBqcECJA4SFEsqwuhbGWkWNr59gg4wKg4MoK4Sptsf2NF1Z81vnV21pouss6OoO5aVe3obZq5B+hCfQVcHWnTpAD2mnzcsbsoFvAfHrN4MS6CWWMJbp+nUygqvvkMM6onqNJV3OcsYF7Vcbg7ha76kjvkHVnpDZrwYR/IFOak4eNeJj/YVS4Ra65DswSROTUXE+uBPjAy0sJlFx/mUxmQlmzvuzhOVMYvK0kZodf+AE2D/RcFTEntGBrYHWdMHTHYCdhy/3FyHCvqxq9DHl+9mXNoXBBKz4gRGEfIi1sOw5roc9pAgscxHZgXUgnbxrEfPCGFQk97BGoZ5daWOLzBsRaANaef5QkUM3jbnc6K1wdVNkW//U4coiAbMiQQfNWY/jgrUsSxtgsBWGCiYhYzwVaoLKNtZBjpehfxUS7d4SZv6U4Spt1ZdZp4qvyabuaDtCtS9fXsHucY5M61JpiXLo8A7WT9Egi2uq3xn5WOEOdl7mLBI2RmfXRg9LjIqIurn3550Ia3W7IZvJIB/vBkxhm81tjI93Y6a4M4LihufKMtzJtWWQnmIXwxXkjK2cxp0+d4iMlZRxnfrhoLly+sYzS20QasQ6s3ofErZOTrlObkCooLQJSccgPtmc8cjlgQftDgd/eMj48WA3Njyz457TW+uYyFAPq8I8T3hLmv6aUKeADXRpLr4J+oZEq+Ea0k/VLkK1FUarDBWtrrsq5kW4LmTpj5h3ms9//uWEdff1x4BH50V57YtHOPjGOZT9vTgeYX8rPkV3Mc9KDj3rp/tMeSfxpenf9EqV4FZwlIxQ8f2KbdEhWGXRblbhwBaTJDIEQUDsBa2rT7jOcomEwBTcf77/3b2RMZWEsJKneys4kxCAOjvOhJTCItcqGTIhx1nFU+nLsTj6Kp5TtATl8bBlskBg3GhrvaE74tY3HJya6mvJ+cCj3xkqJajaB0JfxxFq3R2EfQFkPIUAcaJBxS9sh+A7SoSqrnHj4I/f8bsvMh93HD4vcmfcXkxg/MSlBfqK+ijDTJu5Gqt3/vDr0c3VT42Fb5426tXo4t5x6onS6BDnKXIxcDDAGKU8dxmizkcyTwmiqqHTyQKkwrFmKtmJhNIVGaZs5iLfPEnChSRgBLtU8DQ0EXbMQossJIVx1YhDLhSh2TK5ggd31TOYG7SoyPq/1qirNlDFzuUO0JGDQY5iu6wQKpqvQwKzZarKP9o6dzmrZj+krSqc9UpjMn854y9I9sDO5/HCklKbzXEnrKDVpjcvrprMWaDQGG2WFJvvhQSql4uwRLuQJNtQp0nVu1pMkKFsUWNQz0OYFZIEZ5YWUH1Na7rvNHBn1n0X62Wab8l1duV3sJ4HMTE6zzFZQPHtTFCJs6J+EdSZlV5nqKtALufto/BiT+QeUgTtChwpIUUmKS1J+Nq47lK4NH6imdtgLHISA1eTad0wL/vy2ENcZePER8hLYf7sad9s882jDYSBG8Xwel606V15u/tofC8xmbKQzThHa8Va9ttT/3rrCUl111oZgWOOQKuqM2eBN8s4pMGvmSQYple9BXuzn+i+t4rtqV3UTqflYkfKLCRIyH1ZXkMPoxhhbTGy9tEL8ZWtun/zQ7fyuuQXShyPKvDre31DWoFFN0cvgjZPI8eJavRiOVcq+Q2VyyNVGikhfBuDEHfR6WGfH3MO73H1vLqpULy/J6YSZpIPN/BFWDJiXRAmjyFg5trQh6FY/ea8pJMFXqXDTEHZ7FFZXRiOudZyjvT1vTwfHIGLh9snxtjR7CkMILvTYYigp38zK7gfFedoPPuKow8cwpLg9qZ3hNxGl2DGVN+4/nXA82NSidnxqm8bX59SYEQx7fP7+T7J+5n8Q2da7GRRuUXF/Q1Qyij40uNdeF7Hc+1c7AaYBc4kL0KJtt7Dl+/3XYHBUeIQfECnsXkLxA4Ya2vNr+KeWLo9HOfEdbxZrOa5QEu9TdxDGtdL+DdHqRQMFCSk+BEi3JET9Y6oapYG+7jHjPkbyBJ8+WnWrGwtFUGWkNZhDAlia+QTLX5cYilljFmK+zLKlBZzfqCJZUW5EVs2sCJxktcz+HQ8uvLW+cCwioWFZ8NUWXx1mA1lj9Lqo02ZuxanjZf1sX8e6+Gst8B5i936W6Uk1kg7RNVdLb9IEjvmG39vQBTVNfwf1qMOy73TOV8zKfXgEzyxeG8/UlVShMSIrf+pgEt9+zzG9BZNimz4+ey3mBqa+Pi+ktCHYDs7ISWssV5061oPW+stgiAbipzmxP8VwvhAG6HMqFYiF0sfjYQqhfd41+DiJmkwhTPAx7vrsgjXWW7QDq0rneT6TD9quG0IVopsmGzvpT7eTXWm+R7oUK0+mWnf9N/u4CVil+ondH7KKcWILmDhNtqFEGs1hK+V3zrZmRpBNHjS5U9ORO30i+GEdpXkw1MkIz934rjoCQURybfDwsgKXtRwVPaf4a5MksNrmDpiBDqm+keOhvmnBO/DUGnkAbeZH8NJF38M5ztaNNszIUR+HufTlgnJ1hJPEm8vJA83iWKsJetN2RuKsz092PiJhLV8/CzKInp8wR6so8eTrDfD+Gjbu/0RwPLCks6eQkrphajX/8XOr3+EN5+u+WUiT7jMZa9tq/1N/dDcwVyxeV6v9QxsNas7LFh+5mAx6f2VuXNwzvW7VUspSPX8etXr089UlHPdx/44vIsxlRzcx84aMEVffGtW3sp1smblbUAqiuU21RErfbXRq38OWkJv6IbzwndHBl+QmJC1HVe82Pq3DpazXt8gqG31fCTNf/4fAAD//4bsVMY=" + return "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" } diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/data.json b/metricbeat/module/vsphere/virtualmachine/_meta/data.json index 71ae93a3d441..8549f84040a2 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/data.json +++ b/metricbeat/module/vsphere/virtualmachine/_meta/data.json @@ -1,93 +1,93 @@ { - "@timestamp": "2024-08-12T04:51:25.851Z", - "event": { - "dataset": "vsphere.virtualmachine", - "duration": 115000, - "module": "vsphere" - }, - "metricset": { - "name": "virtualmachine", - "period": 10000 - }, - "service": { - "address": "127.0.0.1:39149", - "type": "vsphere" - }, - "vsphere": { - "virtualmachine": { - "name": "xt0nmfpv9", - "uptime": 5348978, - "status": "green", - "host": { - "id": "host-32", - "hostname": "phx-w1c1-esxi04.com" - }, - "cpu": { - "free": { - "mhz": 0 - }, - "used": { - "mhz": 161 - }, - "total": { - "mhz": 0 + "@timestamp": "2024-08-12T04:51:25.851Z", + "event": { + "dataset": "vsphere.virtualmachine", + "duration": 115000, + "module": "vsphere" + }, + "metricset": { + "name": "virtualmachine", + "period": 10000 + }, + "service": { + "address": "127.0.0.1:39149", + "type": "vsphere" + }, + "vsphere": { + "virtualmachine": { + "name": "xt0nmfpv9", + "uptime": 5348978, + "status": "green", + "host": { + "id": "host-32", + "hostname": "phx-w1c1-esxi04.com" + }, + "cpu": { + "free": { + "mhz": 0 + }, + "used": { + "mhz": 161 + }, + "total": { + "mhz": 0 + } + }, + "network": { + "names": [ + "PROD_VCF_VMS" + ], + "count": 1 + }, + "memory": { + "used": { + "guest": { + "bytes": 686817280 + }, + "host": { + "bytes": 29027729408 + } + }, + "total": { + "guest": { + "bytes": 68719476736 + } + }, + "free": { + "guest": { + "bytes": 68032659456 + } + } + }, + "network_names": [ + "PROD_VCF_VMS" + ], + "datastore": { + "count": 1, + "names": [ + "VxRailtoup-Virtual-Datastore-bc1d-5aa310fb" + ] + }, + "os": "CentOS 4/5/6/7 (64-bit)", + "snapshot": { + "info": [ + { + "id": 1, + "name": "VM Snapshot 7%2f3%2f2024, 4:01:21 PM", + "description": "Created to demo", + "createtime": "2024-07-03T20:01:34.329Z", + "state": "poweredOn" + }, + { + "createtime": "2024-07-05T23:35:40.859Z", + "state": "poweredOn", + "id": 2, + "name": "VM Snapshot 7%2f5%2f2024, 7:35:37 PM", + "description": "backup" + } + ], + "count": 2 + } } - }, - "network": { - "names": [ - "PROD_VCF_VMS" - ], - "count": 1 - }, - "memory": { - "used": { - "guest": { - "bytes": 686817280 - }, - "host": { - "bytes": 29027729408 - } - }, - "total": { - "guest": { - "bytes": 68719476736 - } - }, - "free": { - "guest": { - "bytes": 68032659456 - } - } - }, - "network_names": [ - "PROD_VCF_VMS" - ], - "datastore": { - "count": 1, - "names": [ - "VxRailtoup-Virtual-Datastore-bc1d-5aa310fb" - ] - }, - "os": "CentOS 4/5/6/7 (64-bit)", - "snapshot": { - "info": [ - { - "id": 1, - "name": "VM Snapshot 7%2f3%2f2024, 4:01:21 PM", - "description": "Created to demo", - "createtime": "2024-07-03T20:01:34.329Z", - "state": "poweredOn" - }, - { - "createtime": "2024-07-05T23:35:40.859Z", - "state": "poweredOn", - "id": 2, - "name": "VM Snapshot 7%2f5%2f2024, 7:35:37 PM", - "description": "backup" - } - ], - "count": 2 - } } - } } \ No newline at end of file From 34bdf91daff8f2bd8f339c40be7e03ffec94a47e Mon Sep 17 00:00:00 2001 From: Kush Rana Date: Thu, 12 Sep 2024 19:23:37 +0530 Subject: [PATCH 6/6] add changelog entry --- CHANGELOG.next.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index be2baf0fbd89..2e04b78f50f4 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -333,6 +333,7 @@ https://github.com/elastic/beats/compare/v8.8.1\...main[Check the HEAD diff] - Add support for snapshot in vSphere virtualmachine metricset {pull}40683[40683] - Update fields to use mapstr in vSphere virtualmachine metricset {pull}40707[40707] - Add support for period based intervalID in vSphere host and datastore metricsets {pull}40678[40678] +- Add new metrics fot datastore and minor changes to overall vSphere metrics {pull}40766[40766] *Metricbeat*