Saludos amigos, os conté hace unas semanas lo que VMware acababa de lanzar, y que iba a revolucionar el mundo de la virtualización y hacerla, todavía más, accesible en muchos nuevos casos de uso con el nuevo ESXi for ARM, os ¿perdisteis el vídeo? aquí os lo dejo:
Bien, una de las cosas que más me preocupaba, creo que en el vídeo lo menciono, era el poder controlar la temperatura de las Raspberry Pi con ESXi for ARM, ya que lo normal es que ESXi obtenga todos estos datos desde la IPMI, iDRAC, iLO, etc.
Pero por suerte tenemos un héroe (Tom Hebel) que trabaja en VMware y que ha compilado un driver nativo para extraer esta información, además de poder interactuar con muchas más cosas.
Diagrama de cómo funciona esta solución
Está bien, creo, sólo crear un .json que luego telegraf parsea y escribe en InfluxDB, pero si encuentro una mejor manera de hacerlo, todo mejorará, aquí el diagrama:
Descargar e instalar el Driver Nativo de ESXi for ARM para Raspberry Pi
No se si hace falta decirlo, pero todos estos pasos obviamente son para un producto sin soporte, creado por la Comunidad 🙂
Para descargar el plugin desde nuestro ESXi por SSH, tendremos que desactivar primero el firewall para que pueda conectarse por el cliente http de ESXi, además de tener que bajar la seguridad del sistema para que podamos instalar este plugin:
esxcli software acceptance set --level=CommunitySupported esxcli network firewall ruleset set -e true -r httpClient
Una vez tenemos realizados estos cambios, procederemos a descargar el paquete, directamente desde el GitHub de Tom, echar un vistazo vosotros, ya que puede nuevas versiones:
wget https://github.com/thebel1/thpimon/raw/main/build/vib/thpimon-0.1.0-1OEM.701.1.0.40650718.aarch64.vib
Fantástico, vamos a proceder a la instalación del driver de Raspberry Pi para ESXi for ARM:
esxcli software vib install -v /thpimon-0.1.0-1OEM.701.1.0.40650718.aarch64.vib
Esto os tendría que mostrar algo similar a esto, pasados unos segundos o hasta un minuto:
Installation Result Message: Operation finished successfully. Reboot Required: false VIBs Installed: THX_bootbank_thpimon_0.1.0-1OEM.701.1.0.40650718 VIBs Removed: VIBs Skipped:
Aunque el VIB dice que no hay que reiniciar, realmente es lo recomendado, así que ya sabéis:
reboot
Una vez reiniciamos, comprobamos que tenemos un nuevo dispositivo en /dev/vmgfxXX en mi caso es /dev/vmgfx32.
Nota: Poner esto en una partición de scratch o en algún datastore donde el ESXi pueda acceder para conservarlo aunque reiniciemos.
Ahora descargaremos el ejemplo de monitorizar la RPi que tiene nuestro amigo Tom.Tan sencillo como realizar los siguiente pasos:
mkdir /scratch/downloads cd /scratch/downloads wget https://github.com/thebel1/thpimon/archive/main.zip unzip main.zip
Antes de lanzar el script, nos iremos con vi a editar el siguiente fichero /scratch/downloads/thpimon-main/pyUtil/pimonLib/init.py
vi /scratch/downloads/thpimon-main/pyUtil/pimonLib/__init__.py
Y modificaremos la línea llamada PIMON_DEVICE_PATH con nuestro dispositivo nuevo, tal que así:
################################################################################ import math import struct import fcntl ######################################################################### PIMON_DEVICE_PATH = '/dev/vmgfx32' ######################################################################### RPIQ_BUFFER_LEN = 32 RPIQ_PROCESS_REQ = 0
Vamos a probar que todo funciona, lanzaremos el siguiente script, que debería de darnos la información necesaria:
./thpimon-main/pyUtil/pimon_util.py Firmware Revision: 0x5f440c10 Board Model: 0 Board Revision: 0xd03114 Board MAC Address: f7:12:b1:32:a6:dc Board Serial: 0x000000ab401f61 Temp: 38.0 (deg. C)
¡Ya tenemos la parte más importante! Muchas gracias, de nuevo a Tom Hebel por su gran trabajo.
Descargar Script para recoger información crear el .json
Es la hora de descargar y configurar el script tan simple que he creado, podemos descargarlo desde aquí, directamente al ESXi for ARM:
cd /scratch/downloads/ wget https://raw.githubusercontent.com/jorgedlcruz/esxi_arm-grafana/main/esxi-arm-rpi_grafana.sh
Hay que editar algunos valores, para funcione correctamente, estos valores:
# Configurations ## thepimonPath="/scratch/downloads/thpimon-main/pyUtil/pimon_util.py"
Haremos ejecutable el Script, como siempre:
chmod +x esxi-arm-rpi_grafana.sh
Y lanzaremos el script para ver que funciona:
./esxi-arm-rpi_grafana.sh ./esxi-arm-rpi_grafana.sh Building the JSON file All good, now you can go to https://esxi-zlon-rpi-001.jorgedelacruz.es/ui/pimonarm.json and use the JSON on your favourite Monitoring system
With this done, now you have a valid .json ANYTHING can take and parse, as long as they have access over HTTPS to the ESXi for ARM. I am using telegraf, so let’s take a look.
Crear cron para que se ejecute el Script cada minuto
Muchos de los cambios que hemos realizado se perderán al reiniciar, incluido el cron, pero bueno os lo dejo para que lo tengáis a mano, nos iremos al fichero /var/spool/cron/crontabs/root y lo editamos:
vi /var/spool/cron/crontabs/root
Añaidremos lo siguiente al final del mismo, podéis apuntar a la ruta donde tengáis el script:
*/1 * * * * /scratch/downloads/esxi-arm-rpi_grafana.sh
Vale, pues ya está, cada minuto enviaremos la información a InfluxDB.
Configuración del Telegraf para analizar el nuevo .json y enviarlo a InfluxDB
Esta vez voy a usar el siempre versátil inputs.http, para analizar directamente desde el .json, la configuración no puede ser más fácil, he creado un nuevo archivo bajo /etc/telegraf/telegraf.d/pimonarm.conf con esto dentro:
[[inputs.http]] #URL for ESXi for ARM data in JSON format urls = ["https://esxi-zlon-rpi-001.jorgedelacruz.es/ui/pimonarm.json"] method = "GET" #Overwrite measurement name from default `http` to `vsphere_esxi_arm` name_override = "vsphere_esxi_arm" #Exclude url and host items from tags tagexclude = ["url", "host"] #Data from HTTP in JSON format data_format = "json" #Parse `thpimon` array only json_query = "thpimon" #Set pimon metadata as tags tag_keys = ["hostname", "firmware", "boardmodel", "boardrevision", "boardserial"] #JSON values to set as string fields json_string_fields = ["boardtemp"] insecure_skip_verify = true
Podemos probarlo con el siguiente comando:
telegraf --config /etc/telegraf/telegraf.d/pimonarm.conf --test
Que nos muestra en pantalla algo similar a este output:
2020-11-15T00:17:41Z I! Starting Telegraf 1.16.1 > vsphere_esxi_arm,boardmodel=0,boardrevision=0xd03114,boardserial=0x000000ab401f61,firmware=0x5f440c10,hostname=esxi-zlon-rpi-001.jorgedelacruz.es boardtemp="37.0" 1605399462000000000
Si vamos a nuestro Grafana – Explorer, podemos ver que tenemos datos!
Grafana Dashboard para ver todo de manera centralizada
Ahora que tenemos toda esta información, seguramente queramos mostrarlo de manera más elegante. He usado el conocido vSphere Hosts Dashboard que ya tenía, y he añadido la parte de ESXi ARM al final del todo.
Con tan solo importarlo usando la URL de Grafana, ya tendréis algo similar a esto:
Al final del todo, en caso de que tengáis ESXi for ARM, os aparecerán. Recordar que necesitáis vCenter para que todo esto funcione:
Eso es todo amigos, agradecer los siguientes links que me han ayudado muchísimo:
- https://www.virten.net/2020/11/get-raspberry-pi-cpu-temperature-on-esxi-arm/
- https://www.virten.net/2020/11/get-raspberry-pi-cpu-temperature-on-esxi-arm/
- https://www.virtuallyghetto.com/2020/11/stateless-esxi-arm-with-raspberry-pi.html
- https://www.virtuallyghetto.com/2020/10/automated-network-scripted-installation-of-esxi-arm-without-sd-card.html
- https://www.virtuallyghetto.com/2020/10/esxi-on-arm-fling.html
- https://github.com/thebel1/thpimon
Nota final – Usar CGI para obtener un JSON bajo demanda
Florian, de virten.net, ha publicado un proceso parecido utilizando un CGI que ESXi ejecuta cada vez que se llama a esta URL:
Parece un proceso muy sencillo y elegante, lo único que me pone algo nervioso es que esté usando hostd-operation.cgi que se supone que está reservado para el sistema, aunque no sabemos mucho más.
Igualmente, sus pasos son muy chulos y no hace falta cron, ahí os dejo la opción 🙂

Leave a Reply