12 de Enero, 2005

Ordenando un poco los logs

Estaremos de acuerdo que syslogd(8) es una herramienta muy importante en el mantenimiento de cualquier sistema.

Bueno, en realidad la miga está en syslog(3), pero eso ya lo tiene en cuenta el desarrollador de la aplicación que estamos usando. A nosotros lo que nos interesa es manejar esos mensajes que llegan a través del logger del sistema, y cómo nos los encontremos es muy importante.

Si un log es un registro, el logger es el encargado de 'registrar' en dicho registro los mensajes. Y es nuestro syslogd el logger que lee los mensajes que le llegan mediante las funciones de registro, y luego las procesa como le indiquemos.

Tampoco quiero entrar a explicar mucho la infraestructura del registro, aunque algunos términos sí son esenciales para organizar los logs.

Todo mensaje lleva tres elementos asociados: identidad, categoría y prioridad. En inglés se refieren a ident, facility y priority, y he elegido 'categoría' intentando hacer más comprensible lo de 'facilidad'. Veamos qué es cada cosa y puede que eso aclare el significado.

La identidad es quien envía el mensaje. Suele ser fácil identificar a un programa concreto, ya que se acostumbra emplear el mismo nombre que tiene el ejecutable. Sino es así, probablemente aparecerá indicado en la documentación.

La categorías son:

AUTH, AUTHPRIV, CRON, DAEMON, FTP, KERN, LPR, MAIL, NEWS, SYSLOG, USER, UUCP, LOCAL0, LOCAL1, ... LOCAL7

Estas son las categorías en OpenBSD. Desconozco si son estándar o qué. Desde el punto de vista del administrador del sistema no tiene mayor importancia. El programa que emplee el logger nos debe indicar que categoría de registro emplea (algunas son bastante obvias).

Las prioridades son:

EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG

Las prioridades están listadas de más alto a más bajo nivel, y permiten clasificar los mensajes según su relevancia.

Con esto ya podemos empezar a trabajar. Por defecto syslogd guarda la mayoría de los mensajes en /var/log/messages (lo cual es una guarrería ;)), aunque para asegurarnos de esto habrá que consultar /etc/syslog.conf. El syslog.conf(5) de OpenBSD está bastante apañado, y la página del manual es muy explicativa, con abundantes ejemplos.

Básicamente se sigue un esquema selector / acción, donde el selector especifica la categoría y las prioridades, y la acción indica qué hacer con los mesajes que se ajusten al criterio del selector.

En el syslog.conf de nuestro sistema veremos suficientes ejemplos, aunque igual no el más interesante: emplear una marca de identidad.

Supongamos que quiero hacer un seguimiento de los mensajes de mi pequeño milter.

Como indico en la documentación, se emplea la categoría DAEMON (lógico, ¿no?), con las prioridades ERR, NOTICE e INFO. Pero, aunque la prioridad INFO de DAEMON ya la guardo en /var/log/daemon (así viene por defecto en OpenBSD), y más o menos es manejable (poco, porque el popa3d también usa ese fichero y es bastante verbose :P), el resto de mensajes se pierden un poco en ficheros de registro más generales.

Así que vamos a indicarle al logger que filtre en la identidad bogom los pares categoría / prioridad que nos interesan y los ponga en un fichero aparte:

!bogom
daemon.err;daemon.notice;daemon.info		/var/log/bogom.log
daemon.err					/var/log/bogom.err

La sintaxis es sencilla. La primera linea es una marca que indica la identidad, y las siguientes son los esquemas selector / acción, hasta encontrar otra marca de identidad, o la marca especial !*, o que se acabe el fichero. En el ejemplo he mandado copia de los errores a un fichero distinto.

Además, si vemos que la aplicación genera demasiados mensajes, podemos hacer que se guarde la información en un fichero, y además solo en ese, empleando dos veces la exclamación en lugar de una al poner la marca. Por ejemplo, el escandaloso popa3d:

!!popa3d
*.*						/var/log/popa3d
!*

Con esto para la identidad popa3d, cualquier categoría en cualquier prioridad, irá a parar al fichero /var/log/popa3d; y gracias a que la marca emplea !!, la ejecución de la acción hace que no se evalúen más selectores.

Si ponemos esas tres lineas al principio del nuestro syslog.conf (la última es importante para indicar que hemos acabado con la marca de popa3d, si no hay una marca justo después), haremos que los mensajes solo se registren en el fichero indicado.

Vamos, no explico ni la mitad de la mitad, pero durante mucho tiempo he manejado los logs de algún que otro sistema sin saber mucho más que esto :D. Creo que es suficiente para ordenar un poco las cosas y facilitar el trabajo de administrar la máquina.

La verdad es que cuando toco un sistema descuidado en este aspecto, ¡me hago un lío tremendo!

Anotación por Juan J. Martínez.

Hay 3 comentarios

Gravatar

Interesante anotación, ¿quizás acompañada de una segunda parte que explique la rotación de logs?, lo dejo en el aire. Es algo muy importante en un sistema, tanto la organización de los mismos como una correcta política de rotación para no perder datos. Ultimamente, ahora que tengo rrdtool algo más controlado, me interesan mucho más los logs, sus formatos y sus rotaciones :P.

por r0sk, en 2005-01-13 00:47:58

Gravatar

Muchas gracias por las explicaciones :)

Se agradece el esfuerzo.

por Cek, en 2005-01-13 12:38:25

Gravatar

:)

por un visitante, en 2005-01-13 14:18:16

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.