syslog: Conceptos y configuraciones en GNU/Linux

Publicado por Diego Córdoba en

Hoy vamos a aprender cómo funciona syslog en los sistemas GNU/Linux, y cómo se configura un daemon de log común en las distribuciones, como lo es rsyslog.

En sistemas GNU/Linux, siempre que instalamos un servicio, lo configuramos y lo echamos a andar, necesitamos saber si se ejecutó bien, si todo va sobre rieles a la hora de proveer el servicio a los clientes, etc.syslog
Toda esta información podemos obtenerla y monitorearla gracias a que los servicios generalmente generan eventos que son capturados por alguna implementación del protocolo syslog.
Por lo tanto, podremos configurar la forma en que los eventos son administrados por el syslog, y saber y administrar los archivos de registros de logs.

El protocolo y los mensajes

syslog es un protocolo de mensajería de eventos, y existen distintas implementaciones de software para darle vida. syslog-ng y rsyslog son dos muy conocidas. Hoy veremos la configuración de rsyslog, primeramente porque es la implementación que está disponible en el Debian por defecto.
Los mensajes se componen de dividen en tres partes:

  • priority: que a su vez se divide en numero de recurso y severidad del mensaje. Recursos válidos son por ejemplo, kernel, daemon, clock, ftp, mail, authentication, etc (no entraremos en detalles particulares, solo a modo práctico). Las severidades van desde 0 como una severidad alta, o emerg (de emergency) hasta 7 como severidad baja, o mensaje de depuración (debug), pasando por alert, critic, error, warning, notice e info.
  • header: un header con información de estampa de tiempo en la que se generó el evento, equipo que lo generó, con su hostname o ip.
  • text: texto propio del mensaje, que describe a nivel de usuario/administrador, el motivo del evento.

Rsyslog y su configuración

La implementación que veremos es rsyslog, que viene por default en Debian, y que puede instalarse desde la mayoría de los gestores de repositorios en las demás distribuciones.
El archivo de configuración por defecto es /etc/rsyslog.conf

En este archivo podremos establecer entre otros parámetros, las reglas de logs según la siguiente estructura por línea:

servicio.prioridad    accion

Donde servicio es alguno de los mencionados más arriba, prioridad es una severidad del mensaje, y acción representa qué es lo que haremos cuando el rsyslog reciba un mensaje de cierto servicio/prioridad especificados.

Veamos algunos ejemplos sencillos de su uso. Una línea típica sería, por ejemplo:

auth,authpriv.* /var/log/auth.log

Aquí vemos que los servicios auth y authpriv, servicios que generan mensajes de autenticación, por ejemplo, enviados desde el proceso login, serán logueados en el archivo /var/log/auth.log, sin importar la prioridad que tengan, de ahí el ‘*’.

Como se puede apreciar, podemos separar varios servicios con la misma prioridad utilizando comas, y la misma acción para todos. Si quisiéramos separar varios servicios y prioridades para aplicarles la misma acción, podremos utilizar punto y coma de esta forma:

auth.warn;kernel.crit /var/log/log_de_prueba.log

Cabe aclarar que aquí, por ejemplo, será logueado todo mensaje de warning de autenticación, y todos los mensajes de prioridades superiores también. Para loguear solo una prioridad, podemos utilizar el signo ‘=’ de esta forma:

mail.=info /var/log/solo_mail_info.log

Las acciones posibles.

Las acciones que podemos llevar a cabo con cada mensaje de log incluye alguna de las siguientes:

  • Archivo: se puede enviar el log a un archivo de texto, como ocurre generalmente.
  • Usuario: se puede enviar el mensaje de log a la terminal de un usuario específico, o lista de usuarios separados por espacio, o a todos los usuarios utilizando *. Por ejemplo:

auth.warn root

  • Dispositivo: podemos enviar el log a un dispositivo particular. Generalmente se suelen usar dispositivos de caracter, como una terminal de usuario, por ejemplo:
mail.log    /dev/tty2
  • Equipo remoto: también podemos enviar el mensaje a un daemon de syslog que esté corriendo en un equipo remoto usando como acción @ip_del_syslog_remoto, o mediante su hostname. Cabe aclarar que el equipo remoto deberá estar atendiendo logs en red. Por defecto, syslog atiende, si se configura, en el puerto udp514, y se configura, particularmente para rsyslog, desomentando la línea «$UDPServerRun 514» en el archivo de configuración.

Testeando nuestro syslog

Una vez configurado el syslog, podremos testearlo enviando un log generado manualmente según nuestro gusto, y mediante el comando «logger» de esta forma:
logger -p servicio.prioridad «mensaje de log»
Veamos un ejemplo de su uso:
logger mail.warn «mensaje de warning de mail»

Si hemos configurado alguna linea de syslog con algo parecido a esto:

mail.* /var/log/mail_all.log

En dicho archivo veremos una entrada similar a esta:

Oct 7 21:20:59 tuta2 die: mensaje de warning de mail
Con su estampa de tiempo, el equipo y usuario que lo generó, y el mensaje en cuestión.


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

5 comentarios

Diego Cordoba - @d1cor · 12 junio, 2017 a las 19:40

El comando logger especifica con «-p» la prioridad (priority), por lo que la ejecución correcta es:

logger -p mail.warn “mensaje de warning de mail”

Si no, lee como mensaje «mail.warn mensaje de warning de mail” y lo envía al syslog genérico directamente, porque no coincide con la prioridad que pusiste en el rsyslog.conf.

fede · 25 junio, 2017 a las 15:54

Hola Diego,
estoy intentando configurar syslog en mi distro mageia(derivada de mandake) pero no me registra mensajes ¿Cual crees pueda ser el error?

Estos son los passos que di:
1. editar el fichero syslog.conf con la linea:

auth,authpriv.* /home/………

2. ejecutar el comando logger -p auth.crit «………………», sin embargo el mensaje no se registra en el fichero¿alguna idea de que puede estar fallando?

Gracias, saludos:D

    Diego Cordoba - @d1cor · 4 julio, 2017 a las 21:51

    Hola Fede!
    Pudiste solucionarlo?
    Acordate que tenés que recargar el servicio luego de configurarlo. y fijate con un «ps fax» si está el servicio de syslog andando, por las dudas… o fijate en los logs al restartear el servicio a ver si no está tirando error, puede que no arranque por algún problema de sintaxis en el archivo de configuración.
    Cualquier novedad comentame.
    Abz!

      fede · 11 julio, 2017 a las 23:23

      Hola Diego,
      estoy algo parado con el tema de sylog y no se muy bien como seguir, a ver si me puedes orientar:

      he revisado la configuracion de mi syslog y parece estar correcto(tiene una sola regla:»auth,authpriv.* /home/user/f1.txt») pero no registro nada en el:(

      Al hacer un «ps fax | grep syslog»(fps ax o ps aux ¿cual usar?) no me aparece el servicio, por lo que supongo que no se inicia automaticamente, ¿como puedo lanzarlo con systemd?

      Gracias por tu interes, seguire probando y te informo, saludos:D

        Diego Cordoba - @d1cor · 1 agosto, 2017 a las 18:12

        Fede! Perdoná la demora, me tomé unos días de vacaciones xD

        Lo pudiste solucionar? Te comento que yo suelo usar «ps fax» para ver los procesos, y en un Debian 8 veo perfectamente el daemon rsyslogd, y en un Debian 9 recien instalado también lo veo.

        Fijate si al reiniciar el servicio: «sudo systemctl restart rsyslog.service» y tirale un «tail /var/log/syslog», ahí deberias ver la info de reinicio del servicio, y si hay algún error, te lo debería decir.

        Probalo, y cualquier cosa dejame por acá la salida de los comandos a ver si te puedo dar una mano.

        Abz!

Los comentarios están cerrados.