Guía completa para administradores de Linux: Cómo usar journalctl para consultar el journal de systemd



En un entorno Linux moderno, la gestión de registros o logs es crucial para el monitoreo, la depuración y la solución de problemas del sistema. Uno de los sistemas más utilizados para gestionar y visualizar logs es systemd, y su herramienta asociada para trabajar con los registros es journalctl. En esta guía, exploraremos cómo utilizar journalctl para consultar y gestionar el journal de systemd, proporcionando a los administradores de sistemas una visión completa de sus capacidades.

¿Qué es journalctl?

journalctl es un comando utilizado para visualizar los logs recopilados por systemd-journald, el servicio de registro de systemd. Este servicio recopila mensajes provenientes del núcleo del sistema (kernel), los servicios gestionados por systemd y otras fuentes del sistema. Los registros se almacenan en un formato estructurado e indexado, lo que permite a journalctl presentar esta información de manera flexible y útil.

El journal de systemd centraliza los registros en un solo lugar, lo que facilita su revisión en comparación con los sistemas de registro dispersos tradicionales. Además, journalctl ofrece una amplia gama de opciones para filtrar, ordenar y personalizar la visualización de los logs.

¿Cómo visualizar los logs básicos con journalctl?

El uso más básico de journalctl es simplemente ejecutar el comando sin opciones para mostrar todos los logs disponibles en el sistema:

sudo journalctl

Este comando presenta los registros en un formato similar al de syslog tradicional, donde cada línea incluye:

  • La fecha (en la hora local del servidor).
  • El nombre del servidor.
  • El nombre del proceso.
  • El mensaje de log.

Por ejemplo, una salida típica puede verse de la siguiente manera:

-- Logs begin at Wed 2019-01-30 16:37:09 UTC, end at Mon 2019-02-25 19:41:03 UTC. --
Jan 30 16:37:09 localhost systemd-journal[102]: Runtime journal is using 8.0M (max allowed 191.1M).
Jan 30 16:37:09 localhost kernel: Initializing cgroup subsys cpu
Jan 30 16:37:09 localhost kernel: Linux version 3.10.0-862.9.1.el7.x86_64 (mockbuild@x86-017.build.eng.bos.redhat.com)

Este comando por defecto muestra los logs desde el más antiguo hasta el más reciente, permitiendo a los administradores revisar eventos históricos del sistema.

Filtrado de logs

Una de las mayores ventajas de journalctl es su capacidad para filtrar los logs de diferentes maneras, lo que te permite concentrarte en la información más relevante para resolver un problema.

1. Mostrar logs más recientes

Si deseas que los logs más recientes se muestren primero, puedes invertir el orden de los registros utilizando la opción -r:

sudo journalctl -r

Este comando es útil cuando buscas un evento reciente sin necesidad de desplazarte a través de todos los registros históricos.

2. Mostrar logs en tiempo real

Si deseas ver los registros a medida que son generados en tiempo real (similar a tail -f), puedes usar la opción -f:

sudo journalctl -f

Este modo es ideal para monitorear logs en vivo mientras trabajas en la depuración de un problema en el sistema o un servicio.

3. Filtrar logs por fecha y hora

A menudo, es necesario visualizar los registros de un intervalo de tiempo específico. Con journalctl, puedes usar las opciones --since y --until para definir un rango temporal. Por ejemplo, para ver todos los logs desde una fecha y hora específica:

sudo journalctl --since "2024-09-30 10:00:00"

También puedes usar términos relativos como «hace X horas» o «hace X días»:

sudo journalctl --since "1 day ago"

Si también deseas definir un límite superior de tiempo, puedes utilizar --until:

sudo journalctl --since "2024-09-30" --until "2024-10-01"

Además, journalctl reconoce términos como yesterday, today, o tomorrow para hacer más sencillo el filtrado de registros según fechas.

4. Mostrar logs del último arranque del sistema

Para ver los logs generados únicamente durante el último arranque del sistema, puedes utilizar la opción -b:

sudo journalctl -b

Este comando es especialmente útil si el sistema se reinició debido a algún error y necesitas concentrarte en los eventos que ocurrieron durante el último ciclo de arranque.

Logs por servicio o unidad de systemd

Uno de los aspectos más poderosos de journalctl es la posibilidad de filtrar los registros por un servicio o unidad específica gestionada por systemd. Esto permite a los administradores enfocarse en los eventos generados por un servicio particular, como nginx, ssh o cualquier otro servicio bajo systemd.

Por ejemplo, para ver los logs generados por el servicio ssh, puedes usar:

sudo journalctl -u ssh

Este comando mostrará todos los eventos relacionados con la unidad ssh. También puedes combinar este filtro con otras opciones, como -f para ver los logs en tiempo real:

sudo journalctl -u ssh -f

Logs de servicios en un período específico

Si deseas obtener los logs de un servicio en un período de tiempo determinado, también puedes combinar las opciones de tiempo con el filtro de unidad. Por ejemplo, para ver los logs de nginx en las últimas dos horas:

sudo journalctl -u nginx --since "2 hours ago"

Visualización de logs del kernel

Para filtrar los logs generados exclusivamente por el núcleo del sistema, puedes usar la opción -k:

sudo journalctl -k

Esto mostrará todos los eventos generados por el kernel, lo que es útil para depurar problemas relacionados con hardware o controladores.

Exportar logs a un archivo

Si necesitas guardar los logs para revisarlos posteriormente o enviarlos a otro administrador o equipo de soporte, journalctl te permite redirigir los registros a un archivo:

sudo journalctl > logs.txt

Esto guardará todos los registros en un archivo llamado logs.txt. También puedes combinarlo con cualquier opción de filtrado descrita anteriormente para exportar solo los logs que te interesan. Por ejemplo, para guardar los logs del último arranque:

sudo journalctl -b > boot_logs.txt

Otros filtros útiles

  • Filtrar por prioridad de log: Si solo te interesan los mensajes de error, puedes filtrar los registros por nivel de prioridad. Por ejemplo, para ver solo errores (err):
  sudo journalctl -p err

Los niveles de prioridad incluyen: emerg, alert, crit, err, warning, notice, info, y debug.

  • Filtrar por mensajes del sistema de red: Si deseas ver solo los eventos relacionados con la red, puedes usar el filtro SYSLOG_FACILITY=3:
  sudo journalctl SYSLOG_FACILITY=3

Resumen

journalctl es una herramienta extremadamente poderosa para la gestión y visualización de logs en sistemas Linux modernos que utilizan systemd. Con su amplio rango de opciones de filtrado, permite a los administradores depurar problemas, monitorear servicios y obtener información detallada de eventos en el sistema.

Desde mostrar logs en tiempo real hasta filtrar eventos por fecha o servicio, journalctl ofrece una flexibilidad sin igual en la gestión de registros. A través de esta guía, has aprendido a aprovechar al máximo las capacidades de journalctl, permitiéndote ser más eficiente en la administración de sistemas Linux.

Recuerda explorar más opciones de journalctl según las necesidades de tu entorno, ya que esta herramienta puede adaptarse a una variedad de escenarios en la administración de logs.