diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 8eebaa31137..bac0ca314e8 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -365,6 +365,7 @@ https://github.com/elastic/beats/compare/v8.8.1\...main[Check the HEAD diff] - Added Cisco Meraki module {pull}40836[40836] - Added Palo Alto Networks module {pull}40686[40686] - Restore docker.network.in.* and docker.network.out.* fields in docker module {pull}40968[40968] +- Add `id` field to all the vSphere metricsets. {pull}41097[41097] - Only watch metadata for ReplicaSets in metricbeat k8s module {pull}41289[41289] *Metricbeat* diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 783e19ffe97..915cfa33f0a 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -67030,7 +67030,7 @@ Cluster information. *`vsphere.cluster.datastore.names`*:: + -- -List of all the Datastore names associated with the cluster. +List of all the datastore names associated with the cluster. type: keyword @@ -67040,7 +67040,7 @@ type: keyword *`vsphere.cluster.datastore.count`*:: + -- -Number of Datastores associated with the cluster. +Number of datastores associated with the cluster. type: long @@ -67072,7 +67072,7 @@ type: boolean *`vsphere.cluster.host.count`*:: + -- -Number of Hosts associated with the cluster. +Number of hosts associated with the cluster. type: long @@ -67082,7 +67082,17 @@ type: long *`vsphere.cluster.host.names`*:: + -- -List of all the Host names associated with the cluster. +List of all the host names associated with the cluster. + + +type: keyword + +-- + +*`vsphere.cluster.id`*:: ++ +-- +Unique cluster ID. type: keyword @@ -67103,7 +67113,7 @@ type: keyword *`vsphere.cluster.network.count`*:: + -- -Number of Networks associated with the cluster. +Number of networks associated with the cluster. type: long @@ -67113,7 +67123,7 @@ type: long *`vsphere.cluster.network.names`*:: + -- -List of all the Network names associated with the cluster. +List of all the network names associated with the cluster. type: keyword @@ -67247,6 +67257,16 @@ type: long List of all the host names. +type: keyword + +-- + +*`vsphere.datastore.id`*:: ++ +-- +Unique datastore ID. + + type: keyword -- @@ -67332,10 +67352,20 @@ Datastore Cluster +*`vsphere.datastorecluster.id`*:: ++ +-- +Unique datastore cluster ID. + + +type: keyword + +-- + *`vsphere.datastorecluster.name`*:: + -- -The Datastore Cluster name. +The datastore cluster name. type: keyword @@ -67369,7 +67399,7 @@ format: bytes *`vsphere.datastorecluster.datastore.names`*:: + -- -List of all the Datastore names associated with the Datastore Cluster. +List of all the datastore names associated with the datastore cluster. type: keyword @@ -67379,7 +67409,7 @@ type: keyword *`vsphere.datastorecluster.datastore.count`*:: + -- -Number of datastores in the Datastore Cluster. +Number of datastores in the datastore cluster. type: long @@ -67521,6 +67551,16 @@ format: bytes -- +*`vsphere.host.id`*:: ++ +-- +Unique host ID. + + +type: keyword + +-- + *`vsphere.host.memory.free.bytes`*:: + -- @@ -67841,6 +67881,16 @@ type: long -- +*`vsphere.network.id`*:: ++ +-- +Unique network ID. + + +type: keyword + +-- + *`vsphere.network.name`*:: + -- @@ -67854,7 +67904,7 @@ type: keyword *`vsphere.network.status`*:: + -- -General health of the Network. +General health of the network. type: keyword @@ -67951,6 +68001,16 @@ type: long -- +*`vsphere.resourcepool.id`*:: ++ +-- +Unique resource pool ID. + + +type: keyword + +-- + *`vsphere.resourcepool.memory.usage.guest.bytes`*:: @@ -68162,6 +68222,16 @@ type: keyword Hostname of the host. +type: keyword + +-- + +*`vsphere.virtualmachine.id`*:: ++ +-- +Unique virtual machine ID. + + type: keyword -- @@ -68169,7 +68239,7 @@ type: keyword *`vsphere.virtualmachine.name`*:: + -- -Virtual Machine name. +Virtual machine name. type: keyword @@ -68179,7 +68249,7 @@ type: keyword *`vsphere.virtualmachine.os`*:: + -- -Virtual Machine Operating System name. +Virtual machine Operating System name. type: keyword @@ -68219,7 +68289,7 @@ type: long *`vsphere.virtualmachine.memory.used.guest.bytes`*:: + -- -Used Memory of Guest in bytes. +Used memory of Guest in bytes. type: long @@ -68231,7 +68301,7 @@ format: bytes *`vsphere.virtualmachine.memory.used.host.bytes`*:: + -- -Used Memory of Host in bytes. +Used memory of Host in bytes. type: long @@ -68243,7 +68313,7 @@ format: bytes *`vsphere.virtualmachine.memory.total.guest.bytes`*:: + -- -Total Memory of Guest in bytes. +Total memory of Guest in bytes. type: long @@ -68255,7 +68325,7 @@ format: bytes *`vsphere.virtualmachine.memory.free.guest.bytes`*:: + -- -Free Memory of Guest in bytes. +Free memory of Guest in bytes. type: long diff --git a/metricbeat/module/vsphere/cluster/_meta/data.json b/metricbeat/module/vsphere/cluster/_meta/data.json index d704ceb865a..67d0e742d15 100644 --- a/metricbeat/module/vsphere/cluster/_meta/data.json +++ b/metricbeat/module/vsphere/cluster/_meta/data.json @@ -49,6 +49,7 @@ "entity_name": "121.0.0.0" } ], + "id": "domain-c1", "name": "Cluster_1", "das_config": { "enabled": false, diff --git a/metricbeat/module/vsphere/cluster/_meta/fields.yml b/metricbeat/module/vsphere/cluster/_meta/fields.yml index 27025e92848..ce72f97fe8f 100644 --- a/metricbeat/module/vsphere/cluster/_meta/fields.yml +++ b/metricbeat/module/vsphere/cluster/_meta/fields.yml @@ -10,11 +10,11 @@ - name: names type: keyword description: > - List of all the Datastore names associated with the cluster. + List of all the datastore names associated with the cluster. - name: count type: long description: > - Number of Datastores associated with the cluster. + Number of datastores associated with the cluster. - name: das_config type: group fields: @@ -32,11 +32,15 @@ - name: count type: long description: > - Number of Hosts associated with the cluster. + Number of hosts associated with the cluster. - name: names type: keyword description: > - List of all the Host names associated with the cluster. + List of all the host names associated with the cluster. + - name: id + type: keyword + description: > + Unique cluster ID. - name: name type: keyword description: > @@ -47,11 +51,11 @@ - name: count type: long description: > - Number of Networks associated with the cluster. + Number of networks associated with the cluster. - name: names type: keyword description: > - List of all the Network names associated with the cluster. + List of all the network names associated with the cluster. - name: triggered_alarms.* type: object object_type: keyword diff --git a/metricbeat/module/vsphere/cluster/cluster_test.go b/metricbeat/module/vsphere/cluster/cluster_test.go index 37e286c113d..3fa1b534c79 100644 --- a/metricbeat/module/vsphere/cluster/cluster_test.go +++ b/metricbeat/module/vsphere/cluster/cluster_test.go @@ -51,6 +51,7 @@ func TestFetchEventContents(t *testing.T) { testEvent := mapstr.M{ "name": "DC0_C0", + "id": "domain-c29", "host": mapstr.M{ "count": 3, "names": []string{"DC0_C0_H0", "DC0_C0_H1", "DC0_C0_H2"}, diff --git a/metricbeat/module/vsphere/cluster/data.go b/metricbeat/module/vsphere/cluster/data.go index a15e48377b5..286e4dbb2d8 100644 --- a/metricbeat/module/vsphere/cluster/data.go +++ b/metricbeat/module/vsphere/cluster/data.go @@ -25,6 +25,7 @@ import ( func (m *ClusterMetricSet) mapEvent(cl mo.ClusterComputeResource, data *metricData) mapstr.M { event := mapstr.M{ + "id": cl.Self.Value, "host": mapstr.M{ "count": len(data.assetNames.outputHostNames), "names": data.assetNames.outputHostNames, diff --git a/metricbeat/module/vsphere/cluster/data_test.go b/metricbeat/module/vsphere/cluster/data_test.go index 6736b8b33f7..2886e376f7a 100644 --- a/metricbeat/module/vsphere/cluster/data_test.go +++ b/metricbeat/module/vsphere/cluster/data_test.go @@ -33,6 +33,11 @@ func TestEventMapping(t *testing.T) { ComputeResource: mo.ComputeResource{ ManagedEntity: mo.ManagedEntity{ Name: "Cluster_0", + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "CS_0", + }, + }, }, }, Configuration: types.ClusterConfigInfo{ @@ -64,6 +69,7 @@ func TestEventMapping(t *testing.T) { }, }, "name": "Cluster_0", + "id": "CS_0", "host": mapstr.M{ "count": 1, "names": []string{"Host_0"}, diff --git a/metricbeat/module/vsphere/datastore/_meta/data.json b/metricbeat/module/vsphere/datastore/_meta/data.json index dc690b8d40e..12f9ab59ad1 100644 --- a/metricbeat/module/vsphere/datastore/_meta/data.json +++ b/metricbeat/module/vsphere/datastore/_meta/data.json @@ -58,7 +58,8 @@ } }, "fstype": "local", - "name": "LocalDS_0" + "name": "LocalDS_0", + "id": "datastore-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 a9b9352f67f..681a19d505e 100644 --- a/metricbeat/module/vsphere/datastore/_meta/fields.yml +++ b/metricbeat/module/vsphere/datastore/_meta/fields.yml @@ -51,6 +51,10 @@ type: keyword description: > List of all the host names. + - name: id + type: keyword + description: > + Unique datastore ID. - name: name type: keyword description: > @@ -82,4 +86,3 @@ description: > Rate of writing data to the datastore. format: bytes - diff --git a/metricbeat/module/vsphere/datastore/data.go b/metricbeat/module/vsphere/datastore/data.go index 1950d32a474..0a55984c51b 100644 --- a/metricbeat/module/vsphere/datastore/data.go +++ b/metricbeat/module/vsphere/datastore/data.go @@ -26,6 +26,7 @@ import ( func (m *DataStoreMetricSet) mapEvent(ds mo.Datastore, data *metricData) mapstr.M { event := mapstr.M{ "name": ds.Summary.Name, + "id": ds.Self.Value, "fstype": ds.Summary.Type, "status": ds.OverallStatus, "host": mapstr.M{ diff --git a/metricbeat/module/vsphere/datastore/data_test.go b/metricbeat/module/vsphere/datastore/data_test.go index 23189e3e49f..1fb3d4ef853 100644 --- a/metricbeat/module/vsphere/datastore/data_test.go +++ b/metricbeat/module/vsphere/datastore/data_test.go @@ -37,6 +37,11 @@ func TestEventMapping(t *testing.T) { }, ManagedEntity: mo.ManagedEntity{ OverallStatus: "green", + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "DS_1", + }, + }, }, Host: []types.DatastoreHostMount{}, Vm: []types.ManagedObjectReference{ @@ -61,6 +66,7 @@ func TestEventMapping(t *testing.T) { outputEvent := (&DataStoreMetricSet{}).mapEvent(datastoreTest, &metricDataTest) testEvent := mapstr.M{ "fstype": "local", + "id": "DS_1", "status": types.ManagedEntityStatus("green"), "name": "datastore-test", "host": mapstr.M{ diff --git a/metricbeat/module/vsphere/datastorecluster/_meta/data.json b/metricbeat/module/vsphere/datastorecluster/_meta/data.json index 10a4d2f98de..dd44a7c435d 100644 --- a/metricbeat/module/vsphere/datastorecluster/_meta/data.json +++ b/metricbeat/module/vsphere/datastorecluster/_meta/data.json @@ -15,6 +15,7 @@ }, "vsphere": { "datastorecluster": { + "id": "group-p1", "name": "datastore_cluster1", "capacity": { "bytes": 8795019280384 diff --git a/metricbeat/module/vsphere/datastorecluster/_meta/fields.yml b/metricbeat/module/vsphere/datastorecluster/_meta/fields.yml index 9fcceb295ad..7edad537dbd 100644 --- a/metricbeat/module/vsphere/datastorecluster/_meta/fields.yml +++ b/metricbeat/module/vsphere/datastorecluster/_meta/fields.yml @@ -4,10 +4,14 @@ description: > Datastore Cluster fields: + - name: id + type: keyword + description: > + Unique datastore cluster ID. - name: name type: keyword description: > - The Datastore Cluster name. + The datastore cluster name. - name: capacity.bytes type: long description: > @@ -21,11 +25,11 @@ - name: datastore.names type: keyword description: > - List of all the Datastore names associated with the Datastore Cluster. + List of all the datastore names associated with the datastore cluster. - name: datastore.count type: long description: > - Number of datastores in the Datastore Cluster. + Number of datastores in the datastore cluster. - name: triggered_alarms.* type: object object_type: keyword diff --git a/metricbeat/module/vsphere/datastorecluster/data.go b/metricbeat/module/vsphere/datastorecluster/data.go index 3dcce129e56..1b4789aee53 100644 --- a/metricbeat/module/vsphere/datastorecluster/data.go +++ b/metricbeat/module/vsphere/datastorecluster/data.go @@ -26,6 +26,7 @@ import ( func (m *DatastoreClusterMetricSet) mapEvent(datastoreCluster mo.StoragePod, data *metricData) mapstr.M { event := mapstr.M{ "name": datastoreCluster.Name, + "id": datastoreCluster.Self.Value, "capacity": mapstr.M{ "bytes": datastoreCluster.Summary.Capacity, }, diff --git a/metricbeat/module/vsphere/datastorecluster/data_test.go b/metricbeat/module/vsphere/datastorecluster/data_test.go index 41d1736777e..05f43ef002d 100644 --- a/metricbeat/module/vsphere/datastorecluster/data_test.go +++ b/metricbeat/module/vsphere/datastorecluster/data_test.go @@ -34,6 +34,11 @@ func TestEventMapping(t *testing.T) { Folder: mo.Folder{ ManagedEntity: mo.ManagedEntity{ Name: "Folder1", + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "FL_0", + }, + }, }, }, } @@ -43,6 +48,9 @@ func TestEventMapping(t *testing.T) { name, _ := event.GetValue("name") assert.Equal(t, "Folder1", name) + id, _ := event.GetValue("id") + assert.Equal(t, "FL_0", id) + capacity, _ := event.GetValue("capacity.bytes") assert.Equal(t, int64(100), capacity) diff --git a/metricbeat/module/vsphere/fields.go b/metricbeat/module/vsphere/fields.go index 7e3988627f8..c67607c6100 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 0034692e95b..d5ed7a50213 100644 --- a/metricbeat/module/vsphere/host/_meta/data.json +++ b/metricbeat/module/vsphere/host/_meta/data.json @@ -167,6 +167,7 @@ "network_names": [ "VM Network" ], + "id": "host-0", "name": "DC0_H0", "status": "green", "uptime": 1728865 diff --git a/metricbeat/module/vsphere/host/_meta/fields.yml b/metricbeat/module/vsphere/host/_meta/fields.yml index e466ef19e2a..98246507da7 100644 --- a/metricbeat/module/vsphere/host/_meta/fields.yml +++ b/metricbeat/module/vsphere/host/_meta/fields.yml @@ -52,6 +52,10 @@ description: > Sum of disk read and write rates each second in bytes. format: bytes + - name: id + type: keyword + description: > + Unique host ID. - name: memory.free.bytes type: long description: > diff --git a/metricbeat/module/vsphere/host/data.go b/metricbeat/module/vsphere/host/data.go index d877ac78af8..252218eec13 100644 --- a/metricbeat/module/vsphere/host/data.go +++ b/metricbeat/module/vsphere/host/data.go @@ -27,6 +27,7 @@ func (m *HostMetricSet) mapEvent(hs mo.HostSystem, data *metricData) mapstr.M { const bytesMultiplier int64 = 1024 * 1024 event := mapstr.M{ "name": hs.Summary.Config.Name, + "id": hs.Self.Value, "status": hs.Summary.OverallStatus, "uptime": hs.Summary.QuickStats.Uptime, "cpu": mapstr.M{"used": mapstr.M{"mhz": hs.Summary.QuickStats.OverallCpuUsage}}, diff --git a/metricbeat/module/vsphere/host/data_test.go b/metricbeat/module/vsphere/host/data_test.go index 8116fe417aa..3de32d10436 100644 --- a/metricbeat/module/vsphere/host/data_test.go +++ b/metricbeat/module/vsphere/host/data_test.go @@ -29,6 +29,13 @@ import ( func TestEventMapping(t *testing.T) { var m *HostMetricSet HostSystemTest := mo.HostSystem{ + ManagedEntity: mo.ManagedEntity{ + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "ha-host", + }, + }, + }, Summary: types.HostListSummary{ Host: &types.ManagedObjectReference{Type: "HostSystem", Value: "ha-host"}, Hardware: &types.HostHardwareSummary{ @@ -81,6 +88,9 @@ func TestEventMapping(t *testing.T) { cpuTotal, _ := event.GetValue("cpu.total.mhz") assert.EqualValues(t, 4588, cpuTotal) + id, _ := event.GetValue("id") + assert.EqualValues(t, "ha-host", id) + cpuFree, _ := event.GetValue("cpu.free.mhz") assert.EqualValues(t, 4521, cpuFree) diff --git a/metricbeat/module/vsphere/network/_meta/data.json b/metricbeat/module/vsphere/network/_meta/data.json index 317fec00756..164ba4c2ae2 100644 --- a/metricbeat/module/vsphere/network/_meta/data.json +++ b/metricbeat/module/vsphere/network/_meta/data.json @@ -22,6 +22,7 @@ ], "count": 2 }, + "id": "network-1", "name": "VM Network", "status": "green", "accessible": true, diff --git a/metricbeat/module/vsphere/network/_meta/fields.yml b/metricbeat/module/vsphere/network/_meta/fields.yml index 66373f8b188..2394bc7a3f4 100644 --- a/metricbeat/module/vsphere/network/_meta/fields.yml +++ b/metricbeat/module/vsphere/network/_meta/fields.yml @@ -23,6 +23,10 @@ type: long description: > Number of hosts connected to this network. + - name: id + type: keyword + description: > + Unique network ID. - name: name type: keyword description: > @@ -30,7 +34,7 @@ - name: status type: keyword description: > - General health of the Network. + General health of the network. - name: type type: keyword description: > diff --git a/metricbeat/module/vsphere/network/data.go b/metricbeat/module/vsphere/network/data.go index 7f3605d25ab..b640e3a9ce2 100644 --- a/metricbeat/module/vsphere/network/data.go +++ b/metricbeat/module/vsphere/network/data.go @@ -26,6 +26,7 @@ import ( func (m *NetworkMetricSet) mapEvent(net mo.Network, data *metricData) mapstr.M { event := mapstr.M{} + event.Put("id", net.Self.Value) event.Put("name", net.Name) event.Put("status", net.OverallStatus) event.Put("accessible", net.Summary.GetNetworkSummary().Accessible) diff --git a/metricbeat/module/vsphere/network/data_test.go b/metricbeat/module/vsphere/network/data_test.go index fb7c2120817..7a9b625529c 100644 --- a/metricbeat/module/vsphere/network/data_test.go +++ b/metricbeat/module/vsphere/network/data_test.go @@ -36,7 +36,8 @@ func TestEventMapping(t *testing.T) { ConfigStatus: "green", ExtensibleManagedObject: mo.ExtensibleManagedObject{ Self: types.ManagedObjectReference{ - Type: "Network", + Type: "Network", + Value: "NT_0", }, }, }, @@ -54,6 +55,9 @@ func TestEventMapping(t *testing.T) { name, _ := event.GetValue("name") assert.NotNil(t, name) + id, _ := event.GetValue("id") + assert.EqualValues(t, "NT_0", id) + status, _ := event.GetValue("status") assert.Equal(t, types.ManagedEntityStatus("green"), status) diff --git a/metricbeat/module/vsphere/resourcepool/_meta/data.json b/metricbeat/module/vsphere/resourcepool/_meta/data.json index a16e9d59197..92825ce14b7 100644 --- a/metricbeat/module/vsphere/resourcepool/_meta/data.json +++ b/metricbeat/module/vsphere/resourcepool/_meta/data.json @@ -15,6 +15,7 @@ }, "vsphere": { "resourcepool": { + "id": "resgroup-30", "name": "Resources", "status": "green", "vm": { diff --git a/metricbeat/module/vsphere/resourcepool/_meta/fields.yml b/metricbeat/module/vsphere/resourcepool/_meta/fields.yml index 2df15df42e1..20d9676893b 100644 --- a/metricbeat/module/vsphere/resourcepool/_meta/fields.yml +++ b/metricbeat/module/vsphere/resourcepool/_meta/fields.yml @@ -26,6 +26,10 @@ type: long description: > The static CPU resource entitlement for a virtual machine. + - name: id + type: keyword + description: > + Unique resource pool ID. - name: memory type: group fields: diff --git a/metricbeat/module/vsphere/resourcepool/data.go b/metricbeat/module/vsphere/resourcepool/data.go index 839e2669c69..76bb17cc67c 100644 --- a/metricbeat/module/vsphere/resourcepool/data.go +++ b/metricbeat/module/vsphere/resourcepool/data.go @@ -32,6 +32,7 @@ func (m *ResourcePoolMetricSet) mapEvent(rp mo.ResourcePool, data *metricData) m event := mapstr.M{ "name": rp.Name, "status": rp.OverallStatus, + "id": rp.Self.Value, } quickStats := rp.Summary.GetResourcePoolSummary().QuickStats diff --git a/metricbeat/module/vsphere/resourcepool/data_test.go b/metricbeat/module/vsphere/resourcepool/data_test.go index ce7ccec484e..48e85f1c2ba 100644 --- a/metricbeat/module/vsphere/resourcepool/data_test.go +++ b/metricbeat/module/vsphere/resourcepool/data_test.go @@ -31,6 +31,11 @@ func TestEventMapping(t *testing.T) { ManagedEntity: mo.ManagedEntity{ OverallStatus: "green", Name: "resourcepool-test", + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "RS_0", + }, + }, }, Summary: &types.ResourcePoolSummary{ QuickStats: &types.ResourcePoolQuickStats{ @@ -70,7 +75,10 @@ func TestEventMapping(t *testing.T) { status, _ := event.GetValue("status") assert.EqualValues(t, "green", status) - name := event["name"].(string) + id, _ := event.GetValue("id") + assert.EqualValues(t, "RS_0", id) + + name, _ := event.GetValue("name") assert.EqualValues(t, name, "resourcepool-test") cpuUsage, _ := event.GetValue("cpu.usage.mhz") diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/data.json b/metricbeat/module/vsphere/virtualmachine/_meta/data.json index 8549f84040a..57ef6e74770 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/data.json +++ b/metricbeat/module/vsphere/virtualmachine/_meta/data.json @@ -15,6 +15,7 @@ }, "vsphere": { "virtualmachine": { + "id": "vm-51", "name": "xt0nmfpv9", "uptime": 5348978, "status": "green", diff --git a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml index a83013105dc..eb6cc6d88e5 100644 --- a/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml +++ b/metricbeat/module/vsphere/virtualmachine/_meta/fields.yml @@ -15,14 +15,18 @@ type: keyword description: > Hostname of the host. + - name: id + type: keyword + description: > + Unique virtual machine ID. - name: name type: keyword description: > - Virtual Machine name. + Virtual machine name. - name: os type: keyword description: > - Virtual Machine Operating System name. + Virtual machine Operating System name. - name: cpu.used.mhz type: long description: > @@ -38,22 +42,22 @@ - name: memory.used.guest.bytes type: long description: > - Used Memory of Guest in bytes. + Used memory of Guest in bytes. format: bytes - name: memory.used.host.bytes type: long description: > - Used Memory of Host in bytes. + Used memory of Host in bytes. format: bytes - name: memory.total.guest.bytes type: long description: > - Total Memory of Guest in bytes. + Total memory of Guest in bytes. format: bytes - name: memory.free.guest.bytes type: long description: > - Free Memory of Guest in bytes. + Free memory of Guest in bytes. format: bytes - name: custom_fields type: object diff --git a/metricbeat/module/vsphere/virtualmachine/data.go b/metricbeat/module/vsphere/virtualmachine/data.go index a107f11a0d2..0839f5789cc 100644 --- a/metricbeat/module/vsphere/virtualmachine/data.go +++ b/metricbeat/module/vsphere/virtualmachine/data.go @@ -33,6 +33,7 @@ func (m *MetricSet) mapEvent(data VMData) mapstr.M { event := mapstr.M{ "name": data.VM.Summary.Config.Name, + "id": data.VM.Self.Value, "os": data.VM.Summary.Config.GuestFullName, "uptime": data.VM.Summary.QuickStats.UptimeSeconds, "status": data.VM.Summary.OverallStatus, diff --git a/metricbeat/module/vsphere/virtualmachine/data_test.go b/metricbeat/module/vsphere/virtualmachine/data_test.go index 32abe001c39..b1676db8118 100644 --- a/metricbeat/module/vsphere/virtualmachine/data_test.go +++ b/metricbeat/module/vsphere/virtualmachine/data_test.go @@ -32,6 +32,13 @@ func TestEventMapping(t *testing.T) { var m MetricSet VirtualMachineTest := mo.VirtualMachine{ + ManagedEntity: mo.ManagedEntity{ + ExtensibleManagedObject: mo.ExtensibleManagedObject{ + Self: types.ManagedObjectReference{ + Value: "VM_0", + }, + }, + }, Summary: types.VirtualMachineSummary{ OverallStatus: types.ManagedEntityStatus("green"), Config: types.VirtualMachineConfigSummary{ @@ -83,6 +90,7 @@ func TestEventMapping(t *testing.T) { expectedEvent := mapstr.M{ "name": "localhost.localdomain", "os": "otherGuest", + "id": "VM_0", "uptime": int32(10), "status": types.ManagedEntityStatus("green"), "cpu": mapstr.M{