Monitorización Web

Monitorización Web clásica

Introducción

En la versión Enterprise Versión Enterprise.es posible monitorizar una web utilizando el componente WEB Server (Goliat Server).

goliatlogo_2.jpg

Esta funcionalidad proviene de un antiguo proyecto del fundador de Pandora FMS: Goliat F.I.S.T. Fue un proyecto opensource para realizar auditorías de carga dinámicas sobre servicios web. Todavía se puede encontrar el código fuente (del año 2002); se dejó de mantener en junio de 2010.

En Pandora FMS funciona como un servidor independiente, similar al Servidor de Red, al Servidor WMI o al servidor de plugins remotos. Este sistema opera bajo el principio de transacción web, donde cada transacción completa contra una o varias páginas WEB está definida por uno o más pasos consecutivos, que deben concluir satisfactoriamente para considerar que la transacción ha terminado con éxito. La ejecución de una transacción web reproduce fielmente el proceso de navegación completo, que puede incluir aspectos como autenticar en un formulario, hacer clic en una opción del menú o rellenar un formulario, verificando que cada paso devuelve una cadena de texto concreta.

Cualquier fallo en un punto del proceso daría como resultado un fallo en la comprobación. La transacción completa incluye la descarga de todos los recursos (gráficos, animaciones, etc.) que contempla la navegación real. Además de realizar comprobaciones de funcionamiento y de tiempo de respuesta, es posible extraer valores de las páginas web para luego procesarlos.

Goliat es capaz de monitorizar tanto HTTP como HTTPS de forma transparente para el usuario; soporta gestión de sesiones a través de cookies, paso de parámetros y, por supuesto, la descarga de los recursos asociados a cada página. Tiene limitaciones importantes como son la gestión dinámica de JavaScript en tiempo de ejecución. Para transacciones web más complejas, Pandora FMS dispone de otro componente mucho más potente (y complejo) llamado Monitorización WUX (Web User Experience).

Instalación y configuración

Para poder utilizar Goliat, primero debe activarlo en el servidor Enterprise de Pandora FMS:

webserver 1

En función del número de peticiones que quiera hacer puede que tenga que aumentar el número de hilos y el timeout por defecto:

 web_threads 1
 web_timeout 60

Existe un token de configuración avanzado que le permitirá cambiar el tipo de librería que Goliat utiliza por debajo, LWP o CURL. Por defecto se utiliza CURL, aunque se puede cambiar en cualquier momento:

web_engine curl


Pandora FMS cuenta con protección contra CSRF y puede ocurrir que los chequeos web, al ser depurados, obtenga este mensaje:
Cannot verify the origin of the request
Tenga en cuenta esta protección para considerar el uso de “Monitorización WUX”.

Creación de módulos web

Para monitorizar de forma remota una página web, una vez creado el agente pulse sobre la pestaña superior de los módulos (Modules). En ella, seleccione crear un nuevo módulo de servidor Web (Webserver module) y pulse el botón Create:

Una vez que se pulse el botón Create, se mostrará un formulario en el que se han de rellenar los campos necesarios para poder monitorizar una web.

goliat_types.jpg

Debe seleccionar el tipo de chequeo WEB:

  • Remote HTTP module to check latency: Obtiene el tiempo total que transcurre desde la primera petición hasta que se comprueba la última (en una prueba WEB existen una o varias peticiones intermedias que completan la transacción). Si en la definición del chequeo se ha definido que la transacción se realice más de una vez, se utilizará la media del tiempo de cada petición.
  • Remote HTTP module to check server response: Obtiene un 1 ( OK ) o un 0 ( CRITICAL ) como resultado de comprobar toda la transacción. Si existen varios intentos pero al menos uno de ellos falla, se considera que la prueba en su conjunto, también falla. Precisamente, el número de intentos se utiliza en ocasiones para evitar falsos positivos, para ello utilice el campo reintentos en campos avanzados.
  • Remote HTTP module to retrieve numeric data: Obtiene un valor numérico, parseando la respuesta HTTP utilizando una expresión regular para obtener ese valor.
  • Remote HTTP module to retrieve string data: Análogo al punto anterior pero con una cadena de texto.
  • Remote HTTP module to check server status code: Por medio de la herramienta curl debidamente habilitada con el token de configuración web_engine curl se puede retribuir las cabeceras HTTP.

Web checks: Este campo esencial define la comprobación WEB que se va a realizar. Esta se define en uno o más pasos, o peticiones simples. Esas peticiones simples se deben escribir en un formato especial en el campo Web checks. Las comprobaciones se inician con la etiqueta task_begin y finalizan con la etiqueta task_end.

Un ejemplo completo de transacción sencillo sería el siguiente:

 task_begin
 head https://apache.org/
 task_end

Luego de guardar se puede forzar la ejecución del Módulo y visualizar su resultado:

Otro ejemplo con más comandos:

 task_begin
 get https://apache.org/
 cookie 0
 resource 0
 check_string Apache Software Foundation
 task_end

En este ejemplo básico estamos comprobando si existe una cadena en una página web; para ello está la variable check_string. Esta variable no permite comprobar HTML en sí, solo busca subcadenas de texto. Estamos buscando “Apache Software Foundation” en la web <https://apache.org>. Si existe esa cadena de texto, el chequeo devolverá OK (si es de tipo Remote HTTP module to check server response).

Para asegurarse de que una cadena no existe en una página web, puede utilizar la variable check_not_string>

check_not_string Section 3

Los argumentos que toma la sintaxis de check_string no son cadenas de texto normales, son expresiones regulares. Es decir, si busca la cadena Pandora FMS (4.0) tendrá que buscarla con una expresión regular, por ejemplo: Pandora FMS \(4.0\). Esto le permite hacer búsquedas mucho más potentes, pero debe tener en cuenta que cualquier carácter que no sea una letra o un número tendrá que ser escapado con \.

Para la comprobación de formularios existen varias variables adicionales:

  • resource (1 ó 0): Descarga todos los recursos de la web (imágenes, vídeos, etc.).
  • cookie (1 ó 0): Mantiene una cookie, o una sesión abierta para comprobaciones posteriores.
  • variable_name : Nombre de una variable en un formulario.
  • variable_value: Valor de la variable anterior en el formulario.

Con estas variables se podrá enviar datos a formularios y comprobar que funcionan correctamente.

En algunos casos de redirección de dominios los chequeos podrían no funcionar. Una manera de solucionarlo es modificar el módulo apuntando al dominio final.

Para el caso anterior el comando curl tiene el parámetro:

-L

en su versión corta y

--location

en su versión larga, para cuando reciba redirecciones HTTP 3XX vuelva a ejecutar de nuevo contra el dominio redireccionado. Sin embargo la flexibilidad de Pandora FMS le permite hacer uso del botón de depurado.

Al momento de crear el Módulo se encuentra inactivo y podrá hacer uso de él luego de que haya hecho el primer chequeo, el cual usted puede forzar su ejecución para ganar tiempo.

Cuando modifique dicho Módulo, haga clic en el botón Debug y podrá entrar en modo de depuración para editar la consulta Query:

Bien puede ejecutar la consulta que tiene el módulo con el botón Execute query así como modificar y volver ejecutar con otros valores hasta que obtenga el resultado deseado.

Comprobar tiempo de carga de una web

Si queremos comprobar el tiempo de respuesta o latencia de una página web solo tenemos que seleccionar el tipo de módulo Remote HTTP module to check latency. Por ejemplo, si queremos conocer la latencia de la carga de la página web <https://pandorafms.com>.

 task_begin
 get https://pandorafms.com
 task_end

Podemos añadir los token de configuración resource 1 para que el tiempo de descarga que calcule sea descargando todos los recursos (JavaScript, CSS, imágenes, etc), calculando así un dato aproximado a la realidad.

El tiempo de descarga de la web no es el tiempo que tarda en visualizarse una web en un navegador, ya suele depender del tiempo de carga del JavaScript. Aunque Goliat lo descarga, no lo ejecuta.

Chequeos a través de un Proxy

Los chequeos web también soportan el uso de proxy. Para realizar su configuración debe añadir la URL del proxy en la casilla que se encuentra al pulsar en Advanced options:

Por ejemplo:

http://proxy.domain.com:8080

Si el proxy requiere autenticación, debe utilizar el siguiente esquema, donde my-user es el nombre de usuario y my_pwd la contraseña:

http://my-user:[email protected]:8080

Obteniendo datos de una página web

Algunas veces la monitorización no consiste en comprobar si una página web específica está funcionando o cuánto tarda, sino que se debe obtener un valor en tiempo real, como por ejemplo el número total de módulos registrados en el mismo servidor PFMS por medio de la API. Para este ejemplo se empleará un módulo denominado Remote HTTP module to retrieve numeric data (“Módulo HTTP remoto para recuperar datos numéricos”) con la expresión regular o regex adecuada:

task_begin
get http://127.0.0.1/pandora_console/include/api.php?apipass=1234&user=internal_API&pass=1234&op=get&op2=total_modules&id=0
get_content \d+
task_end

Se obtiene algo similar a:

También es posible especificar una expresión regular más compleja para recoger datos de respuestas HTML con el token de configuración get_content_advanced. En este ejemplo didáctico se obtiene el año en el pie de página de la documentación oficial de Pandora FMS (para almacenarlo se utiliza un tipo de dato de cadena Remote HTTP module to retrieve string data):

task_begin
get https://pandorafms.com/manual/
get_content_advanced \(c\) ([\d]+) Pandora FMS\(tm\) </span>
task_end

Nótese que se ha empleado el intervalo inverso: si se recibe una cadena de texto que no sea 2022 el módulo pasará a crítico.

  • La parte de la expresión regular definida en get_content_advanced debe estar encerrada entre paréntesis.
  • Si el texto a buscar contiene paréntesis, debe escapar los caracteres de por medio de la barra inversa \.

Para configurar los umbrales que dispararán los estados de advertencia o criticidad, utilice la configuración del módulo para comprobar que la cadena recibida coincide con el valor esperado.

Comprobación de formulario en una página web

Una comprobación de formulario es mucho más compleja que la simple comprobación de un texto en una página web. Este ejemplo utiliza la Consola Pandora FMS, inicia sesión y comprueba que, efectivamente, ha sido capaz de ello. Funciona verificando un texto en la sección de Workspace donde muestra los datos del propio usuario que ha iniciado sesión. Si se trata de una consola por defecto, el usuario admin contiene la descripción “Admin Pandora”.

Para poder realizar este tipo de comprobaciones se deben tener las credenciales necesarias. Además, es necesario ir a la página y obtener el código HTML para obtener los nombres de las variables, y luego es preciso tener conocimientos mínimos de HTML para introducir la consulta para Goliat.

El método práctico para diseñar una prueba transaccional WEB con varios pasos es probarlos uno por uno en modo de depuración de errores.

La Consola de ejemplo está en:

http://192.168.70.116/pandora_console/

Analizando su código HTML, se observa que las variables del formulario web de inicio de sesión son:

  • nick> nombre del usuario
  • pass> contraseña para el usuario

Se deberán usar las variables variable_name y variable_value conjuntas para poder validar el formulario.La Consola PFMS tiene, por defecto, los valores admin y pandora.

El primer paso es acceder al formulario, enviar el usuario y contraseña y autenticar (determinar el éxito de esa autenticación se realiza en un segundo paso).

 task_begin
 post http://192.168.70.116/pandora_console/index.php?
 login=1
 variable_name nick
 variable_value admin
 variable_name pass
 variable_value pandora
 cookie 1
 resource 1
 task_end

Se utiliza el token cookie 1 para mantener la persistencia de valores obtenidas en el paso anterior, de haber logrado una autenticación exitosa. A continuación se accede a la página de detalles del usuario para buscar el número de teléfono, que por defecto para el usuario “admin” es 555-555-555. Si lo podemos “ver” entonces indica que ha iniciado sesión correctamente en la Consola (note el uso del comando check_string):

 task_begin
 get http://192.168.70.116/pandora_console/index.php?
 sec=workspace&sec2=operation/users/user_edit
 cookie 1
 resource 1
 check_string 555-555-5555
 task_end

Para finalizar debemos desconectar de la Consola y buscar el mensaje de desconexión Logged out>

 task_begin
 get http://192.168.70.116/pandora_console/index.php? bye=bye
 cookie 1
 resource 1
 check_string Logged out
 task_end

Comprobación total del script:

goliat_full_sample.jpg

Comportamiento de las peticiones WEB

Los campos de las propiedades avanzadas son similares a los de otros tipos de módulos, aunque existen algunos campos diferentes y propios de los chequeos WEB:

Timeout

Tiempo de expiración durante la petición; si se supera este tiempo la petición de comprobación se descartará.

Agent browser id

Identificador de navegador web a utilizar, ya que determinadas páginas solo aceptan algunos navegadores web (para más información: https://www.zytrax.com/tech/web/browser_ids.htm).

Requests

Pandora FMS repetirá la comprobación el número de veces que se indique en este parámetro. Si una de las comprobaciones falla, la comprobación se dará como errónea. Dependiendo de la cantidad de comprobaciones en el módulo se obtendrá un número determinado de páginas; es decir, si el módulo consta de tres comprobaciones se descargarán tres páginas, y si en el campo Requests se ha establecido algún valor, entonces el número de descargas se multiplicará por este. Es importante tener esto en cuenta para calcular el tiempo total que tardará el módulo en completar las operaciones.

Retries

El número de veces que realiza un Request hasta conseguir un resultado exitoso. Ejemplos:

  • retries = 2 y Requests = 1: Si la primera prueba fallara reintentará una vez más, y si a la segunda funciona el chequeo es válido.
  • Retries = 1 y Requests = 2: Realiza dos chequeos, pero si cualquiera de los dos falla, resultará como chequeo fallido.

Utilizando autenticación HTTP Simple

Algunas páginas pueden requerir autenticación simple HTTP. Generalmente es utilizada como un rápido, un “saludo” de seguridad mínima que permite acceder a comprobaciones de seguridad más avanzadas (cifrado, persistencia de datos, etcétera).

Se puede configurar en las opciones avanzadas del chequeo (o directamente en la definición de la tarea WEB) con los siguientes token de configuración:

Check type

Tipo de chequeo con el servidor HTTP.

http auth (login)

Usuario http.

http auth (password)

Contraseña de usuario http.

Proxy auth realm

Nombre de la zona (realm) de autenticación.

Proxy auth (server)

Dominio web y su puerto.

Proxy URL

Dirección url del proxy.

Proxy auth (login)

Usuario de conexión del proxy.

Proxy auth (pass)

Contraseña de conexión al proxy.

Ejemplo completo:

 task_begin
 get http://artica.es/pandoraupdate4/ui/
 cookie 1
 resource 1
 check_string Pandora FMS Update Manager \(4.0\)
 http_auth_serverport artica.es:80
 http_auth_realm Private area
 http_auth_user admin
 http_auth_pass xxxx
 task_end

El uso de comillas en la contraseña para http_auth_pass no está soportado. Evite el uso de comillas simples '

Monitorización de webservices y APIs

Con Pandora FMS y Goliat se pueden monitorizar API de tipo REST, exceptuando tipos de API más complejas basadas en protocolos como SOAP o XMLRPC.

Para comprobar una API con este tipo de llamada, por ejemplo, que devuelve un número entero mayor o igual a cero si funciona y ningún caracter si falla (usando credenciales my_user y my_pass):

task_begin
get http://artica.es/integria/include/api.php?user=my_user&pass=my_pass&op=get_stats¶ms=opened,,1
check_string \n[0-9]+
task_end

Devuelve una respuesta similar a:

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: close
Date: Mon, 13 May 2013 15:39:27 GMT
Pragma: no-cache
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Client-Date: Mon, 13 May 2013 15:39:27 GMT
Client-Peer: 64.90.57.215:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
Set-Cookie: a81d4c5e530ad73e256b7729246d3d2c=pcasWqI6pZzT2x2AuWo602; path=/

0

Mediante la comprobación de la salida con una expresión regular, puede verificar que está todo correcto. Para respuestas más complejas, debe usar otras expresiones regulares acordes a cada caso.

Algunos ejemplos más:

 task_begin
 get https://swapi.dev/api/planets/1/
 get_content Tatooine
 task_end

En este caso el módulo creado para mostrar los datos debe estar establecido al tipo Remote HTTP module to retrieve string data (web_content_string).

 task_begin
 get https://pokeapi.co/api/v2/pokemon/ditto/
 get_content imposter
 task_end

Al igual que con el módulo anterior, el tipo de datos deberá ser 'Remote HTTP module to retrieve string data (web_content_string)' para que funcione correctamente.

Se pueden realizar también llamadas con get_content_advanced:

task_begin
get https://api.hillbillysoftware.com/Awards/ByYear/1990
get_content_advanced "Nominee":"([A-Za-z ]+)","Year":"1990"
task_end

Resultado:

Para verse reflejado en Pandora FMS como:

Es importante definir correctamente los grupos de captura entre paréntesis para que la llamada se realice de manera adecuada.

Al hacer llamadas a la API es importante tener en cuenta que la API destino debe tener permisos para poder ser consultada.

Monitorización https

Goliat puede comprobar tanto http como https. Para poder hacer comprobaciones sobre web segura basta con especificar este protocolo en la URL, por ejemplo:

task_begin
get https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=zpwhtygjntrz&ss=1&scc=1<mpl=default<mplcache=2
cookie 1
resource 0
check_string Google
task_end

Opciones avanzadas

Modificando cabeceras HTTP

Con la opción header se pueden modificar campos de la cabecera HTTP o crear campos personalizados. Por ejemplo, para cambiar el campo Host de la cabecera HTTP:

 task_begin
 get http://192.168.1.5/index.php
 header Host 192.168.1.1
 task_end

Depurando chequeos web

Se pueden depurar los chequeos web añadiendo la opción debug <log_file>. Se crearán dos ficheros log_file.req y log_file.res con los contenidos de la petición HTTP y la respuesta, respectivamente. Por ejemplo:

 task_begin
 get http://192.168.1.5/index.php
 debug /tmp/request.log
 task_end

Utilizando Curl en vez de LWP

La librería LWP puede dar problemas cuando muchos hilos llevan a cabo peticiones HTTPS (debido a una limitación de OpenSSL). La alternativa es utilizar la herramienta curl. Para solucionar este problema, edite el fichero /etc/pandora/pandora_server.conf y añada la siguiente línea:

web_engine curl

Reinicie el servidor de Pandora FMS, y el binario de Curl se utilizará para llevar a cabo las comprobaciones web en vez de LWP.

Monitorización transaccional avanzada

Además de la funcionalidad que ofrece Goliat, existen otras maneras de realizar una monitorización transaccional web.

  • De manera distribuida (UX), desplegada en modo de “agente” en sistemas diferentes al servidor, incluso en redes no accessibles.
  • De manera centralizada (WUX).

Volver al Índice de Documentación Pandora FMS