PRTG XML

En muchas ocasiones, nos encontramos con que necesitamos obtener información de un servicio o dispositivo que no soporta SNMP o WMI, esto se da especialmente en los sensores de lo que se denomina Internet de las cosas (IoT) o dispositivos muy dispares como equipos de laboratorio.

En estos casos, es realmente fácil escribir un pequeño código en cualquier lenguaje de programación (PHP, Ruby, Python, Java, etc) que nos permita obtener una salida JSON o XML a partir de una url del equipo que queremos monitorizar.

El formato de la salida ha de ser el siguiente:

<?xml version="1.0" encoding="utf-8" ?>
<prtg>
	<result>
		<channel>Canal1 </channel>
		<value>12.3456</value>
		<float>1</float>
		<unit>custom</unit>
		<customunit>celsius</customunit>
	</result>
	
	<text>Mensaje</text>
</prtg>

Analizando el código de la salida del mensaje, podemos ver las siguientes secciones:
La cabecera del archivo XML

<?xml version="1.0" encoding="utf-8" ?>

El comienzo y el fin de la sección que indica que es un sensor PRTG
Comienzo

<prtg>

Fin

</prtg>

Entre ambos indicadores, nos encontramos con los resultados, que pueden llevar varias claves incluidas
Las claves deben de estar entre las secciones

<result>

y el fin de sección

</result>

Las claves result indican cada uno de los canales del sensor. En dichas claves mostraremos determinados valores que indican a PRTG desde el fichero de salida PRTG XML, que y como debe mostrar los resultados en el sensor

<channel>

Indica el nombre del canal a mostrar en PRTG

<value>

Es el valor a mostrar en el sensor. Dependiendo del tipo de valor o de la presentación, este valor tendrá modificadores

<float>

Si está a 1 significa que el anterior valor ha de representarse en coma flotante, de lo contrario se mostrará como un entero.

<unit>

Permite definir la unidad de representación en PRTG del valor. Si el valor es custom, deberemos de indicar con otro parámetro la unidad a representar.

<customunit>

La unidad de representación (por ejemplo ºC o ºF en el caso de temperatura, pascales en el caso de presiones, rpm, etc)
Un ejemplo de un resultado para la un sensor de presión sería:

<result>
		<channel>Presión deposito 1 </channel>
		<value>1.234</value>
		<float>1</float>
		<unit>custom</unit>
		<customunit>Bar</customunit>
</result>

También podemos agregar valores de alerta en el sensor.
Las claves:

<limitmode>
<limitmaxwarning>
<limitmaxerror>

Nos permiten definir las alertas del canal en el sensor.
Un ejemplo con el sensor de presión anterior sería:

<result>
		<channel>Presión deposito 1 </channel>
		<value>1.234</value>
		<float>1</float>
		<unit>custom</unit>
		<customunit>Bar</customunit>
                <limitmode>1</limitmode>
                <limitmaxwarning>1<2/limitmaxwarning>
                <limitmaxerror>1<2.3/limitmaxerror>
</result>

En este caso estamos mostrando en un canal un sensor de presión con un valor de 1,234 Bar de presión, que nos lanzará una alerta en caso de que la presión alcance los 2 Bar y un error en el caso de que la misma llegue a los 2.3 Bar.

En este caso, los sensores nos mostrarán un gráfico del tipo dashboard como el de la imagen

Dashboard_prtg

Dashboard_prtg

Si deseamos una presentación personalizada, debemos de incluir una clave denominada:

<valuelookup>

Que deberá de contener uno de los múltiples lookups que nos proporciona PRTG.
Como por ejemplo el de la imagen

prtg_lookup

prtg_lookup

Los Lookups se definen en formato XML con la extensión .ovl y han de estar en la carpeta de PRTG en la supcarpeta \lookups

Definiendo los valores en este archivo de Lookup, podemos cambiar la forma de representación.
Este tutorial no entra en la parte de lookups, dejando la misma para otro artículo.

Por último podemos mostrar en el sensor las diferencias entre un valor y los anteriores

<mode>difference</mode>

Conclusión: PRTG XML, permite monitorizar prácticamente cualquier dispositivo conectado a una red, siempre y cuando podamos programar la lógica correspondiente. De esta forma podemos obtener métricas y alarmas de dispositivos muy dispares, como elementos IoT (Aunque, para los estándar, PRTG dispone de un sensor específico que usa el protocolo MQTT que es un estándar para muchos dispositivos IoT)