Recolección centralizada de logs de sistema, mediante journald.
Implementa en tu escenario de trabajo de Openstack, 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.
En mi caso, estaré realizando esta práctica mediante un escenario en Vagrant, ya que el escenario en OpenStack daba problemas con los contenedores LXC. Contaré con un servidor y tres clientes (2 Debian y 1 Rocky Linux) para realizar la práctica, el Vagrantfile es el siguiente.
Vagrant.configure("2") do |config|
config.vm.provider :libvirt do |libvirt|
libvirt.memory = 1024
end
config.vm.define :servidor do |servidor|
servidor.vm.box = "debian/bullseye64"
servidor.vm.hostname = "servidor"
servidor.vm.synced_folder ".", "/vagrant", disabled: true
end
config.vm.define :cliente_debian1 do |cliente_debian1|
cliente_debian1.vm.box = "debian/bullseye64"
cliente_debian1.vm.hostname = "cliente-debian1"
cliente_debian1.vm.synced_folder ".", "/vagrant", disabled: true
end
config.vm.define :cliente_rocky do |cliente_rocky|
cliente_rocky.vm.box = "rockylinux/9"
cliente_rocky.vm.hostname = "cliente-rocky"
cliente_rocky.vm.synced_folder ".", "/vagrant", disabled: true
end
config.vm.define :cliente_debian2 do |cliente_debian2|
cliente_debian2.vm.box = "debian/bullseye64"
cliente_debian2.vm.hostname = "cliente-debian2"
cliente_debian2.vm.synced_folder ".", "/vagrant", disabled: true
end
end
Instalación de paquetes en todas las máquinas
En primer lugar, instalaremos los paquetes necesarios en todas las máquinas del escenario.
- Debian
apt update
apt install systemd-journal-remote
- Rocky
dnf check-update
dnf install systemd-journal-remote
Hecho esto, podemos seguir con los siguientes pasos.
Configuración de la máquina servidor
Una vez hemos instalado los paquetes en las máquinas, podemos empezar configurando el servidor el cual va a recibir los logs de los clientes.
Iniciamos el socket para el funcionamiento del servicio.
systemctl enable --now systemd-journal-remote.socket
Lo siguiente, será hacer algunas configuraciones en el fichero /lib/systemd/system/systemd-journal-remote.service.
sudo nano /lib/systemd/system/systemd-journal-remote.service
Aquí modificaremos el parámetro https por http.
Esto lo hacemos, ya que por defecto Journald trabaja por el protocolo https mediante certificados TLS, en nuestro caso, al encontrarnos en un entorno aislado, lo haremos mediante http sin necesidad de certificados.
Podemos observar que en esa misma línea se encuentra el parámetro output seguido de una ruta, esta será la ruta en la que se almacenen los logs de los clientes, en caso de que no exista debemos crearla y definir como propietarios al usuario systemd-journal-remote.
chown systemd-journal-remote /var/log/journal/remote
Una vez terminada la configuración, podemos reiniciar los servicios y comprobar su estado.
sudo systemctl restart systemd-journal-remote.service
systemctl restart systemd-journal-upload.service
Configuración de los clientes
Esta configuración la replicaremos en cada uno de los clientes, el proceso es similar en todos ellos.
Tendremos que configurar el componente que se encarga de transmitir los mensajes de registro al servidor, este componente es el systemd-journal-upload. Para esto, tenenemos que crear un usuario de la siguiente manera.
adduser --system --home /run/systemd --no-create-home --disabled-login --group systemd-journal-upload
-system
:- Este parámetro indica que se está creando un usuario de sistema en lugar de un usuario regular.
-home /run/systemd
:- Establece el directorio de inicio del usuario en
/run/systemd
. El directorio de inicio es donde se colocan los archivos y directorios personales de un usuario. En este caso,/run/systemd
es el directorio de inicio asignado para este usuario.
- Establece el directorio de inicio del usuario en
-no-create-home
:- Este parámetro indica que no se debe crear automáticamente el directorio de inicio del usuario. En otras palabras, si el directorio de inicio especificado no existe, no se creará.
-disabled-login
:- Deshabilita el inicio de sesión para este usuario. Esto significa que el usuario no podrá iniciar sesión en el sistema, ya sea de forma local o remota.
-group
:- Crea un grupo con el mismo nombre que el usuario y agrega al usuario a ese grupo. Esto asegura que el usuario tenga su propio grupo primario asociado a él.
systemd-journal-upload
:- Es el nombre del usuario que se está creando. En este caso, el usuario se llamará
systemd-journal-upload
.
- Es el nombre del usuario que se está creando. En este caso, el usuario se llamará
Una vez creado el usuario, debemos modificar el fichero de configuración /etc/systemd/journal-upload.conf indicando el protocolo, IP de la máquina remota y puerto de comunicación.
sudo nano /etc/systemd/journal-upload.conf
Finalmente, podemos reiniciar el servicio y comprobar el funcionamiento.
systemctl restart systemd-journal-upload.service
Pruebas de funcionamiento
Podemos comprobar que el servicio está funcionando, listando el fichero donde hemos configurado el almacenamiento de los logs, aqúi deberán aparecer 3 ficheros, uno para cada máquina cliente.
ls -lh /var/log/journal/remote/
Como podemos comprobar, aparecen los 3 ficheros de los clientes, estos indican la IP de cada uno de ellos, ver los logs de las máquinas, podemos ejecutar el siguiente comando.
journalctl --file=/var/log/journal/remote/remote-X.X.X.X.journal
Podemos filtrar con less, para hacer una búsqueda mas detallada.
journalctl --file=/var/log/journal/remote/remote-X.X.X.X.journal | less