Logs locales y remotos con rsyslog

Esta es una rápida entrada en la que anotar cómo trabajar con el sistema de diarios de nuestras máquinas virtuales de la asignatura de PSI.
Los logs funcionan con rsyslog, una herramienta muy potente y que permite incluso enviar los mensajes de los logs a otra máquina donde centralizarlos (lo cual puede ser muy útil si administramos un número importante de máquinas).
También se puede usar en cualquier otra instalación Debian estándar y en los derivados (por ejemplo, Ubuntu)

Probando los logs locales
Para probar nuestro sistema de forma local, vamos a simular un error en una aplicación de correo. Los logs no se escriben a mano sino a través de la orden “logger”. La sintaxis la puedes consultar con:
$ man logger
En nuestro caso vamos a usar la orden:
$ logger -p mail.err "Esto es una prueba"
La opción -p imprime el mensaje “Esto es una prueba” en el log llamado “mail.err

Leyendo los logs locales
Para ver el error que hemos simulado, basta con ver el contenido que se ha añadido al final de log. Los diarios se almacenan en la ruta /var/log así que:
cat /var/log/mail.err
Veremos algo como lo siguiente:
Apr 14 18:50:39 PC Usuario: Esto es una prueba
donde PC y Usuario son los nombres de nuestra máquina y del usuario que emite el mensaje.
Obviamente no es muy práctico tener que leer los logs de esta forma pero existe una multitud de herramientas con las que agilizar la gestión de los diarios, su lectura, aplicar filtros, hacer búsquedas, etc.

Enviando logs a otra máquina
Lo primero que tenemos que hacer es editar la configuración de rsyslog para que sepa cuándo enviar los logs a otra máquina, para lo cual necesitaremos permisos de superusuario. Usa la orden “su” e introduce la contraseña de administrador. A continuación:
# gedit /etc/rsyslog.conf
Entre otras cosas, aquí puedes definir dónde se guarda cada log. Para nuestro caso, vamos al final del archivo y añadimos la siguiente línea:
*.* @@192.168.56.10:514
Lo primero que aparece es un asterisco que significa la procedencia del mensaje (factory), bien sea el sistema de mail (mail), un usuario (user), un servicio (daemon), el programador (cron)…
Tras el punto aparece un segundo asterisco que simboliza el nivel del mensaje (level): alerta (alert), error (err), aviso (notice), etc.
A continuación nos encontramos con una o dos arrobas. Una indica que el mensaje usará transporte UDP, dos que se usa transporte TCP. Puede no ser demasiado importante, pero recuerda bien que sistema escoges. Tras ella o ellas viene la IP del destino, que será el servidor donde se vayan a almacenar los logs y separado mediante dos puntos, el número de puerto por el que llegarán.
Una vez guardado el archivo, reiniciamos el servicio de logs:
# service rsyslog restart

Configurando la recepción
En el PC que vaya a recibir los diarios, también tenemos que hacer un pequeño ajuste. Editamos el archivo de configuración (con permisos de administrador):
# gedit /etc/rsyslog.conf
Ya en las primeras líneas nos encontramos con lo siguiente:
# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

Como ves es bastante autoexplicativo. Dado que en el paso anterior escogí enviar los logs por transporte TCP, ahora descomentaré las dos lineas del apartado de recepción de TCP. La primera de ellas carga el módulo correspondiente y la segunda establece el puerto 514 para la escucha (que es el mismo que habíamos escrito en la configuración de la otra máquina).
Quedará así:
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Antes de cerrar el archivo, debo establecer al final del fichero donde se escribirá lo que llegue, así que bajo hasta el final y añado esta linea:
*.* /var/log/prueba.log
Donde /var/log/prueba.log será el archivo que almacene los mensajes. Ya podemos guardar la configuración, cerrar el editor y reiniciar el servicio de logs:
# service rsyslog restart

Probando nuestro sistema de diarios remotos
Desde el cliente, emitimos un mensaje:
$ logger -p 0.0 "hola remoto"
Introduzco la factoría 0 y el nivel 0, que se ajustarán al patrón *.* que definimos en el envío…

En el servidor puede que aparezca una notificación si nos encontramos en la terminal:
Message from syslogd@maquina at April 14 20:04:11
usuario: hola remoto

Y además, el mensaje quedará registrado tal y como queríamos. Se puede ver así:
cat /var/log/prueba.log

Cómo continuar a partir de aquí
Bien, lo primero interesante sería poder crear un buen sistema de reglas en el anfitrión de logs, de forma que cada log se guarde de acuerdo a su factoría y nivel correspondiente; o según de la máquina de la que proceda, etc.
En segundo lugar, también sería conveniente instalar algún interfaz que permita una gestión eficiente de los diarios. Incluso, una interfaz accesible vía web, para poder consultarlos desde otros lugares…
Espero que os sea de ayuda!

Anuncios

3 pensamientos en “Logs locales y remotos con rsyslog

  1. Entorno Debian de pruebas en VirtualBox « Emilio

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s