La mia rete è piccina, ho solo due dispositivi che si suppone debbano restare accesi a lungo: un server tuttofare (VPN, Docker e altro) e un server stampa.
Ergo, mi sono sviluppato un uptime monitor, non per misurare il tempo di attività ma il tempo di accensione del sistema.
La soluzione che ho scelto non è certamente la più elegante e se dovessi farlo con già 20 server userei un altro approccio (magari con SSH e raccolta ogni mezz’ora in cron), ma è interessante per due ragioni:
- Se avete server web già in essere vi viene fuori praticamente gratis
- Lavora su più livelli, hardware e software, web e non web
Quindi, oltre che per sistemisti sfaticati dalle reti piccoli, potrebbe interessare agli studenti! Può essere un progettino carino per coniugare programmazione, TPSI e sistemi e reti.
La parte 0, il progetto
L’idea sarà essenzialmente di avere una pagina che raccoglie le informazioni che vengono fornite dagli host monitorati.
La “dashboard centrale” riceverà in formato JSON i dati sulla data di accensione dei sistemi e farà i suoi calcoli per darvi il tempo d’accensione.
Ho scelto di elaborare in dashboard perché il comando “uname” classico non è molto coerente e può essere difficile da “splittare”, mentre il calcolo di distanza tra date è più semplice e anche affidabile, oltre che usabile anche per eventuali scopi statistici.
La parte 1, una dashboard centrale
La dashboard centrale è il vero cuore dell’applicazione, dato che effettua il calcolo. Potete usare qualsiasi linguaggio ma se già avere un server LAMP classico vi conviene usare PHP o JavaScript. Io, da lazzarone, ho usato PHP perché mi ricordavo come elaborare i JSON senza guardare al manuale, ma poco cambia.
Ora vi serve una definizione degli host: se sono tre potete tranquillamente inserire a mano nel codice, se sono di più sarebbe decisamente opportuno avere un meccanismo del tipo “lista di IP” (basta veramente un file di testo semplice) che viene caricata ad ogni richiesta e poi un po’ di for che per ogni elemento nella lista chiamano la funzione che preleva il suo bel JSON, lo elabora e mostra il tempo di accensione (con PHP potete usare date_diff, leggete bene la pagina di manuale che sbagliare è facile).
Non vi fornirò il codice poiché:
- Non sono un programmatore, quindi potrete farlo decisamente meglio voi conoscendo il linguaggio se lo state studiando
- Proprio per dare una valenza didattica al progetto è preferibile avere solamente uno schema e lasciare l’implementazione a chi lo applica
La parte 2, un informatore locale
L’informatore locale è decisamente una parte poco interessante, quindi vi fornisco direttamente il codice che uso:
<?php
header('Content-Type: application/json');
$data = shell_exec('uptime -s');
$uptime = chop($data);
@$myobj->IP = "[INSERIRE IP]";
$myobj->label = "[INSERIRE LABEL]";
$myobj->uptime = $uptime;
$myJSON = json_encode($myobj);
echo $myJSON;
?>
In estrema sintesi questo codice vi restituisce un JSON con dentro la data d’accensione del sistema, al quale potrete aggiungere l’IP e una label che verrà ricevuta assieme all’uptime.
Si può fare meglio? Di sicuro, tant’è che ho dovuto sopprimere un warning in una riga, ma funziona e fa il suo sporco lavoro…
Il risultato…
Qui vedete la mia implementazione, fatta con un semplice Bootstrap. Non è bellissima ma fa il suo sporco lavoro e mi evita di dover fare login con SSH quando voglio sapere l’uptime dei server.
L’ho integrato, poi, in una dashboard di rete che mi mostra anche lo status dei database e linka i vari servizi di rete locale.