Registros de log en Systemd

Una de las cualidades de Systemd es la centralización de registros de log del sistema, a través del servicio systemd-journald se recolecta y almacena los log de forma estructurada e indexada, esta información puede ser consultada con el comando journalctl. Este servicio recibe información de log desde la siguiente lista de fuentes:

  • Mensajes de log del Kernel, via kmsg
  • Mensajes simples del sistema de log, vía las llamadas a libc (syslog)
  • Los logs enviados a través del API del sistema Journal.
  • Salidas de log estándar y de errores de los servicios.
  • Logs de auditoria generados desde la subsistema de auditoria del Kernel

Por defecto el servicio de Journal guarda los datos en archivos binarios bajo la carpeta /run/log/journal y estos datos no son persistentes y son almacenados hasta el reinicio del sistema. Para hacer los datos no volátiles podemos modificar el parámetro “Storage” en el fichero /etc/systemd/journald.conf o simplemente creando el directorio /var/log/journal y posteriormente reiniciando el sistema. La forma correcta de crear el directorio es la siguiente:

# mkdir -p /var/log/journal

# systemd-tmpfiles --create --prefix /var/log/journal

Podemos eliminar los datos de log con el comando

# journalctl –flush

O rotarlos si se están guardando de forma persistente

# journalctl --rotate

Otra alternativa es enviar los logs de Journal a un servidor centralizado que se encargue de recopilar los logs de varios servidores.

El comando de consulta de logs journalctl es muy versátil y dispone de múltiples parámetros enfocados a realizar un filtrado de los logs, pudiendo realizar consultas por proceso, usuario, programa… etc.

Los logs son guardados con una prioridad lo que permitirá su posterior filtrado. Las prioridades disponibles son las siguientes:

  • 0: emerg
  • 1: alert
  • 2: crit
  • 3: err
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug

De la misma forma que la prioridad también se clasifican por nivel de recurso o tipo de programa basándose en el RFC 5424 Sección 6.2.1

  • 0: kern (Mensajes del Kernel)
  • 1:user (Mensajes del usuario)
  • 2:mail (Sistema de correo)
  • 3:daemon (Demonios del sistema)
  • 4:auth (Mensajes de seguridad/autorización)
  • …etc

 

Ejemplos de uso básico:

Fitrado de mensajes de arranque

# journalctl -b

Filtrado por prioridad

# journalctl –p 0

# journactl –p emerg

Filtado por fecha

# journalctl –since “2020-12-28” –until “2019-05-12”

# journalctl –since “-7 day”

Filtrado mensajes del núcleo

# journalctl -k --since yesterday

# journalctl –p 3 -k

Filtrado por programas

Primero buscamos los programas que generan logs

# journalctl –F _EXE

Y posteriormente buscamos los logs del programa

# journalctl _EXE=/usr/sbin/sshd

Modo monitor

Además de los filtrados podemos utilizarlo para monitorizar los errores con el parámetro “-f” donde se muestran los últimos mensajes y queda a la espera de nuevos.

# journalctl -f

Existen muchas más opciones para el comando journalctl que nos pueden ser de ayuda en la consulta de logs, como son la impresión de salida en json, el formato de paginación o la consulta de los logs de un determinado servicio.