mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
commit
33dc0476fd
@ -36,6 +36,10 @@ $GOBIN/vsphere-influxdb-go
|
||||
# Configure
|
||||
|
||||
You'll need a JSON file with all your vCenters/ESXi to connect to, the InfluxDB connection details(url, username/password, database to use), and the metrics to collect.
|
||||
Additionally you can provide a vCenter/ESXi server and InfluxDB connection details via environment variables, wich is extremly helpful when running inside a container.
|
||||
|
||||
For InfluxDB set INFLUX\_HOSTNAME, INFLUX\_USERNAME, INFLUX\_PASSWORD and INFLUX\_DATABASE.
|
||||
For vSphere set VSPHERE\_HOSTNAME, VSPHERE\_USERNAME and VSPHERE\_PASSWORD and keep in mind, that currently only one vCenter/ESXi can be added via environment variable.
|
||||
|
||||
If you set a domain, it will be automaticaly removed from the names of the found objects.
|
||||
|
||||
|
@ -271,10 +271,10 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
|
||||
} else if mor.Type == "ResourcePool" {
|
||||
respoolRefs = append(respoolRefs, mor)
|
||||
} else if mor.Type == "Datastore" {
|
||||
datastoreRefs = append(datastoreRefs, mor)
|
||||
}
|
||||
datastoreRefs = append(datastoreRefs, mor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Copy the mors without the clusters
|
||||
mors = newMors
|
||||
pc := property.DefaultCollector(client.Client)
|
||||
@ -294,7 +294,7 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
//Retrieve properties for Cluster(s)
|
||||
var clmo []mo.ClusterComputeResource
|
||||
err = pc.Retrieve(ctx, clusterRefs, []string{"name", "configuration", "host"}, &clmo)
|
||||
@ -302,7 +302,7 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
//Retrieve properties for ResourcePool
|
||||
var rpmo []mo.ResourcePool
|
||||
err = pc.Retrieve(ctx, respoolRefs, []string{"summary"}, &rpmo)
|
||||
@ -311,14 +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)
|
||||
// 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)
|
||||
|
||||
@ -355,37 +355,37 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
|
||||
|
||||
// Initialize the map that will hold the VM MOR to cluster reference
|
||||
hostToCluster := make(map[types.ManagedObjectReference]string)
|
||||
|
||||
|
||||
// Retrieve properties for clusters, if any
|
||||
if len(clusterRefs) > 0 {
|
||||
if debug == true {
|
||||
stdlog.Println("going inside clusters")
|
||||
}
|
||||
|
||||
// Step 1 : Get ObjectContents and Host info for VM
|
||||
// The host is found under the runtime structure.
|
||||
|
||||
// Step 2 : Step 2: Get the ManagedObjectReference from the Host we just got.
|
||||
|
||||
// Step 3 : Get a list all the clusters that vCenter knows about, and for each one, also get the host
|
||||
|
||||
// Step 4 : Loop through all clusters that exist (which we got in step 3), and loop through each host
|
||||
// and see if that host matches the host we got in step 2 as the host of the vm.
|
||||
// If we find it, return it, otherwise we return null.
|
||||
// Step 1 : Get ObjectContents and Host info for VM
|
||||
// The host is found under the runtime structure.
|
||||
|
||||
for _, vm := range vmmo {
|
||||
vmhost := vm.Summary.Runtime.Host
|
||||
// Step 2 : Step 2: Get the ManagedObjectReference from the Host we just got.
|
||||
|
||||
for _, cl := range clmo {
|
||||
for _, host := range cl.Host {
|
||||
hostToCluster[host] = cl.Name
|
||||
|
||||
if *vmhost == host {
|
||||
vmToCluster[vm.Self] = cl.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Step 3 : Get a list all the clusters that vCenter knows about, and for each one, also get the host
|
||||
|
||||
// Step 4 : Loop through all clusters that exist (which we got in step 3), and loop through each host
|
||||
// and see if that host matches the host we got in step 2 as the host of the vm.
|
||||
// If we find it, return it, otherwise we return null.
|
||||
|
||||
for _, vm := range vmmo {
|
||||
vmhost := vm.Summary.Runtime.Host
|
||||
|
||||
for _, cl := range clmo {
|
||||
for _, host := range cl.Host {
|
||||
hostToCluster[host] = cl.Name
|
||||
|
||||
if *vmhost == host {
|
||||
vmToCluster[vm.Self] = cl.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -653,18 +653,18 @@ func (vcenter *VCenter) Query(config Configuration, InfluxDBClient influxclient.
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -763,6 +763,31 @@ func main() {
|
||||
errlog.Fatalln(err)
|
||||
}
|
||||
|
||||
// Support environemt variables / overrides for Influx Connection
|
||||
if ihostname := os.Getenv("INFLUX_HOSTNAME"); ihostname != "" {
|
||||
config.InfluxDB.Hostname = os.Getenv("INFLUX_HOSTNAME")
|
||||
config.InfluxDB.Username = os.Getenv("INFLUX_USERNAME")
|
||||
config.InfluxDB.Password = os.Getenv("INFLUX_PASSWORD")
|
||||
config.InfluxDB.Database = os.Getenv("INFLUX_DATABASE")
|
||||
}
|
||||
|
||||
// Support environment variables for VSphere
|
||||
// Currently ony one server is supported and added to the list of vSphere servers
|
||||
if vhostname := os.Getenv("VSPHERE_HOSTNAME"); vhostname != "" {
|
||||
vc := VCenter{
|
||||
Hostname: os.Getenv("VSPHERE_HOSTNAME"),
|
||||
Username: os.Getenv("VSPHERE_USERNAME"),
|
||||
Password: os.Getenv("VSPHERE_PASSWORD"),
|
||||
}
|
||||
config.VCenters = append(config.VCenters, &vc)
|
||||
}
|
||||
|
||||
// Print configuration in debug mode
|
||||
if debug == true {
|
||||
stdlog.Println("---Configuration - you should see the config here---")
|
||||
spew.Dump(config)
|
||||
}
|
||||
|
||||
for _, vcenter := range config.VCenters {
|
||||
vcenter.Init(config)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user