shcm – Bash simple HTTP check monitor

Con unas pocas líneas en bash + curl + mailx podemos hacernos un script que nos permita comprobar si un listado de urls dejan de dar un 200.

Lo ideal es usar una herramienta de monitoring buena. Naemon por ejemplo. Pero si es poca cosa lo que queremos comprobar con un sencillo script en bash podemos y además nos notificará por correo.

Insisto en que para monitorizar bien se necesita mucho más. No sirve con comprobar si la web nos da un 200. Se tiene que comprobar integridad del contenido y muchas más cosas.

Por ejemplo comprobar memoria, load average cpu, número de procesos, procesos zombies, espacio libre en particiones, inodos, diferentes puertos, algunos procesos, …

NO es la finalidad de un script así sustituir una buena herramienta de monitoring. Más que nada porque se precisan logs, se precisan gráficas, se precisan muchos tipos de sondas utilizando diferentes protocolos para ello (SNMP por ejemplo).

Pero si por ejemplo simplemente queremos en un momento dado comprobar si x urls andan dando un 200 pues se añaden como una lista en un archivo (una url por línea) y se ejecuta el script.

¿Para que puede servir esto? Pues por ejemplo para una intervención. Comprobar tras la intervención que todas las maquinas con sus servicios web han levantado sin tener que ir una a una mirándola desde un navegador.

Aparte también sirve para modificarse y que notifique de otros checks diferentes. Pongo el código:

#!/bin/bash
# apt install heirloom-mailx curl

list="/home/usuario/simplehttpcheckmonitor/list.txt"
userAgent="shcm"
fromEmail="no-replytest@undominio.com"
smtpServer="smtp.undominio.com"
smtpPort=587
smtpUser="usuario@undominio.com"
smtpPasswd="lapassword"
smtpTo="aquienlelleganotificacion@undominio.com"

while read -r url ; do
	date=$(date)
	status=$(curl -A $userAgent -s -o /dev/null -I -w "%{http_code}" $url)
	if [ "$status" != 200 ]; then
		echo "$date - $status - $url" | heirloom-mailx -s "[$status] $url" -S smtp-use-starttls -S ssl-verify=ignore -S smtp-auth=login -S smtp=smtp://$smtpServer:$smtpPort -S from="$fromEmail" -S smtp-auth-user="$smtpUser" -S smtp-auth-password="$smtpPasswd" $smtpTo
	fi
	echo "$status $url"
	sleep 10
done < $list

 

En vez de usar el mailx clásico se utiliza heirloom-mailx para poder mandar el correo mediante smtp. mailx posiblemente no aceptará -S

La variable list se ha de modificar para indicar la ruta en la que tengamos un archivo llamado list.txt con un contenido como este:

https://mierda.tv
http://mierda.tv

La primera url dará un 200, la segunda dará un 301. La idea es meter urls que respondan con un 200 normalmente para poder hacer la comprobación.

Fallos de este script a groso modo

A curl es bueno indicarle un timeout.
Es interesante añadirle un contador para que no notifique inmediatamente si no obtiene un 200. Es mejor hacer la comprobación durante varios minutos y luego notificar para no generar mucho ruido en el correo.

Ejecutarlo manualmente o no

Se puede configurar, probarlo y luego darle permisos de ejecución y añadirlo a cron para que se ejecute cada x tiempo.

Resumen

Repito una vez más. No es comparable a una herramienta de monitoring, es un sencillo script en bash simplemente.
No obstante como estructura puede servir para muchos tipos de comprobaciones.

Saludos cordiales.

 

¿Le ha gustado el contenido?

Si le ha gustado y le ha sido de utilidad puede donar aquí https://paypal.me/mierdatv .  
También puede escribir un comentario si lo considera oportuno.  
 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *