Logs en Linux

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:
    • 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.
    • 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/<programa>. Además, es posible especificar múltiples destinos para un mismo mensaje. Algunos de los log más importantes son:
    • /var/log/messages: aquí encontraremos los logs que llegan con prioridad info (información), notice (notificación) o warn (aviso).
    • /var/log/kern.log: aquí se almacenan los logs del kernel, generados por klogd.
    • /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.
    • /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 en la consola

Para monitorizar los logs en la consola, utilizaremos el comando tail. Este comando muestra las últimas líneas de uno o más archivos de texto (por defecto las diez últimas), pero con la opción -f, en lugar de mostrar las últimas diez líneas y terminar, tail seguirá activo y conforme se añadan nuevas líneas al fichero las imprimirá, lo que es muy útil para monitorizar archivos.

Para monitorizar los logs en la consola, por ejemplo el archivo /var/log/messages, haremos lo siguiente:

$ tail -f /var/log/messages

Monitorizar los logs en el entorno gráfico

En el entorno gráfico hay varias aplicaciones para monitorizar logs:

  • KSystemLog (paquete ksystemlog): monitor de logs de KDE.

    KSystemLog

  • GNOME-System-Log (paquete gnome-utils): monitor de logs de GNOME.
  • Xlogmaster (paquete xlogmaster): monitor de logs del GNU.
  • Xwatch (paquete xwatch): monitor de logs para las X.

Cómo enviar todos los logs a un archivo

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 de los archivos habituales) 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/rsyslog.conf la línea:
    *.*       /var/log/all.log
  3. volvemos a cargar la configuración de rsysklogd:
    # /etc/init.d/rsysklogd reload
  4. añadimos al archivo /etc/logrotate.d/rsyslog la línea:
    /var/log/all.log
  5. 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

24 Comments:

  1. me parece muy buena la informacion aqui suministrada .
    gracias !!!

  2. Perfecto socio muy buenas tus enseñanzas, muchas gracias y por favor sigue escribiendo y enseñando a quienes no sabemos ;)

  3. Gracias por tu explicación. Ahora bien, como hago para que los warning no salgan por pantalla?

  4. Hola saludos, tengo instalado fedora core 10, donde puedo buscar el log de los
    comandos ejecutados desde consola,
    mil gracias

  5. El historial de comandos ejecutados queda guardado en el archivo:
    ~/.bash_history
    Más info en Historial de comandos ejecutados

  6. hola, saludos a todos, tengo un problema, con esto hago el comando logger -t syslog -f /var/log/messages “Mensaje ejemplo” para enviar un mensaje de prueba y no me registra nada, osea no me registra ningun log
    en el /var/log/messages. se le agredeceria de antemano la solucion

  7. Como puedo respladar los logs, no se como guardarlos en una dispositiv externo, memoria USB, disco dru externo etc…

    Gracias

  8. Buen tutorial, muy bien explicado y sin extenderte demasiado, eso es lo importante.

    saludos

  9. Hola:

    Lei la información y esta muy buena, pero tengo una duda, es acerca de que yo tengo instalado Fedora 10 en mi pc, y no encuentro el syslog.conf, acaso est ha sido reemplazado por el rsyslog.conf, de ser asi que paso con el auth.log y kern.log.

    Asumo que el auth.log fue reemplzado o esta dentro de /var/log/secure, ¿pero el kern.log como fue reemplzado?

    GRACIAS

  10. hola, buenaso la explicacion entendible y detallado
    todo ok.

  11. cómo creo redo01.log borrados
    Borre los archivos redo01.log redo02.log y redo03.log como hago para crearlos desde sql sin acudir a cargar el oracle, los puedo crear vacíos?
    Gracias

  12. cuantas semanas permanecen los log en el sistema?

  13. muy interesante tu post ..gracias por los contenidos me sirvio bastante ..
    saludos….

  14. Muchísimas gracias por el post, la verdad es que está muy bien explicado y me ha sido de mucha utilidad para preparar mi clase sobre esta materia.

  15. Buenas.
    Solo quiero puntualizar que a partir de Debian 5 se usa el demonio rsyslog (y no el dueto syslogd/klogd). Pero supongo que muchas otras distros aún estarán usando el sistema aquí descrito, así que muy buen post.
    Saludos.

  16. hola yo nesecitaba saber cual es el comando para ver los logs de arranque….

  17. Excelente explicación.
    Llegué a esta página buscando solución a un sitio que genera un log que no deja de crecer hasta ocupar Gigas de espacio, satura el espacio disponible en el servidor y el sitio se cae.
    ¿Hay algo que se pueda hacer?
    Ya que no tengo idea de este tema, ¿hay alguna recomendación que pueda hacer a los administradores del servidor?

    Gracias por cualquier ayuda.

  18. Hola hay varios niveles de prioridad de los mensajes, como veras cada uno va referido a un numero referido sabe alguien que significan los números que corresponde a cada log: nivel 1

  19. Yo creía tener el mismo problema con los logs en /var/log pues crecían demasiado rápido hasta ocupar Gigas, así que los eliminé. Pero ahora el disco se está volviendo a llenar y no sé por qué… Reviso la carpeta /var/logs y los logs ya no están, alguna idea de dónde podrán estar o xq está creciendo tan rápidamente el disco?

  20. Me ha sido muy útil esta página. Muchas gracias.

  21. Fabrizio Manzo

    hola quisiera ver si me pueden ayudar con un script que permita administrar los logs del sistema linux, es decir, los archivos de registro.

  22. Como puedo saber que es lo que esta haciendo cada usuario en el servidor, por ejemplo si estan copiando archivos, etc etc.
    Gracias

  23. Dónde o como se configuran log de creaciones, eliminaciones de carpetas o archivos

  24. hector Montoya

    Hola,

    Como puedo modificar la informacion que registra el log, agregar un campo o eliminar uno, ejemplo
    si el log me muestra
    hora fecha usuario , que me registre hora fecha usuario ip , no se si se entiende.

    gracias