Cómo programar el análisis del log de PostgreSQL y obtener un informe de resultados incremental con pgBadger

En sistemas de bases de datos vivas y activas se generan, afortunadamente, una gran cantidad de mensajes de log. Es la forma que tiene el servidor PostgreSQL para comunicarse con nosotros, y los DBAs deberíamos prestar atención a esos mensajes pues en ellos encontraremos información valiosa que nos permitirá tomar acción  y anticiparnos a los problemas.

Seguro que entiendes la necesidad de analizar con frecuencia el log del servidor igual que te imaginas que analizar miles y miles de líneas de log no es tarea fácil. Por suerte para nosotros existen herramientas como pgBadger que en pocos segundos es capaz de analizar logs verdaderamente grandes y genera un informe con el resultado de dicho análisis.

Ahora sí, analizar un informe es algo que nos llevará poco tiempo. Detectar los puntos débiles de nuestro servidor y corregirlos antes de que se conviertan en un problema que comprometa el servicio, es una tarea que podremos abordar diaria o semanalmente, sin demasiado esfuerzo.

Las principales ventajas de pgBadger son:

  • Es gratuito, distribuido bajo licencia PostgreSQL.
  • Es capaz de analizar ficheros de log grandes en pocos segundos.
  • Si los ficheros de log están comprimidos, podrán analizarse sin ser descomprimidos.
  • Detecta automáticamente el formato del log si el fichero es lo suficientemente grande, aunque siempre podremos usar la opción -f para indicarle el formato.
  • Está programado en Perl y las principales librerías y módulos que necesita están embebidos.
  • Genera un informe sencillo de entender, muy detallado y con gráficas.
  • Puede generar un informe exclusivamente de errores.
  • El informe es configurable gracias a las más de 90 opciones de configuración de que dispone.
  • Acepta cualquier formato en el parámetro log_line_prefix, siempre y cuando ésta incluya una marca de tiempo y un indicador de proceso.
  • Admite procesamiento paralelo.
  • Dispone de modo incremental.
  • Permite ejecución remota por lo que si administramos varios servidores PostgreSQL podemos centralizar el análisis de los logs.
  • Está bien mantenido y se actualiza constantemente en función de los cambios en las versiones de PostgreSQL.

Con pgBadger podemos obtener un informe a partir del análisis de uno o varios ficheros de log por lo que se podría programar un tarea en cron que, diariamente, analice las últimas 24 horas de mensajes de log. Pero hay una forma aún más útil de obtener informes de pgBadger y es haciendo uso de su modo incremental.

El modo incremental nos permite analizar el log cada hora de manera que el informe diario se va componiendo de forma incremental. Además, cada 7 días se generaría un informe acumulado semanal, y le podemos indicar la retención de informes en un número determinado de semanas.

Haciéndolo así no tenemos que esperar al día siguiente para analizar el log actual si no que siempre tendremos un informe actualizado sobre la actividad del servidor PostgreSQL con, como mucho, 1 hora de retraso.

A continuación voy a explicarte, paso a paso, cómo programar el análisis del log para disponer de un informe diario, que se vaya creando hora a hora, y su acumulado semanal con una retención de 12 semanas: 

Paso 1. Creamos un directorio donde alojaremos los informes incrementales:

mkdir /var/lib/postgresql/incremental_report 

Paso 2. Programamos un script pgbadger.sh:

#!/bin/bash
pgbadger -q -I -O /var/lib/postgresql/incremental_report -R 12 /var/log/postgresql/postgresql-12-main.log /var/log/postgresql/postgresql-12-main.log.1

Paso 3. Programamos el cron:

0 * * * * sh /var/lib/postgresql/pgbadger.sh

Así de sencillo.

Previamente habrás tenido que instalar pgBadger y realizar una configuración apropiada del log de PostgreSQL.

Si quieres conocer en profundidad esta herramienta, desde nivel 0 a Experto, 19 clases prácticas te esperan en el curso Administración PostgreSQL: pgBadger, el analizador de log.