Los templates de PNP permiten configurar las opciones de graficado que se le pasan al RRDTool. Si el template no existe PNP muestra una gráfica para cada fuente de datos que se pasa en el performance data. Pero a veces eso no es lo óptimo: el test de CPU quizás nos proporciona un valor de sys, otro de usr y otro para I/O, y nos interesa que en una misma gráfica existan los tres valores uno a caballo del otro para que la suma nos de el total de CPU en vez de mostrarnos tres gráficas separadas.

Para identificar qué template usa un test basta con buscar dentro de $NAGIOS_HOME/share/perfdata/$HOST/$SERVICIO.xml la entrada TEMPLATE que aparece al principio de todo. PNP buscará las opciones en $NAGIOS_HOME/share/pnp/templates/NOMBRE_TEMPLATE.php. Es decir, si en el fichero xml hemos encontrado la linea <TEMPLATE>check_dns</TEMPLATE>, el fichero de configuración debe ser check_dns.php.

A continuación un ejemplo básico de lo que podría ser el check_dns.php:

<?php
#==============================================================================
# DNS
#==============================================================================
$opt[1] = “–vertical-label seconds -l0 –title “DNS Response Time / $servicedesc” “;
$def[1] =  “DEF:var1=$rrdfile:$DS[1]:AVERAGE ” ;
$def[1] .= “AREA:var1#FF6600:”Response Time\t” ” ;
$def[1] .= “GPRINT:var1:LAST:”%6.2lf last” ” ;
$def[1] .= “GPRINT:var1:AVERAGE:”%6.2lf avg” ” ;
$def[1] .= “GPRINT:var1:MAX:”%6.2lf max\n” ” ;
$def[1] .= “LINE1:var1#000000 “;

?>

El check_load.php es un claro ejemplo de como agrupar los tres valores (load1, load5, load15) de un test y ponerlos en una única gráfica, como simplemente áreas:

<?php

$opt[1] = “–vertical-label Load -l0  –title “CPU Load for $hostname / $servicedesc” “;

$def[1] =  “DEF:var1=$rrdfile:$DS[1]:AVERAGE ” ;
$def[1] .= “DEF:var2=$rrdfile:$DS[2]:AVERAGE ” ;
$def[1] .= “DEF:var3=$rrdfile:$DS[3]:AVERAGE ” ;
$def[1] .= “HRULE:$WARN[1]#FFFF00 “;
$def[1] .= “HRULE:$CRIT[1]#FF0000 “;
$def[1] .= “AREA:var3#FF0000:”Load 15″ ” ;
$def[1] .= “GPRINT:var3:LAST:”%6.2lf last” ” ;
$def[1] .= “GPRINT:var3:AVERAGE:”%6.2lf avg” ” ;
$def[1] .= “GPRINT:var3:MAX:”%6.2lf max\n” ” ;
$def[1] .= “AREA:var2#EA8F00:”Load 5 ” ” ;
$def[1] .= “GPRINT:var2:LAST:”%6.2lf last” ” ;
$def[1] .= “GPRINT:var2:AVERAGE:”%6.2lf avg” ” ;
$def[1] .= “GPRINT:var2:MAX:”%6.2lf max\n” ” ;
$def[1] .= “AREA:var1#EACC00:”load 1 ” ” ;
$def[1] .= “GPRINT:var1:LAST:”%6.2lf last” ” ;
$def[1] .= “GPRINT:var1:AVERAGE:”%6.2lf avg” ” ;
$def[1] .= “GPRINT:var1:MAX:”%6.2lf max\n” “;

?>

El check_cpu.php muestra como juntar los valores en una gráfica pero apilando las gráficas (el primer valor siempre debe ser una area, los siguientes serán un stack respecto al area definida anteriormente):

<?php
$opt[1] = “–vertical-label CPU -l0  –title “CPU use for $hostname / $servicedesc” “;
#
$def[1] =  “DEF:var1=$rrdfile:$DS[1]:AVERAGE ” ;
$def[1] .= “DEF:var2=$rrdfile:$DS[2]:AVERAGE ” ;
$def[1] .= “DEF:var3=$rrdfile:$DS[3]:AVERAGE ” ;

$def[1] .= “AREA:var1#EACC00:”usrt” ” ;
$def[1] .= “GPRINT:var1:LAST:”%2.1lf %% last” ” ;
$def[1] .= “GPRINT:var1:AVERAGE:”%2.1lf %% avg” ” ;
$def[1] .= “GPRINT:var1:MAX:”%2.1lf %% max\n” “;
$def[1] .= “STACK:var2#EA8F00:”syst” ” ;
$def[1] .= “GPRINT:var2:LAST:”%2.1lf %% last” ” ;
$def[1] .= “GPRINT:var2:AVERAGE:”%2.1lf %% avg” ” ;
$def[1] .= “GPRINT:var2:MAX:”%2.1lf %% max\n” ” ;
$def[1] .= “STACK:var3#FF0000:”iot” ” ;
$def[1] .= “GPRINT:var3:LAST:”%2.1lf %% last” ” ;
$def[1] .= “GPRINT:var3:AVERAGE:”%2.1lf %% avg” ” ;
$def[1] .= “GPRINT:var3:MAX:”%2.1lf %% max\n” ” ;

?>

Se pueden realizar también operaciones dentro del archivo de configuración, definiendo una variable con el habitual DEF y luego las operaciones mediante un CDEF:

<?php
#==============================================================================
# Disk
#==============================================================================
$opt[1] = “–vertical-label MB -l0 –title “Filesystem / $servicedesc” “;

$def[1] = “DEF:var11=$rrdfile:$DS[1]:AVERAGE “;
$def[1] .=”CDEF:var1=var11,1024,/ “;

$def[1] .= “AREA:var1#9966FF:”Used” “;
$def[1] .= “LINE1:var1#003300: “;

$def[1] .= “GPRINT:var1:LAST:”%6.2lf last” ” ;
$def[1] .= “GPRINT:var1:AVERAGE:”%6.2lf  avg” ” ;
$def[1] .= “GPRINT:var1:MAX:”%6.2lf max\n” ” ;

$def[1] .= “HRULE:$MAX[1]#003300:”Capacity $MAX[1] MB ” “;
$def[1] .= “HRULE:$WARN[1]#ffff00:”Warning on $WARN[1] MB ” “;
$def[1] .= “HRULE:$CRIT[1]#ff0000:”Critical on $CRIT[1] MB \n” “;

?>