Desmitificando journalctl: Tu guía para los registros del sistema Linux

Aprende comandos de journalctl para ver, filtrar, seguir y limpiar los registros del diario systemd de Linux.

Desmitificando journalctl: Tu guía para los registros del sistema Linux

La utilidad journalctl es el comando principal para ver los registros recopilados por systemd-journald. Cuando un servicio falla, un arranque se cuelga o un mensaje del kernel pasa demasiado rápido, journalctl suele ser donde encuentras los detalles.

A diferencia de los archivos de registro de texto plano en /var/log, el diario almacena entradas estructuradas con metadatos como nombre de unidad, prioridad, ID de arranque y marca de tiempo. Esto te permite filtrar registros con precisión en lugar de abrir varios archivos y adivinar.


Entendiendo el diario de systemd

Antes de sumergirnos en los comandos, ayuda saber qué está gestionando journalctl. El diario de systemd recopila registros del kernel, servicios (unidades), aplicaciones e incluso el proceso de inicio del sistema. Estos registros se almacenan típicamente en archivos binarios estructurados, lo que los hace mucho más rápidos de buscar y filtrar que los archivos planos tradicionales.

Conceptos clave:

  • Persistencia: Los registros se pueden configurar para almacenarse permanentemente entre reinicios (modo persistente) o solo mantenerse en memoria (modo volátil).
  • Datos estructurados: Los registros contienen metadatos (como nombre de unidad, prioridad, ID de arranque) que journalctl aprovecha para filtrar.

Comandos esenciales de visualización

La necesidad más común es simplemente ver los registros. Aquí están los comandos fundamentales para comenzar a explorar el historial de tu sistema.

1. Ver todos los registros

Para ver cada entrada recopilada por el diario desde que el sistema comenzó a registrar, usa el comando sin argumentos:

journalctl

Por defecto, esta salida se pagina usando una herramienta como less, permitiéndote navegar hacia arriba y abajo con las teclas de flecha o la barra espaciadora.

2. Ver registros en tiempo real (seguimiento)

Similar a usar tail -f, puedes monitorear los registros mientras se escriben en el diario. Esto es invaluable al iniciar o depurar un servicio específico:

journalctl -f

Para salir de la vista en tiempo real, presiona Ctrl+C.

3. Limitar la salida por número de líneas

Si solo necesitas las entradas más recientes, usa la bandera -n para especificar el número de líneas:

# Muestra las últimas 20 entradas de registro
journalctl -n 20

4. Ver registros desde un momento específico

Filtrar por tiempo es una de las características más potentes de journalctl. Puedes usar marcas de tiempo relativas o absolutas.

Ejemplos de tiempo relativo:

Comando Descripción
journalctl --since "1 hour ago" Registros de la última hora.
journalctl --since "yesterday" Registros desde el inicio del día calendario anterior.
journalctl --since "2023-10-26 14:30:00" Registros después de una fecha y hora específicas.

Consejo: Puedes combinar --since y --until para especificar un rango preciso, por ejemplo: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".


Filtrar registros por unidad, servicio o proceso

Uno de los usos más críticos de journalctl es aislar mensajes relacionados con una unidad de systemd específica (servicio).

Filtrar por nombre de servicio

Usa la bandera -u (o --unit) seguida del nombre del servicio (por ejemplo, sshd.service, nginx.service):

# Ver registros solo para el servicio del servidor web Apache
journalctl -u apache2.service

# Seguir registros para el servicio Docker
journalctl -u docker.service -f

Filtrar por ID de arranque

Systemd rastrea los registros a través de diferentes arranques del sistema. Para ver registros de un inicio anterior, primero lista los arranques disponibles:

journalctl --list-boots

Esto genera una lista indexada (por ejemplo, -1, -2, 0 para el arranque actual). Luego puedes usar el índice o el ID de arranque completo:

# Mostrar registros del arranque inmediatamente anterior
journalctl -b -1

# Mostrar registros de un ID de arranque específico (usa el ID largo listado arriba)
journalctl -b a1b2c3d4e5f6...

Filtrar por mensajes del kernel

Para ver solo mensajes originados del kernel (similar a usar dmesg):

journalctl -k
# O, equivalentemente:
journalctl -b -k

Filtrado avanzado y control de salida

La resolución de problemas efectiva a menudo requiere combinar filtros y controlar el formato de salida.

1. Filtrar por nivel de prioridad

Los registros se asignan niveles de prioridad desde 0 (emerg) hasta 7 (debug). Puedes usar la bandera -p o --priority para ver mensajes en la gravedad seleccionada y niveles más severos:

Nivel de prioridad Valor numérico
err o error 3
warning 4
notice 5
info 6
# Mostrar todos los errores, críticos y mensajes de emergencia del servicio SSH
journalctl -u sshd.service -p err

2. Buscar texto específico

Cuando el filtrado estándar no es suficiente, puedes canalizar la salida a grep o usar --grep en sistemas cuya versión de journalctl lo soporte:

# Buscar en todos los registros líneas que contengan la palabra 'failed'
journalctl | grep failed

# O, usar la opción --grep para un filtrado más simple (si está disponible/preferido)
journalctl --grep=failed

3. Cambiar el formato de salida

Para scripting o mover registros a otras herramientas, cambiar el formato de salida es esencial. El predeterminado es pretty (legible para humanos).

  • --output=json: Genera entradas como objetos JSON estructurados.
  • --output=short: Similar a pretty pero menos colorido.
  • --output=export: Genera entradas de diario sin procesar para archivo.
# Generar registros recientes como JSON
journalctl -n 5 --output=json

4. Combinar filtros

Los filtros se apilan multiplicativamente. Para ver todos los errores de Nginx registrados en los últimos 10 minutos:

journalctl -u nginx.service --since "10 minutes ago" -p err

Gestionar el tamaño del diario y la persistencia

Con el tiempo, el diario puede consumir espacio significativo en disco, especialmente si está configurado para registro persistente. Los administradores del sistema deben gestionar su tamaño.

Verificar el uso actual

Para ver cuánto espacio en disco están ocupando los archivos de diario actuales:

journalctl --disk-usage

Limpiar registros antiguos

Puedes borrar registros basados en tiempo o tamaño total.

Limpieza por tiempo:

# Mantener solo registros de los últimos 7 días
journalctl --vacuum-time=7d

Limpieza por tamaño:

# Reducir el tamaño total de registros a un máximo de 500 Megabytes
journalctl --vacuum-size=500M

Advertencia: Ten cuidado al eliminar registros, especialmente aquellos de arranques anteriores (-b). Asegúrate de no eliminar información crítica de diagnóstico prematuramente.

Conclusión

Para la resolución de problemas diaria, comienza con journalctl -u <servicio> -n 50 --no-pager, agrega -f cuando necesites salida en vivo, y usa --since o -b cuando el problema esté vinculado a una ventana de tiempo o arranque. Antes de eliminar registros, verifica journalctl --disk-usage y mantén suficiente historial para revisión de reversión e incidentes.