diff --git a/vsphere-influxdb.go b/vsphere-influxdb.go index 593d70a..a9b2849 100644 --- a/vsphere-influxdb.go +++ b/vsphere-influxdb.go @@ -221,6 +221,7 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient. } objectTypes = append(objectTypes, "ClusterComputeResource") objectTypes = append(objectTypes, "ResourcePool") + objectTypes = append(objectTypes, "Datastore") // Loop trought datacenters and create the intersting object reference list mors := []types.ManagedObjectReference{} @@ -250,6 +251,7 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient. hostRefs := []types.ManagedObjectReference{} clusterRefs := []types.ManagedObjectReference{} respoolRefs := []types.ManagedObjectReference{} + datastoreRefs := []types.ManagedObjectReference{} newMors := []types.ManagedObjectReference{} @@ -268,7 +270,9 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient. clusterRefs = append(clusterRefs, mor) } else if mor.Type == "ResourcePool" { respoolRefs = append(respoolRefs, mor) - } + } else if mor.Type == "Datastore" { + datastoreRefs = append(datastoreRefs, mor) + } } // Copy the mors without the clusters @@ -307,6 +311,14 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient. return } + // Retrieve summary property for all datastores + var dss []mo.Datastore + err = pc.Retrieve(ctx, datastoreRefs, []string{"summary"}, &dss) + if err != nil { + log.Fatal(err) + return + } + // Initialize the map that will hold the VM MOR to ResourcePool reference vmToPool := make(map[types.ManagedObjectReference]string) @@ -640,6 +652,20 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient. bp.AddPoint(pt3) } + for _, datastore := range dss { + datastoreFields := map[string]interface{}{ + "capacity": datastore.Summary.Capacity, + "free_space": datastore.Summary.FreeSpace, + } + datastoreTags := map[string]string{"ds_name": datastore.Summary.Name} + pt4, err := influxclient.NewPoint("datastore", datastoreTags, datastoreFields, time.Now()) + if err != nil { + errlog.Println(err) + continue + } + bp.AddPoint(pt4) + } + } //InfluxDB send diff --git a/vsphere-influxdb.json.sample b/vsphere-influxdb.json.sample index 9421ddc..61500b9 100644 --- a/vsphere-influxdb.json.sample +++ b/vsphere-influxdb.json.sample @@ -64,6 +64,13 @@ { "Metric": "disk.numberWriteAveraged.average", "Instances": "*" }, { "Metric": "net.throughput.contention.summation", "Instances": "*" } ] - } + }, + { + "ObjectType": [ "Datastore" ], + "Definition": [ + { "Metric": "disk.capacity.latest", "Instances": "*" }, + { "Metric": "disk.used.latest", "Instances": "*" } + ] + } ] -} \ No newline at end of file +}