Mejoras Informe vCenter


¡Muy buenas! ¿Cómo estamos? ¿Las vacaciones bien? ¡Y yo que me alegro!

Hoy os traigo algunas mejoras en el tema del informe de vCentes que os comenté en este post. Como os dije, el script se ejecuta como tarea programada, pero lo hacía desde mi usuario de Windows y, como la contraseña caduca, sólo se ejecutaba si mi sesión estaba iniciada. Así que, aprovechando el uso de cuentas de servicio no administradas (MSA), modifiqué la tarea para que se ejecute con un usuario en concreto (más sobre esto en otro post). Lo único «malo» es que, al no ser una cuenta interactiva, no puede hacer uso del comando «Export-Excel», pero bueno, se soluciona creando csv de cada hoja del Excel y, luego, importando (no tan automatizado, pero messirve).

Por otro lado, tengo un sistema de monitorización montado con Telegraf + InfluxDB + Grafana en el cual, entre otros, aproveché la monitorización creada por Jorge De La Cruz.

Pues bien, me faltaba en esos gráficos, tener visión del disco virtual de cada servidor. Para lograrlo, he añadido una línea de código en el informe de vSphere que se encarga de exportar los datos que obtengo del powershell a InfluxDB.

El comando es el siguiente:

Write-Influx -Measure vsphere_vm_virtualDisk -Tags @{vmname=$vm.Name;Unit=$row.Unidad} -Metrics @{DiskSpace=$row.CapacityGB;UsedSpace=$row.UsedSpaceGB;AvailableSpace=$row.DiskFreespace} -Organisation "Influx" -Bucket "Bucket" -Server http://Tuservidor:8086 -Token "TutokendeInfluxAquí"

Con ese código, pasamos nombre de la VM, Unidad de disco (Guest), capacidad del disco, espacio usado y espacio disponible.

Luego, lo que hacemos es añadir al Dashboard de VMs de Jorge, en el Overview, una nueva consulta para mostrar los datos nuevos que queremos de los discos:

from(bucket: v.defaultBucket)

  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)

  |> filter(fn: (r) => r["_measurement"] == "vsphere_vm_virtualDisk")

  |> filter(fn: (r) => r["_field"] == "FreeSpaceGB")

  |> filter(fn: (r) => r["vmname"] =~ /${virtualmachine:regex}/)

  |> group(columns: ["_field"])

  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)

  |> yield(name: "mean")

Quedándonos el dashboard de la siguiente manera:

Espero que, como a mí, estos pequeños cambios os sean muy útiles.

¡Hasta la próxima»