Table of Contents

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:

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