Pandora FMS es un software de monitorización muy completo que estoy utilizando en sustitución de los icinga/nagios que venía utilizando hasta ahora. Una característica común a pandora fms y nagios es la capacidad de poder añadir tus propios plugins al sistema de monitorización lo que da una enorme libertad para poder hacer prácticamente cualquier cosa.
Uno de los plugins que he preparado sirve para poder medir con comodidad la velocidad de respuesta de un sitio web. Los parámetros que mide son:
- Time to First Byte
- Tiempo total de descarga
- Tiempo de pretransferencia
- Código http de respuesta
- Tamaño total de la página
Algunos de estos parámetros son muy útiles para poder ver desviaciones o comportamientos extraños que asociados a su alarma correspondiente nos pueden avisar con tiempo para evitar caídas o incluso ataques.
Hay algunos parámetros que pueden extrañar como el código http de respuesta o el tamaño de la página, los he añadido para poder tener avisos de casos como errores 504 o 500 que de otra forma son difíciles de detectar y el tamaño de la página para monitorizar actualizaciones en ciertas páginas que no cuentan con herramientas como rss o similares para avisarnos de los cambios.
La instalación es muy sencilla y sólo se ha de copiar al directorio de los plugins del servidor donde tengamos pandora fms funcionando, asignarle permisos de ejecución y asegurarnos de que tenemos curl instalado (apt-get install curl).
En pandora debemos de ir a Gestionar servidores -> gestionar complementos y pulsar en Añadir y rellenar todos lo datos del plugin.
Ahora tenemos que añadir a un agente nuevo o a uno ya creado un nuevo módulo que utilice este plugin. El tipo de módulo debe de ser de Servidor de complementos.
Introducimos todos los datos necesarios, en este caso para medir el valor «Time to first byte».
O por ejemplo para comprobar si se produce algún error 500 en una página
Este plugin está desarrollado en bash por lo que puede usarse desde la línea de comandos directamente.
Aquí os dejo el código fuente:
#!/bin/bash
# Page Speed Plugin Pandora FMS Server plugin
# (c) Manuel Angel Fernandez 2012
function help {
echo -e "Page Speed Plugin for Pandora FMS Plugin server. http://pandorafms.com"
echo " "
echo "This plugin is used to check page speed and Time to First Time"
echo " "
echo -e "Syntax:"
echo -e "\t\t-f Time to First Byte"
echo -e "\t\t-t Total time"
echo -e "\t\t-p Pretransfer time"
echo -e "\t\t-c Http status code"
echo -e "\t\t-s Size download(Kb)"
echo -e "\t\t-a All parameters csv format"
echo -e "\t\t-h This help"
echo -e "Samples:"
echo " ./page_speed -f www.yahoo.com"
echo " "
echo "by Manuel Angel Fernandez - manuel at rastreador.com.es"
echo " "
exit
}
if [ $# -eq 0 ]
then
help
fi
# Main parsing code
while getopts ":h:f:t:p:c::s:a:" optname
do
case "$optname" in
"h")
help
;;
"f")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_starttransfer}\n" "$OPTARG?`date +%s`"
exit 0
;;
"t")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_total}\n" "$OPTARG?`date +%s`"
exit 0
;;
"p")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_pretransfer}\n" "$OPTARG?`date +%s`"
exit 0
;;
"c")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{http_code}\n" "$OPTARG?`date +%s`"
exit 0
;;
"s")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{size_download}\n" "$OPTARG?`date +%s`"
exit 0
;;
"a")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "Timetofirstbyte\tTotal-Time\tPretransfer-time\tHttp-code\tdownload-size\n%{time_starttransfer}\t%{time_total}\t%{time_pretransfer}\t%{http_code}\t%{size_download}\n" "$OPTARG?`date +%s`"
exit 0
;;
?)
help
;;
default)
help
;;
esac
done |
#!/bin/bash
# Page Speed Plugin Pandora FMS Server plugin
# (c) Manuel Angel Fernandez 2012
function help {
echo -e "Page Speed Plugin for Pandora FMS Plugin server. http://pandorafms.com"
echo " "
echo "This plugin is used to check page speed and Time to First Time"
echo " "
echo -e "Syntax:"
echo -e "\t\t-f Time to First Byte"
echo -e "\t\t-t Total time"
echo -e "\t\t-p Pretransfer time"
echo -e "\t\t-c Http status code"
echo -e "\t\t-s Size download(Kb)"
echo -e "\t\t-a All parameters csv format"
echo -e "\t\t-h This help"
echo -e "Samples:"
echo " ./page_speed -f www.yahoo.com"
echo " "
echo "by Manuel Angel Fernandez - manuel at rastreador.com.es"
echo " "
exit
}
if [ $# -eq 0 ]
then
help
fi
# Main parsing code
while getopts ":h:f:t:p:c::s:a:" optname
do
case "$optname" in
"h")
help
;;
"f")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_starttransfer}\n" "$OPTARG?`date +%s`"
exit 0
;;
"t")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_total}\n" "$OPTARG?`date +%s`"
exit 0
;;
"p")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{time_pretransfer}\n" "$OPTARG?`date +%s`"
exit 0
;;
"c")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{http_code}\n" "$OPTARG?`date +%s`"
exit 0
;;
"s")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "%{size_download}\n" "$OPTARG?`date +%s`"
exit 0
;;
"a")
curl -so /dev/null -H "Pragma: no-cache" -H "Cache-Control: no-cache" -w "Timetofirstbyte\tTotal-Time\tPretransfer-time\tHttp-code\tdownload-size\n%{time_starttransfer}\t%{time_total}\t%{time_pretransfer}\t%{http_code}\t%{size_download}\n" "$OPTARG?`date +%s`"
exit 0
;;
?)
help
;;
default)
help
;;
esac
done
Espero que os sea de utilidad.