Table of Contents
¿Qué son las plantillas?
PNP usa plantillas para modificar la apariencia de los gráficos RRD.
El check_command seleccionado determina qué plantilla será usada para controlar el gráfico. A continuación se describe dónde se almacenan las plantillas y cómo se toma la decisión sobre la plantilla “correcta” que se va a usar.
¿Qué plantilla y cuándo debo usarla?
Las plantillas se almacenan en dos sitios dentro del sistema de ficheros.
- share/templates.dist - para plantillas incluídas en el paquete de PNP
- share/templates - para plantillas personalizadas que no se deben cambiar en las actualizaciones
Si el gráfico para el servicio “http” en el equipo “localhost” debe mostrarse, PNP buscará un fichero XML perfdata/localhost/http.xml
y ller sus contenidos. Los ficheros XML se crean automaicamentey contienen información sobre equipos y servicios particulares. La cabecera contiene información sobre el plugin y los datos de rendimiento. La etiqueta XML <TEMPLATE>
identifica qué plantilla de PNP se usará para este gráfico.
/localhost/http.xml
<NAGIOS> <DATASOURCE> <TEMPLATE>check_http</TEMPLATE> <DS>1</DS> <NAME>time</NAME> <UNIT>s</UNIT> <ACT>0.006721</ACT> <WARN>1.000000</WARN> <CRIT>2.000000</CRIT> <MIN>0.000000</MIN> <MAX></MAX> </DATASOURCE> <DATASOURCE> <TEMPLATE>check_http</TEMPLATE> <DS>2</DS> <NAME>size</NAME> <UNIT>B</UNIT> <ACT>263</ACT> <WARN></WARN> <CRIT></CRIT> <MIN>0</MIN> <MAX></MAX> </DATASOURCE> ... </NAGIOS>
PNP buscará la plantilla con el nombre check_http.php
en el siguiente orden:
- templates/check_http.php
- templates.dist/check_http.php
- templates/default.php
- templates.dist/default.php
La plantilla default.php tiene una posición especial y se usa cuando no se encuentra ninguna otra opción.
Creando plantillas propias
Las plantillas PNP son ficheros PHP que se incluyen durante la ejecución de PNP usando la función PHP include(). Esto significa que cada código PHP en las plantillas será interpretado, por lo que la manipulación de todos los valores es posible.
Una plantilla PNP debe tener las siguientes características:
- contener código PHP válido.
- no producir ninguna salida.
- los dos arrays $opt[] y $def[] debe ser rellenados
Estos dos arrays se usan para invocar 'rrdtool graph
' por lo que se puede usar cada opción soportada por RRDtool. Todas las opciones de RRDtool se describen extensamente enRRDtool Homepage.
Si ambos arrays contienen más de un conjunto de datos, se crearán gráficos para cada conjunto de datos.
Dentro de las plantillas se pueden usar los datos relacionados de los ficheros XML.
Usando la relativamente sencilla plantilla response.php vamos a describir las opciones más importantes.
<?php # $opt[1] = "--title \"Response Time For $hostname / $servicedesc\" "; # $def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE " ; $def[1] .= "AREA:var1#00FF00:\"Response Times \" " ; $def[1] .= "LINE1:var1#000000 " ; $def[1] .= "GPRINT:var1:LAST:\"%3.4lg %s$UNIT[1] LAST \" "; $def[1] .= "GPRINT:var1:MAX:\"%3.4lg %s$UNIT[1] MAX \" "; $def[1] .= "GPRINT:var1:AVERAGE:\"%3.4lg %s$UNIT[1] AVERAGE \" "; ?>
Nota: como el número (1) y la letra “L” parecen iguales en este listado: el formato “%3.4lg” contiene una pequeña letra.
$opt[1] = “–title …
establece las opciones de RRDtool para el primer conjunto de datos, aquí está el título tal y como se verá. Las comillas incluídas son enmascaradas mediante la barra invertida (\). Las variables $hostname
y $servicedesc
se determinaron en la llamada a PNP, y están disponibles para la plantilla.
$def[1] = “DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE ”;
define qué datos se leerán desde el fichero RRD. $RRDFILE[1] contiene la ruta al fichero RRD para este servicio. $DS[1] hace referencia a la primera serie de datos del fichero RRD.
$def[1] .= “AREA:var1#00FF00:\”Response Times \” “;
el operador ”.=“ añade más datos al array $def[1]. Se dibujará un área usando datos desde la variable var1
. El color se define en notación HEX #00FF00 (rojo, verde, azul). La etiqueta es “Response Times”.
$def[1] .= “LINE1:var1#000000 ”;
Para terminar, se dibuja una línea (LINE1) en negro(# 000000).
$def[1] .= “GPRINT:var1:LAST:\”%3.4lg %s$UNIT[1] LAST \” “;
$def[1] .= “GPRINT:var1:MAX:\”%3.4lg %s$UNIT[1] MAX \” “;
$def[1] .= “GPRINT:var1:AVERAGE:\”%3.4lg %s$UNIT[1] AVERAGE \” “;
Las tres líneas GPRINT generan la leyenda para la gráfica. Los valores actuales se formatean usando la sintaxis de printf.
Variables disponibles
Al usar el recolector de datos process_perfdata.pl
PNP almacena no sólo los datos de rendimiento, sino otros valores exportados por Nagios. Estos valores se almacenan en los ficheros XML asociados a los servicios apropiados.
En la primera parte del fichero XML los datos de rendimiento se almacenan en componentes separados.
<NAGIOS> <DATASOURCE> <TEMPLATE>check_http</TEMPLATE> <DS>1</DS> <NAME>time</NAME> <UNIT>s</UNIT> <ACT>0.006721</ACT> <WARN>1.000000</WARN> <CRIT>2.000000</CRIT> <MIN>0.000000</MIN> <MAX></MAX> </DATASOURCE> .... </NAGIOS>
El campo <DS> designa las fuentes de datos y se usa para identificar las series de datos de los ficheros RRD, y además, es la clave de los siguientes arrays.
El array $UNIT[1]
contiene la unidad de medida de la primera serie de datos.
El fichero XML contiene otra información. Cuando process_perfdata.pl se usa en el modo por defecto todas las macros disponibles tienen los valores actuales. En benficio de la legibilidad, las siguientes líneas son sólo un extracto.
<NAGIOS> ... <NAGIOS_SERVICENOTIFICATIONID>8418</NAGIOS_SERVICENOTIFICATIONID> <NAGIOS_SERVICENOTIFICATIONNUMBER>0</NAGIOS_SERVICENOTIFICATIONNUMBER> <NAGIOS_SERVICEOUTPUT>HTTP OK HTTP/1.1 200 OK - 10087 bytes in 0.125 seconds</NAGIOS_SERVICEOUTPUT> <NAGIOS_SERVICEPERCENTCHANGE>0.00</NAGIOS_SERVICEPERCENTCHANGE> <NAGIOS_SERVICEPERFDATA>time=0.124811s;;;0.000000 size=10087B;;;0</NAGIOS_SERVICEPERFDATA> <NAGIOS_SERVICEPERFDATAFILE></NAGIOS_SERVICEPERFDATAFILE> <NAGIOS_SERVICEPROBLEMID>0</NAGIOS_SERVICEPROBLEMID> <NAGIOS_SERVICESTATE>OK</NAGIOS_SERVICESTATE> <NAGIOS_SERVICESTATEID>0</NAGIOS_SERVICESTATEID> <NAGIOS_SERVICESTATETYPE>HARD</NAGIOS_SERVICESTATETYPE> <NAGIOS_SHORTDATETIME>27-12-2007 13:51:23</NAGIOS_SHORTDATETIME> ... </NAGIOS>
Los diferentes campos XML se pueden usar como variables en las plantillas PNP. Cada campo está disponible como variable con el mismo nombre.
El valor del campo <NAGIOS_SERVICEOUTPUT>
está disponible como la variable $NAGIOS_SERVICEOUTPUT
.