====== Grafico NagioStat di CPU load ======
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:
{{doc:appunti:linux:sa:nagiostat_snmp_cpu_load.png|NagioStat SNMP CPU load}}.
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 [[http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html|buon tutorial sui grafici RRD]].
===== RRDCreateTemplate =====
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
===== PlotTemplate =====
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\"
===== ValueRegexTemplate =====
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]+)/"
===== InsertValue =====
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
===== Graph =====
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"