ELX-HealthMonitor
Cosa sta facendo ora un server Linux e cosa faceva la settimana scorsa
Un agente di monitoraggio con interfaccia web, storico in SQLite e avvisi per posta elettronica. Un unico eseguibile senza dipendenze: l'interfaccia sta nel binario e la base si crea da sé. Su un Celeron di quattro anni costa circa il quattro per cento di un core e undici megabyte di memoria.
Letto dal kernel, non indovinato
Tutto viene direttamente da /proc, /sys e smartctl. Nessun collettore da installare, nessuna base di serie temporali da far girare e nessuna coppia agente-server da tenere allineata.
I dischi prima che cedano
Salute SMART, temperatura, ore di funzionamento, settori rilocati e in sospeso, errori CRC, usura degli SSD e byte scritti in tutta la vita — con la tabella completa degli attributi quando volete guardare più da vicino.
Il RAID, parte scomoda compresa
Stato dell'array, livello, membri, dischi guasti e avanzamento della risincronizzazione — più la mappa delle intenzioni di scrittura, che dice se in questo momento le copie sono davvero identiche, e il numero di discordanze dell'ultimo controllo.
I servizi con il loro traffico su disco
Ogni unità systemd con processore, memoria, letture e scritture su disco, numero di compiti e riavvii — e i pulsanti per avviare, fermare e cambiare l'avvio automatico.
Avvisi che non gridano al lupo
Una regola porta un tempo di attesa: un picco di dieci secondi a pieno carico non manda nulla, dieci minuti a quel livello sì. È questa sola impostazione a separare i messaggi che si leggono da quelli che si filtrano.
Uno storico che non cresce all'infinito
Tre giorni a piena risoluzione, poi intervalli di cinque minuti che conservano media, minimo e massimo, e nulla di più vecchio di un mese. I picchi sopravvivono al diradamento; i gigabyte no.
Cosa viene misurato
| Sezione | Misure |
|---|---|
| Processore | Carico totale e per core, user/system/iowait/steal, frequenza, carico medio, cambi di contesto, coda |
| Memoria | Occupata, disponibile, cache, buffer, slab, pagine modificate, area di scambio e quanto viene sollecitata |
| Dischi | Velocità di lettura e scrittura, IOPS, latenza, occupazione del dispositivo, modello, capacità |
| Filesystem | Occupato, libero, percentuale, inode |
| SMART | Salute, temperatura, ore di funzionamento, settori rilocati e in sospeso, errori CRC, usura degli SSD, byte scritti in tutta la vita, tabella completa degli attributi |
| RAID | Stato degli array md, livello, membri, dischi guasti, avanzamento e velocità della risincronizzazione, uguaglianza attuale delle copie e discordanze dell'ultimo controllo |
| Rete | Byte e pacchetti in entrata e uscita, errori e perdite, stato del collegamento, velocità della porta, indirizzi, MTU |
| Temperatura | Tutti i sensori hwmon e le zone termiche ACPI, più le temperature dei dischi da SMART |
| Servizi | Stato e avvio automatico delle unità systemd, processore, memoria, traffico su disco per servizio, numero di compiti, riavvii |
| Processi | I primi per processore e per memoria, attività su disco, proprietario, unità |
Ogni sezione si disattiva separatamente, e una sezione disattivata non viene interrogata affatto.
La domanda sul RAID che vale la pena porre
Un array in mirror tiene gli stessi dati su entrambi i dischi, ma le scritture non li raggiungono nello stesso istante. Il kernel annota le aree che potrebbero differire in una mappa delle intenzioni di scrittura, e questo agente mostra quella mappa direttamente: finché il numero di aree sporche è zero le copie sono identiche; oltre lo zero è in corso una risincronizzazione.
Accanto c'è il numero di discordanze dell'ultimo controllo di integrità. Un valore diverso da zero significa che un disco o un controllore ha restituito dati diversi dalle due metà di un mirror — ed è esattamente il guasto per cui esiste il monitoraggio, ed esattamente quello che una spia verde «array in salute» nasconde.
Quanto costa farlo girare
Le letture costose seguono un proprio calendario, separato dal ciclo principale: svegliare cinque dischi ogni tre secondi per chiederne la temperatura sarebbe peggio che non sorvegliarli affatto.
| Impostazione | Predefinito | Cosa regola |
|---|---|---|
interval_sec | 3 s | Il ciclo principale di interrogazione |
services.interval_sec | 15 s | Un giro completo sulle unità systemd |
disk.smart_interval_sec | 900 s | L'interrogazione SMART — è questa a svegliare i dischi |
storage.persist_interval_sec | 30 s | La scrittura di un'istantanea nello storico |
Misurato su un Celeron J1900 a quattro core, con 165 unità systemd e cinque dischi: circa il quattro per cento di un core e undici megabyte di memoria. Su uno Xeon E5-2690, meno del tre per cento di un core.
L'interfaccia
- Il browser ricorda le vostre scelte: il periodo di ogni grafico, le curve nascoste con un clic sulla legenda e i filtri delle tabelle di servizi ed eventi. Un ricaricamento non ne azzera nessuna.
- Tutte le curve salgono da zero, l'unità dell'asse segue l'intervallo dei valori e il numero di decimali segue il passo della griglia — così due tacche vicine non portano mai la stessa etichetta.
- Dopo un aggiornamento una scheda aperta si accorge da sé del cambio di versione, lo dice e si ricarica, invece di lasciare un'interfaccia vecchia nella cache del browser.
- I pulsanti di riavvio e spegnimento della macchina stanno nell'intestazione; se non li volete lì, una chiave di configurazione li toglie.
- Ogni azione irreversibile sta dietro una conferma che spiega la conseguenza, e il pulsante porta il nome dell'azione anziché «OK».
In breve
- Sistemi operativi
- Debian e Ubuntu con systemd
- Architetture
- amd64, arm64, armhf
- Interfaccia web
- Porta 8555 in modo predefinito
- Storico
- SQLite; 3 giorni grezzi, 31 giorni condensati
- Dipendenza facoltativa
- smartmontools, per la sezione SMART
- Costo abituale
- ~4% di un core, ~11 MB di memoria
- Avvisi
- Posta via SMTPS, STARTTLS o in chiaro
- Configurazione
- Interfaccia web, oppure config.json