TAGS CLOUD
Incrementa dimensioniDecrementa dimensioni
Uno script shell per monitorare il sistema
Con l’aiuto degli RRDtool e di poche righe di codice Bash possiamo tenere sotto controllo il computer e scoprire come va e dove è possibile intervenire per migliorare le prestazioni
(pagina 3 di 4)


Rappresentazione grafica dei dati
RRDtool ha un punto di forza notevole nelle possibilità di rappresentazione grafica dei dati, di cui esploreremo solamente una piccola parte, riuscendo nonostante questo a produrre un grafico di qualità. La prima operazione che viene compiuta è quella della definizione delle variabili del grafico, operata tramite la parola chiave DEF
DEF:mem=archive.rrd:mem:AVERAGE
DEF:load=archive.rrd:load:AVERAGE
con questi comandi abbiamo definito le variabili mem e load (secondo campo, prima dell’uguale), estraendole dal database contenuto nel file archive.rrd e collegandole alle variabili (omonime) contenute in esso e definite all’atto della creazione del database (terzo campo). La funzione AVERAGE indica quale campo dobbiamo leggere dal database, tra quelli memorizzati: avremmo potuto infatti salvare, oltre a vari tipi di medie (come abbiamo visto) anche altri tipi di informazione come il valore massimo o minimo. Qui è necessario quindi specificare quale funzione leggere e con quale intervallo (in questo caso l’intervallo è stato omesso, essendocene uno unico). Tramite la parola chiave CDEF possiamo invece definire nuovi dati calcolandoli a partire da quelli a disposizione
CDEF:load120=load,120,TREND
CDEF:mem70=mem,70,*,100,/
CDEF:mem5=mem,5,*,100,/
CDEF:overlap=mem,load,LT,mem,load,IF
Le operazioni sono definite secondo una sintassi un po’ oscura nota come RPL, che prevede che i dati vengano scritti prima delle operazioni: ad esempio l’operazione ‘5*4’ viene scritta ‘5,4,*’.Il dato load120 è la media fatta su 120 secondi del dato ‘load’, e viene infatti espressa da load, 120, TREND, dove l’operazione TREND è proprio l’andamento medio. Il dato mem 70 rappresenta il 70% della media, che si calcola secondo la formula (mem*70)/100; scritta in sintassi RPL questa formula diviene mem,70,*,100,/; allo stesso modo definiamo il 5% della memoria, mem5. Lo scopo di questi dati diverrà chiaro tra breve. L’ultimo dato prodotto è overlap, che rappresenta l’area in cui i dati mem e load si sovrappongono; tale calcolo è in realtà molto semplice: è sufficiente prendere il dato minore tra i due; l’espressione RPL mem,load,LT,mem,load,IF è traducibile con IF mem LT load THEN mem ELSE load, dove l’operazione LT significa ‘minore di’. Una volta definiti i dati su cui costruire il grafico possiamo passare a definire gli elementi grafici:
LINE1:mem#53853e:Memory
LINE1:load#8792a6:CPULoad
LINE1:load120#2f66cb:CPULoadTrend
Le tre quantità mem, load e load120 vengono disegnate sul grafico ciascuna con una linea di spessore 1 pixel (LINE1) e di colore variabile, rispettivamente #53853e, #8792a6 e #2f66cb. Contestualmente viene creata una legenda con le etichette indicate nell’ultimo campo. Il dato load120 viene rappresentato, oltre che da una linea colorata, anche da un’area, tramite il semplice comando AREA:load120#aecbff, che riempie l’area uniformemente con il colore #aecbff. L’area sottostante il dato mem, invece, viene colorata con un colore che sfuma verso il bianco, e questo è ottenuto nel modo seguente: viene riempita di bianco l’area sottostante il dato mem70, che rappresenta il 70 percento dell’area totale di mem. Successivamente viene riempita 6 volte l’area pari al 5 percento del totale, impilandola su quella precedente, e raggiungendo quindi il 100%; ogni area del 5% viene colorata con un colore più scuro, in modo da dare l’illusione della sfumature; ovviamente maggiore è il numero di dati impilati, maggiore sarà l’effetto di sfumatura ottenuto.
AREA:mem70#ffffff AREA:mem5#fbfff9::STACK
AREA:mem5#f2ffec::STACK AREA:mem5#e9ffe0:
:STACK AREA:mem5#deffd0::STACK AREA:mem5#d4ffc1
::STACK AREA:mem5#c8ffb0::STACK
Gli ultimi parametri passati sulla riga di comando sono l’istante di inizio e di fine del grafico, espressi rispettivamente da ‘-1h’ e da ‘N’, ovvero da un’ora fa e dal momento attuale, e le dimensioni minime del grafico da produrre, in questo caso 800x400. Il primo script si occupa di creare ed aggiornare il nostro database; il funzionamento è molto semplice, si tratta di un grande ciclo while in cui i dati vengono letti ed inseriti nel database. Ma adesso passiamo all’analisi dello script:
 [01-02] Dopo l’intestazione che comunica al sistema con quale programma eseguire lo script definiamo una variabile contenente il nome del file che ospiterà il nostro database Round Robin.
[03-04] Se il file è già presente lo cancelliamo e provvediamo a crearne uno nuovo: questo comportamento permette di essere certi che il database che aggiorneremo sia costruito in modo da ospitare proprio i dati che vogliamo. Il database viene creato con la riga di comando che abbiamo descritto precedentemente.
[05] Leggiamo la memoria totale disponibile sul sitema dal file /proc/meminfo; ricordiamo che il filesystem /proc è un punto di accesso alle strutture interne del kernel, e che quindi, tra le altre cose, fornisce informazioni sullo stato della macchina.
[06] Questo grande ciclo while non termina mai, e contiene tutte le istruzioni necessarie a leggere i dati che ci interessano e ad inserirli nel database.
[09-10] La quantità di memoria utilizzata è estratta dal filesystem / proc e calcolata mediante una semplice operazione con il programma bc.
[11- 12] Il carico della CPU è sempre un parametro mediato, in quanto la CPU è unica e può quindi essere solo scarica o completamente occupata. Il filesystem /proc fornisce le medie dell’ultimo minuto, di 5 e di 10 minuti: si è arbitrariamente scelto di leggere la media sugli ultimi 5 minuti, ma il lettore è libero di modificare tale comportamento. Il carico di CPU è sempre dato in percentuale tra 0 e 1, pertanto è sufficiente moltiplicare per 100 per ottenere la percentuale effettiva.
 [14-15] Il database viene poi aggiornato come si è visto precedentemente e, dopo un attesa di 10 secondi, il ciclo riprende.
Crea un grafico con i dati
graph.sh
Pagina 3/4
Lascia un commento
Tag: script shell, monitoraggio, sistema, RRDtool, database, grafici, dati
Condividi