Pandora: Documentation es: Monitorizacion web

From Pandora FMS Wiki
Jump to: navigation, search

Volver al Índice de Documentación Pandora FMS


1 Monitorización Web clásica

1.1 Introducción

En la versión EnterpriseVersió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).

1.2 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

1.3 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:

Gagita2.png

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.

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 
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 <http://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.

Template warning.png

En algunos casos de redirección de dominios los chequeos podrían no funcionar. Para solucionarlo tendrá que crear el módulo apuntando al dominio final.

 


1.4 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.

Info.png

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.

 


1.5 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
Goliat proxy conf.png

1.6 Obteniendo datos de una página web

Algunas veces la monitorización no consiste en comprobar si una Web específica está funcionando o cuánto tarda, sino que se debe obtener un valor en tiempo real, como por ejemplo el valor en bolsa de Google. Para esto, emplearemos un módulo Remote HTTP module to retrieve numeric data con la expresión regular o regex adecuada:

task_begin
get http://finance.google.com/finance/info?client=ig&q=NASDAQ%3aGOOG
get_content \d+\.\d+
task_end

Se obtiene algo similar a:

Google stock quote.png

También es posible especificar una expresión regular más compleja para recoger datos de respuestas HTTP más complejos con el token de configuración get_content_advanced:

task_begin
get http://finance.yahoo.com/q?s=GOOG
get_content_advanced <span id="yfs_l84_goog">([\d\.]+)</span>
task_end

Template warning.png

La parte de la expresión regular definida en get_content_advanced debe estar encerrada entre paréntesis.

 


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.

1.7 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.

Info.png

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

1.8 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.

1.9 Utilizando autenticación HTTP Simple

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

Conexion http.png

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

1.10 Monitorizacion 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&params=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.co/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:

APIwiki1.png

Para verse reflejado en Pandora FMS como:

APIwiki2.png

Template warning.png

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

 


Template warning.png

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

 


1.11 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&ltmpl=default&ltmplcache=2
cookie 1
resource 0
check_string Google
task_end


1.12 Opciones avanzadas

1.12.1 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

1.12.2 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

1.12.3 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.

2 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