Monitoraggio della salute dei dischi SSD e NVMe su VMware ESXi con pyVmomi, Prometheus e Grafana

da | Giu 25, 2026 | 0 commenti

 

In questo articolo vedremo come costruire un sistema completo di monitoraggio della salute dei dischi SSD e NVMe installati negli host VMware ESXi, utilizzando esclusivamente strumenti open source: pyVmomi per interfacciarsi con le API vSphere, Prometheus e Pushgateway per la raccolta e lo storage delle metriche, e Grafana per la visualizzazione e gli alert.

La soluzione non richiede l’installazione di agenti sugli host ESXi, non dipende da VIB di terze parti e funziona correttamente anche con il Secure Boot abilitato.

 

PREREQUISITI

Uno o più host VMware ESXi gestiti da vCenter
Un server Linux con Docker e Portainer già installati

Installazione e Configurazione di Portainer su Ubuntu Server 24.04

Grafana già installato e funzionante su Docker

Installazione e Configurazione base di Grafana su Ubuntu Server 24.04

 

Un’istanza Gitea per il versioning dei file di configurazione

Installazione e Configurazione Base di Gitea su Ubuntu Server 24.04

Accesso amministrativo a vCenter per la creazione di un utente dedicato

ARCHITETTURA

Host ESXi 1 ──┐
Host ESXi 2 ──┤──→ vCenter API ──→ smart-exporter ──→ Pushgateway ──→ Prometheus ──→ Grafana
Host ESXi 3 ──┘ (Python/pyVmomi)

└──────────── Stack Docker ────────────┘

Lo smart-exporter è un container Python che si connette a vCenter tramite le API vSphere, itera su tutti gli host registrati, legge lo stato operativo dei dischi e pubblica le metriche sul Pushgateway. Prometheus scrape il Pushgateway periodicamente e Grafana visualizza i dati.

 

FASE 1 — CREAZIONE DI UN UTENTE DEDICATO SUL VCENTER

Per motivi di sicurezza è consigliabile non usare l’utente amministratore per il monitoraggio. Creare quindi un utente read-only dedicato.

Accedere a vCenter e andare su:

Administration → Single Sign-On → Users and Groups → Add

Compilare i campi:

Username: monitoring-smart
Password: scegli una password sicura

Assegnare il ruolo:

Administration → Access Control → Global Permissions

Assegnare il ruolo Read-Only all’utente monitoring-smart

Spuntare Applica a tutti gli oggetti figli

 

FASE 2 – STRUTTURA DEL REPOSITORY DI GITEA

Creare un nuovo repository su Gitea chiamato esxi-smart-monitoring con la seguente struttura:

esxi-smart-monitoring/
├── .gitignore
├── docker-compose.yml
└── exporter/
├── Dockerfile
├── requirements.txt
└── smart_exporter.py

 

FASE 3 — CREAZIONE DEI FILE DI CONFIGURAZIONE

Di seguito il contenuto del file .gitignore:

Di seguito il contenuto del file exporter/requirements.txt

Adesso creare lo script si connette a vCenter tramite pyVmomi, itera su tutti gli host ESXi registrati e per ogni host legge lo stato operativo dei dischi locali. Le metriche vengono pubblicate sul Pushgateway in formato Prometheus.

Di seguito il contenuto del file exporter/smart_exporter.py:

Di seguito il contenuto del file exporter/Dockerfile:

La configurazione vCenter viene passata tramite variabili d’ambiente, evitando così problemi di bind mount. La configurazione di Prometheus viene iniettata tramite Docker configs, una funzionalità nativa di Docker Compose che non richiede file sul disco dell’host.

Di seguito il contenuto del file docker-compose.yml:

NOTA BENE: sostituire le variabili VCENTER_HOST, VCENTER_USER e VCENTER_PASSWORD con i valori reali del tuo ambiente.

FASE 4 — COLLEGARE GRAFANA ALLA NETWORK DI PROMETHEUS

Poiché Grafana è già installato in uno stack Docker separato, dobbiamo collegarla alla network esxi_monitoring affinché possa raggiungere Prometheus per nome container.

Eseguire il comando:

Verificare che la connessione funzioni con il comando:

Se è tutto OK la risposta dovrebbe essere:

NOTA BENE: questa connessione va persa al riavvio del container. Per renderla permanente aggiungi la network esxi_monitoring come esterna nel docker-compose.yml dello stack Grafana.

 

FASE 5 — DEPLOY SU PORTAINER

Su Portainer creare un nuovo stack collegato al repository Gitea:

Stacks → Add stack → Repository

Repository URL: http://<IP_GITEA>/<utente>/esxi-smart-monitoring

Compose path: docker-compose.yml

Cliccare Deploy the stack

Verificare che tutti i container siano in stato Running con il comando:

Dovremmo visualizzare un output simile al seguente:

Controllare i log dello smart-exporter per verificare la connessione a vCenter con il comando:

L’output atteso dovrebbe essere simile al seguente:

 

FASE 6 – CONFIGURAZIONE DELLE DASHBOARD SU GRAFANA

Di seguito i vari step da seguire per la realizzazione della Dashboard.

 

STEP 1 — VERIFICA DEL DATASCOURCE DI PROMETHEUS

Aprire Grafana nel browser
Nel menu a sinistra cliccare Connections (icona a forma di fulmine)
Cliccare Data sources
Cercare Prometheus nella lista e cliccrci sopra

Verificare che l’URL sia http://prometheus:9090

Scorrere in fondo alla pagina e cliccare Save & Test

Dovrebbe apparire il banner verde Successfully queried the Prometheus API

 

STEP 2 — CREARE UNA NUOVA DASHBOARD

Adesso procedere con la creazione della Dashboard

Nel menu a sinistra cliccare Dashboards quindi cliccare il pulsante blu Create Dashboard

Cliccare Add visualization

Selezionare il datasource Prometheus

 

STEP 3 — PANNELLO 1: HEALTH STATUS

Si apre l’editor del pannello. Procedere così:

Tipo grafico (in alto a destra):

Cambiare da Time series a Stat come nell’immagine sovrastante

Impostare la Query (in basso):

Nel campo query selezionare la voce: esxi_smart_health

Cliccare Run queries

Dovresti vedere dei valori 0 o 1 apparire nell’anteprima.

Inserire il Titolo nella colonna destra nel campo Title:

Health Status Dischi

Nella colonna destra scorrere fino a Value mappings quindi cliccare su Add value mapping

Tipo: Value

Value: 1 → Display text: OK → Color: Verde

Clicca Add value mapping di nuovo

Value: 0 → Display text: FAIL → Color: Rosso

Cliccare Update

Se è tutto corretto dovremmo vedere una schermata come quella sovrastante

Adesso andare al fondo della colonna destra fino a Thresholds

Impostare:

Base → Rosso

Aggiungi soglia: 1 → Verde

Individuare le Standard options:

Impostare nelle Standard options → Display name (colonna destra) il seguente valore:

${__series.labels.device_name} – ${__series.labels.host}

Cliccare in alto a destra Save Dashboard

Inserire il titolo quindi cliccare Save

 

STEP 4 — PANNELLO 2: INVENTARIO DISCHI

Tornare alla dashboard e cliccare Add → Visualization.

Tipo grafico: Cambiare a Table

Query: esxi_device_is_ssd

Cliccare Run queries

Titolo: Inventario Dischi

Cliccare sul tab Transformations in basso accanto a Queries:

Clicca Add transformation

Scegliere Labels to fields

Apparirà una colonna per ogni label: host, device, device_name

Nella lista dei campi tenere: host, device_name, device

Clicca Add transformation → cerca Organize fields

Nascondere: Time, __name__, job, instance

Quindi rinominare:

host → Host
device_name → Disco
device → Device ID
Value #A → Health
Value #B → Tipo

Cliccare Apply

 

STEP 5 — PANNELLO 2: CONTEGGIO DISCHI OK PER HOST

Cliccare Add → Visualization

Impostare il tipo grafico in: Stat

Query: count by (host) (esxi_smart_health == 1)

Titolo: Dischi OK per host

In Standard options → Unit impostare: short

In Standard options → Display name: ${__series.labels.host}

In Thresholds impostare: Base → Verde (tutti OK è buono)

Cliccare Apply

 

STEP 6 — SALVATAGGIO DELLA DASHBOARD

Cliccare l’icona salva in alto a destra (o Ctrl+S)

Nome dashboard: ESXi Disk Health

Folder: puoi lasciare General

Cliccare Save

Al termine dopo varie implementazioni dovremmo visualizzare la nostra Dashoboard

 

FASE 7 – JSON DASHBOARD

Di seguito il codice Json pronto per avere la Dashboard pronta:

 

 

Articoli Recenti

Veeam Backup

Monitoring

Friends

  • My English Lab  English School
  • ChrSystem   Servizi ICT
  • Since 01  Kreative Graphics

Database

Networking

Autori

  • Raffaele Chiatto  Amministratore
  • Marco Valle  Autore
  • Angelo Lauria  Autore
  • Edoardo Prot  Autore
  • Davide D’Urso  Autore
Raffaele Chiatto

Raffaele Chiatto

Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi. Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare. Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.

Related Post

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Virtualizzazione

Linux

Microsoft

Apple

Backup

Database

Security

Automazione