Tramite la sonda check_snmp di Nagios leggiamo tre valori SNMP: ssCpuRawUser.0, ssCpuRawNice.0 e ssCpuRawSystem.0. Questi dati vengono salvati come performance data con NagioStat. Il risultato che vogliamo ottenere è un grafico di questo tipo:
Vediamo cosa è stato necessario configurare in NagioStat per ottenere il risultato. L'unico file da configurare è nagiostat.conf
, contenuto nella directory /usr/lib/cgi-bin/nagiostat/
.
ATTENZIONE: il file di configurazione non accetta le andate a capo, ogni direttiva deve essere messa tutta su una stessa riga!
Come riferimento esiste questo buon tutorial sui grafici RRD.
Con questa direttiva si dichiara come verrà creato il database RRD appena arriveranno i primi dati. Per la spiegazione dei parametri vedere la man page di rrdcreate(1)
.
# # - Data Source is a COUNTER (it is stored as a per-second rate). # - Data Source is *UNKNOWN* if more than 600 seconds pass between two updates. # - Data Source min/max is 0/100 (refer to the processed data-rate values). # - We consolidate data points in four Round Robin Archives: # - Calculate the AVERAGE of the values # - Data is *UNKNOWN* if less than 50% of the data points are available # - The archives contain the AVERAGE calculated on 1, 6, 24 and 288 points # (the 1 point average is a fake average!) # - Each archive contains respectively 2 days, 2 weeks, 2 months and 2 years # of data. # - The math is as follow: # - ( 1 point x 300 s) = 5 min x 576 values = 2 days # - ( 6 points x 300 s) = 30 min x 672 values = 2 week # - ( 24 points x 300 s) = 2 hour x 744 values = 2 month # - (288 points x 300 s) = 1 day x 730 values = 2 year # RRDCreateTemplate snmp_cpu_load --step 300 DS:user:COUNTER:600:0:100 DS:nice:COUNTER:600:0:100 DS:system:COUNTER:600:0:100 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 RRA:AVERAGE:0.5:24:744 RRA:AVERAGE:0.5:288:730
Template per la generazione del grafico. Vedere la man page di rrdgraph(1)
, rrdgraph_data(1)
e rrdgraph_rpn(1)
.
A partire dai tre valori di percentuale utilizzo CPU, si vuole disegnare tre aree: la più ampia è la somma delle tre grandezze (user + nice + system), quella intermedia è la somma di due (user + nice) e infine l'area più piccola rappresenta solo la CPU user. Quindi si definiscono tre grandezze DEF direttamente prese dal database e due CDEF calcolate. Su queste grandezze si disegnano le tre AREA nell'ordine opportuno. Quindi si aggiungono delle etichette con ulteriori valori a corredo.
Notare che nel file di configurazione alcuni caratteri (virgolette, blackslash) devono essere preceduti da backslash.
# # SNMP CPU load: sum of CPU User, CPU Nice and CPU System. # Show as three overlapping areas: (user + nice + system), (user + nice), (user) # PlotTemplate snmp_cpu_load --start $s --end $e --vertical-label \"CPU load (%)\" DEF:user=$f:user:AVERAGE DEF:nice=$f:nice:AVERAGE DEF:system=$f:system:AVERAGE CDEF:user_nice=user,nice,+ CDEF:user_nice_system=user_nice,system,+ AREA:user_nice_system#ff2600:\"System\" AREA:user_nice#c800ff:\"Nice\" AREA:user#ff7a00:\"User\\l\" COMMENT:\"\\s\" GPRINT:user:MAX:\"Max load\\: %3.2lf%%\" GPRINT:user:AVERAGE:\"Average load\\: %3.2lf%%\" GPRINT:user:LAST:\"Current load\\: %3.2lf%%\\l\"
Con questa direttiva si indica come estrarre dal performance data inviato da Nagios i tre valori SNMP. Il formato dei dati inviato da Nagios è per fortuna riportato nel file di log /var/log/nagiostat/debug.log
. I tre valori estratti verranno inseriti nel database RRD.
# # CPU load via SNMP # # PERFDATA="UCD-SNMP-MIB::ssCpuRawUser.0=203009c # UCD-SNMP-MIB::ssCpuRawNice.0=0c # UCD-SNMP-MIB::ssCpuRawSystem.0=53810c" # ValueRegexTemplate snmp_cpu_load "perfdata:user:/ssCpuRawUser\.0=([0-9]+)/" "perfdata:nice:/ssCpuRawNice\.0=([0-9]+)/" "perfdata:system:/ssCpuRawSystem\.0=([0-9]+)/"
Con questa riga si indica che i dati provenienti da un certo host (HostRegex), per un determinato servizio (ServiceRegex), devono essere inseriti in un certo database (RRDArchiveFile).
## RRDArchiveFile RRDCreateTemplate HostRegex ServiceRegex ValueRegexTemplate InsertValue pierargo-cpu_load.rrd snmp_cpu_load /^pierargo$/ "/^CPU load$/" snmp_cpu_load
Con questa riga si dichiara l'esistenza del grafico pierargo-cpu_load e grazie ai template si definisce il suo aspetto.
## GRAPHNAME RRDFILENAME GraphTimeTemplate PlotTemplate HTML-Template Title Graph pierargo-cpu_load pierargo-cpu_load.rrd std_1year snmp_cpu_load default.html "CPU load on pierargo.texnet.it"