17 de set. 2009

LOGS EN LINUX

http://www.estrellateyarde.es/so/logs-en-linux


Qué es el sistema de logs

El sistema de logs de Linux (log = registro), es un mecanismo estándar que se encarga de recoger los mensajes generados por los programas, aplicaciones y demonios y enviarlos a un destino predefinido. En cada mensaje consta la fuente (el programa que generó el mensaje), la prioridad (nivel de importancia del mensaje), la fecha y la hora.

Hay varios niveles de prioridad de los mensajes (de menos a más prioritario: debug, info, notice, warning, warn, err, error, crit, alert, emerg y panic) y varios tipos de mensajes (auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp y local0-local7).
Cómo funciona el sistema de logs

* El sistema de logs arranca con el script /etc/init.d/sysklogd, y tiene dos demonios:
o syslogd: gestiona los logs del sistema. Distribuye los mensajes a archivos, tuberías, destinos remotos, terminales o usuarios, usando las indicaciones especificadas en su archivo de configuración /etc/syslog.conf, donde se indica qué se loguea y a dónde se envían estos logs.
o klogd: se encarga de los logs del kernel. Lo normal es que klogd envíe sus mensajes a syslogd pero no siempre es así, sobre todo en los eventos de alta prioridad, que salen directamente por pantalla.
* Los logs se guardan en archivos ubicados en el directorio /var/log, aunque muchos programas manejan sus propios logs y los guardan en /var/log/. Además, es posible especificar múltiples destinos para un mismo mensaje. Algunos de los log más importantes son:
o /var/log/messages: aquí encontraremos los logs que llegan con prioridad info (información), notice (notificación) o warn (aviso).
o /var/log/kern.log: aquí se almacenan los logs del kernel, generados por klogd.
o /var/log/auth.log: en este log se registran los login en el sistema, las veces que hacemos su, etc. Los intentos fallidos se registran en líneas con información del tipo invalid password o authentication failure.
o /var/log/dmesg: en este archivo se almacena la información que genera el kernel durante el arranque del sistema. Podemos ver su contenido con el comando dmesg:

$ dmesg

* Los archivos de log crecen y con el tiempo se pueden volver muy extensos, pero no tenemos que preocuparnos porque en /etc/cron.daily (tareas que se ejecutan cada día) está el script /etc/cron.daily/logrotate, (cuyo archivo de configuración es /etc/logrotate.conf), que se encarga de comprimirlos y aplicar una rotación de archivos, añadiéndoles la extensión .1.gz, .2.gz, etc., volviendo a crear uno vacío (cuanto mayor sea el número más antiguo será el log).

Monitorizar los logs

* Es muy habitual monitorizar en una consola el archivo /var/log/messages:

$ tail -f /var/log/messages

* En el entorno gráfico hay varias aplicaciones para monitorizar logs, pero la mejor es KSystemLog (paquete ksystemlog).

KSystemLog

Otras opciones son:
o GNOME-System-Log (paquete gnome-utils): monitor de logs de GNOME.
o Xlogmaster (paquete xlogmaster): monitor de logs del GNU.
o Xwatch (paquete xwatch): monitor de logs para las X.
* Muchas veces los logs no se miran, por lo que es buena idea configurar el sistema para enviar todos los logs a un archivo (además del habitual) y visualizarlo en un terminal, para así poder ver en tiempo real todo lo que pasa en nuestra máquina. Esto nos permitirá aprender más sobre nuestro sistema y cómo funciona, y también detectar cualquier anomalía o error que de otra manera pasarían desapercibidos. Para ello:
1. creamos el archivo vacío /var/log/all.log:

# touch /var/log/all.log

2. añadimos al archivo /etc/syslog.conf la línea:

*.* /var/log/all.log

3. volvemos a cargar la configuración de sysklogd:

# /etc/init.d/sysklogd reload

4. por último, abrimos una consola y ejecutamos el comando:

$ tail -f /var/log/all.log

Scripts que generan logs

El comando logger permite enviar eventos al demonio syslogd, por lo que se utiliza en scripts para registrar mensajes vía sysklogd. Por ejemplo, si hacemos:

# logger -t mi_programa -f /var/log/messages "Mensaje ejemplo"

veremos que se ha añadido a /var/log/messages la línea:

May 14 23:10:13 pc450 mi_programa: Mensaje ejemplo