Contents

Monitorizar logs en GNU/Linux con Logwatch

Una tarea fundamental cuando administramos una máquina GNU/Linux, en especial servidores, es la monitorización de logs. Esta tarea puede resultar especialmente engorrosa cuando tenemos que administrar muchos servidores, o bien, cuando no tenemos tiempo para dedicarle porque, por ejemplo, esta no es nuestra actividad laboral, sino un hobby. Para hacer esta tarea un poco menos pesada podemos valernos de herramientas como logwatch, con la que obtendremos una visión global de lo que ha estado pasando en nuestro sistema durante un periodo de tiempo determinado.

Instalar y configurar Logwatch para monitorizar logs en GNU/Linux

Nota: Los pasos indicados en las siguientes líneas están testeados en Ubuntu Server 14.04, no obstante, no debería representar un problema adaptarlo a cualquier otra distribución.

El primer paso, como no puede ser otro, será instalar logwatch en nuestro sistema:

1
$ sudo apt-get update && sudo apt-get install logwatch

Una vez instalado ya podemos invocar el programa sin parámetros para que nos muestre un reporte con las opciones por defecto:

1
$ sudo logwatch

Veremos que el programa nos escupirá una gran cantidad de información (en función de la cantidad de servicios que tengamos escuchando y de la cantidad de logs que estemos generando) en texto plano por la salida estándar. Los parámetros por defecto podemos consultarlos en /usr/share/logwatch/default.conf/logwatch.conf. Podemos modificar este comportamiento por defecto de dos maneras:

  • Creando y modificando el archivo /etc/logwatch/conf/logwatch.conf añadiendo los parámetros deseados, que pueden ser consultados en el archivo /usr/share/logwatch/default.conf/logwatch.conf.
  • Invocando el programa con los parámetros que deseemos, que pueden ser consultados abriendo la página man correspondiente al programa.

Las opciones que probablemente querremos modificar a nuestro gusto serán las siguientes:

  • Output: Aquí podremos indicar por donde queremos “sacar” el reporte. Las opciones son bastante autoexplicativas: stdout | mail | file.
  • Format: El formato del texto mostrado en el reporte. Estos pueden ser: text | html.
  • Mailto: Correo al que enviar el reporte.
  • Range: Rango de tiempo que se analizará en los logs (all | today | yesterday).
  • Detail: Cantidad de detalle del report, siendo posibles: Low (o 0) | Med (o 5) | High (o 10).
  • Service: La opción service corresponde a una serie de scripts en perl que trae la aplicación incorporada. Podemos listarlos todos consultando el contenido de la carpeta /usr/share/logwatch/scripts/services/, y si sabemos de perl y queremos modificar alguno de los scripts: ¡evidentemente esto es GNU/Linux y puedes hacerlo sin problemas!.

A partir de aquí, como hemos comentado anteriormente, tenemos dos opciones: invocar el programa con los parámetros que deseemos, o bien, crear y modificar el archivo logwatch.conf.

En mi caso, prefiero invocar el programa con los parámetros deseados, puesto que si queremos tener distintos tipos de reporte no podremos basarnos en un solo archivo de configuración.

Así, en mi caso, una posible forma de invocar el programa sería esta:

1
$ sudo logwatch --detail high --range yesterday --service sshd --service fail2ban --format html --output mail --mailto micorreo@midominio.com

Lo que me enviará un correo a mi correo personal (gracias a la configuración implementada en la entrada: “Enviar correos desde la línea de comandos con sSMTP y Gmail”) con un reporte en formato html como este:

/wp-content/uploads/2014/11/logwatchreport.png
Report HTML de logwatch

Puesto que la gracia de esto está en que el proceso se ejecute automáticamente y gastemos el menor tiempo posible en esta tarea, nos conviene programar la ejecución del programa con cron al que podemos añadir esta línea:

1
00 08 * * * logwatch --detail high --range yesterday --service sshd --service fail2ban --format html --output mail --mailto micorreo@midominio.com

Y con este sencillo procedimiento nos acabamos de ahorrar mucho tiempo haciendo consultas a los archivos de log, y de paso, evitaremos que por falta de tiempo dejemos de consultar los mismos, puesto que consultar el reporte de logwatch no nos llevará más que unos minutos en los que enseguida veremos si hay que alarmarse por algo.

Report duplicado en logwatch

Es posible que después de configurar vuestra tarea programada veais que al día llegan dos correos con el report de logwatch. Esto se debe a que logwatch crea el siguiente script: /etc/cron.daily/00logwatch. Al ser ubicado ahí veremos que a diario se ejecutará junto al resto de scripts de la ubicación. Este script contiene una línea como esta:

1
/usr/sbin/logwatch --output mail

Que nos enviará un reporte diario como el configurado unas líneas más arriba, con la excepción de que éste lo hará con los parámetros por defecto. Aquí tenemos dos opciones: o eliminar dicho script y dejar nuestra tarea programada, o bien, adaptar este script a nuestras necesidades y dejar que se ejecute junto al resto de tareas diarias.