Script monitorización de PostgreSQL

0
620

En esta entrada vamos a desarrollar un simple pero efectivo script para monitorizar la conexión a nuestra base de datos de PostgreSQL server.

Utilizaremos sSmtp en caso de detectar un error de comunicación, este nos enviará un email. Instalamos la aplicación:

apt-get install ssmtp

Una vez instalado vamos editamos el archivo de configuración en /etc/ssmtp/ssmtp.conf

Al final del archivo añadimos el siguiente texto, en este caso se utilizará una cuenta gmail con el «secure app» activado para poder utilizar la cuenta desde aplicaciones:

[email protected]
mailhub=smtp.gmail.com:587
hostname=el_hostname_de_tu_equipo
UseSTARTTLS=YES
AuthUser=tucuentadecorreo
AuthPass=tupassword
FromLineOverride=YES

En el siguiente archivo /etc/ssmtp/revaliases, añadiremos el usuario local que tendrá permiso para enviar correos y el email de dominio con el que los enviará, añadiré los dos usuarios tanto el root como el normal:

root:[email protected]
victor:[email protected]

El siguiente paso será crear el correo que enviaremos, creamos el siguiente archivo en /var/log/postgresql/alert.msg

touch /var/log/postgresql/alert.msg

Y lo rellenamos con el siguiente texto ( o el que quieras ):

From: Database Reporter
Subject: :::::: DATABASE CONNECTION DOWN  ::::::

ATTENTION YOUR DATABASE IS NOT ACCEPTING CONNECTIONS

Por último, lo único que queda es crear el script y darle permisos de ejecución:

touch reporter

chmod 755 reporter

#!/bin/bash
touch /var/log/postgresql/monitor_log.log
db=nuestra_base_de_datos
port=5432
accept=0
echo
pg_isready -d "$db" -p "$port" --quiet
if [ "$?" -eq "$accept" ]
then
  date >> /var/log/postgresql/monitor_log.log && echo "The database "$db":"$port" is accepting connections" >>  /var/log/postgresql/monitor_log.log
else
  ssmtp [email protected],[email protected] < alert.msg && date >> /var/log/postgresql/monitor_log.log && echo "The database "$db":"$port" IS NOT ACCEPTING CONNECTIONS, SENDING EMAIL" >>  /var/log/postgresql/monitor_log.log
fi

Expliquemos que hace exactamente el script escrito arriba, Primeramente inicializa el fichero monitor_log.log. la variable accept es igual a 1, por qué motivo?. Siguiendo la documentación oficial de postgresql relacionada con pg_isready, la puedes leer aquí, como podemos ver existen las siguientes relaciones en relación al comando $?

0 sería igual a = servidor accepta conexiones

1 sería igual a = servidor rechaza conexiones

2 sería igual a = el servidor no da respuesta

Cabe destacar que la variable «$?» corresponde a una variable de sistema la cual nos muestra mediante un valor el resultado numérico del último comando ejecutado, por norma general 0 suele ser un estado correcto y 1, 2 o 3 incorrecto.

En nuestro caso comparamos si el resultado de $? es igual a accept, o lo que es lo mismo 0. En caso de ser afirmativo añadiría al fichero de log la fecha de comprobación y un Status OK. Si esta comparación es distinta a 0 significará que nuestro servidor o no responde o no está aceptado conexiones a la base de datos por lo que nos enviará un email de alerta a las direcciones indicadas.

Recuerda que si ejecutamos el script desde un usuario «plano» tendremos que añadir la ruta completa hacía el ssmtp, en este caso /usr/sbin/ssmtp [email protected],[email protected] < alert.msg

En la siguiente entrada podrás ver un script similar al encontrado aquí para realizar un backup en linux.

¡Hasta la próxima!

Dejar respuesta

Please enter your comment!
Please enter your name here