Recolección centralizada de logs de sistema, mediante journald

En este post, vamos a implementar en nuestro escenario un sistema de recolección de log mediante journald. Para ello debes, implementar un sistema de recolección de log mediante el paquete systemd-journal-remote, o similares.

Máquina Distribución IP
ALFA Debian 11 172.22.201.46
BETA Debian 11 172.16.0.200
CHARLIE Debian 11 192.168.0.2
DELTA Debian 11 192.168.0.6

Escenario

Preparación del escenario

Lo primero que deberemos hacer es instalar en cada una de las máquinas de nuestro escenario, incluyendo los contenedores de LXC, el paquete systemd-journal-remote:

  • ALFA, CHARLIE y DELTA
    apt install systemd-journal-remote
    
  • BRAVO
    dnf install systemd-journal-remote
    

1

Configuración de journald EN ALFA

En esta máquina, vamos a configurar el servicio systemd-journal-remote para que recoga los logs de las demás máquinas. Al no hacer uso del https, vamos a desactivarlo en el fichero /lib/systemd/system/systemd-journal-remote.service:

sudo grep --color -E -- '--listen-http' /lib/systemd/system/systemd-journal-remote.service
sudo sed -i 's/--listen-https=-3/--listen-http=-3/g' /lib/systemd/system/systemd-journal-remote.service
sudo grep --color -E -- '--listen-http' /lib/systemd/system/systemd-journal-remote.service

Reiniciamos el demonio:

systemctl daemon-reload

Activamos el servicio:

systemctl enable systemd-journal-remote.service
systemctl enable systemd-journal-remote.socket

Una vez comprobado que nuestro servicio está activo:

systemctl status systemd-journal-remote.service
systemctl status systemd-journal-remote.socket

2

Solo nos resta por cerciorarnos que el directorio /var/log/journal/remote exista y tenga los permisos adecuados. De no ser así, lo creamos y le damos los permisos adecuados:

mkdir /var/log/journal/remote
chown systemd-journal-remote:systemd-journal-remote /var/log/journal/remote

3

Como podemos ver, en mi caso, el directorio existe y con los permisos que le pertenece.

Configuración de los servidores Bravo, Charlie y Delta

Tras la configuración anterior, el siguiente paso es configurar los clientes para que envíen sus logs a la máquina ALFA. Por ello, vamos a crear un usuario en bravo, charlie y delta que se llame systemd, perteneciente al grupo systemd-journal-upload y al que le desactivaremos el login.

Algo a tener en cuenta será que el usuario systemd tendrá el directorio home en /run/systemd, por lo que deberemos crearlo y darle los permisos adecuados:

#BRAVO
sudo adduser --system --home-dir /run/systemd --no-create-home --user-group systemd-journal-upload

#CHARLIE y DELTA
sudo adduser --system --home /run/systemd --no-create-home --disabled-login --group systemd-journal-upload

4

Una vez configurado el usuario en cada una de los clientes, vamos a configurar el fichero /etc/systemd/journal-upload.conf para que estos mismos clientes envíen sus logs a la máquina ALFA:

URL=http://alfa.mariajesus.gonzalonazareno.org:19532

Activamos el servicio systemd-journal-upload en cada uno de los clientes:

#BRAVO, CHARLIE Y DELTA
sudo systemctl restart systemd-journal-upload.service

Para finalizar, podemos comprobar que en el directorio /var/log/journal/remote de la máquina ALFA, se han creado los ficheros generados por los logs de los clientes:

5

Haciendo uso del comando journalctl, podemos ver los logs de cada cliente:

#BRAVO
sudo journalctl --file /var/log/journal/remote/remote-172.16.0.200.journal

6

#CHARLIE
sudo journalctl --file /var/log/journal/remote/remote-192.168.0.2.journal

7

#DELTA
sudo journalctl --file /var/log/journal/remote/remote-192.168.0.3.journal

8