====== 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"