Registro en systemd trabajando con journalctl¶
En este artículo
En las distribuciones modernas de Linux (Ubuntu ≥ 16.04, Debian ≥ 8, RHEL/CentOS ≥ 7, Alma/Rocky ≥ 8), systemd no solo gestiona servicios, sino que también proporciona un registro centralizado a través de journald y la utilidad journalctl.
El registro de systemd recopila: - mensajes del kernel (dmesg), - registros de servicios como (nginx, sshd, docker, y otros), - flujos estándar stdout/stderr de demonios, - eventos de auditoría (si está integrado con auditd).
Nota
journald puede operar en paralelo con syslog (por ejemplo, rsyslog o syslog-ng): los registros pueden duplicarse. Sin embargo, journald a menudo reemplaza completamente el syslog clásico.
Inicio rápido: comandos principales¶
| Tarea | Comando |
|---|---|
| Ver todos los registros (con paginador) | journalctl |
| Últimas 10 entradas | journalctl -n |
| Seguir registros en tiempo real | journalctl -f (análogo a tail -f) |
| Registros desde el último arranque | journalctl -b |
| Registros para un servicio específico | journalctl -u nginx |
| Registros del kernel | journalctl -k |
| Espacio en disco utilizado por el registro | journalctl --disk-usage |
Hora y zonas horarias¶
Por defecto, journalctl muestra la hora local. Verifique que esté configurada correctamente:
Compruebe la salida para líneas como:
Gestión de la zona horaria¶
# Listar todas las zonas horarias disponibles
timedatectl list-timezones
# Establecer (por ejemplo, para Berlín)
sudo timedatectl set-timezone Europe/Berlin
Ver registros en UTC¶
Historial de arranques¶
Por defecto, los registros de arranques anteriores no se conservan (se almacenan solo en /run/log/journal/, que se borra al reiniciar). Para conservarlos, habilite el almacenamiento persistente:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
O edite la configuración manualmente:
Descomente y modifique:
Trabajar con arranques¶
# Listar todos los arranques guardados
journalctl --list-boots
# Salida:
# -2 abc123... Wed 2025-11-05 10:00:00 MSK—Wed 12:30:45 MSK
# -1 def456... Thu 2025-11-06 09:15:22 MSK—Thu 18:44:10 MSK
# 0 xyz789... Fri 2025-11-07 08:20:05 MSK—running
# Registros del arranque anterior
journalctl -b -1
# Registros por ID de arranque
journalctl -b xyz789...
Filtrado de registros¶
Por tiempo¶
# Desde un punto especificado hasta ahora
journalctl --since "2025-11-07 14:00:00"
# Para un período
journalctl --since "2025-11-06" --until "2025-11-07 09:00:00"
# Palabras clave convenientes
journalctl --since today
journalctl --since yesterday
journalctl --since "2 hours ago"
journalctl --until now
Nota
Formatos admitidos: YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, today, yesterday, 1 hour ago, 5min ago.
Por servicio (unidad)¶
# Registros de Nginx
journalctl -u nginx
# Con extensión .service (opcional pero correcto)
journalctl -u nginx.service
# Múltiples servicios a la vez
journalctl -u nginx -u php-fpm --since today
# Solo errores de nginx de las últimas 2 horas
journalctl -u nginx -p err --since "2 hours ago"
Por proceso, usuario, grupo¶
# Por PID (por ejemplo, proceso maestro de nginx)
journalctl _PID=12345
# Por UID de un usuario
journalctl _UID=33 # por ejemplo, www-data
journalctl _UID=$(id -u nginx)
# Listar todos los UIDs con entradas
journalctl -F _UID
# Similarmente para GID
journalctl -F _GID
Por nivel de prioridad (gravedad)¶
| Nivel | Código | Descripción |
|---|---|---|
emerg | 0 | El sistema es inutilizable |
alert | 1 | Se requiere acción inmediata |
crit | 2 | Errores críticos |
err | 3 | Errores |
warning | 4 | Advertencias |
notice | 5 | Eventos significativos |
info | 6 | Mensajes informativos |
debug | 7 | Depuración |
Ejemplos:
# Solo errores y superiores (err, crit, alert, emerg)
journalctl -p err
# Lo mismo mediante código numérico
journalctl -p 3
# Errores de Nginx para el arranque actual
journalctl -u nginx -p err -b
Formato de salida¶
Opciones principales¶
--no-pager # salida a stdout (para grep, tee, redirección)
--no-full # no truncar líneas largas (por defecto están truncadas)
-n 50 # últimas 50 entradas
-f # seguir (vista en vivo de nuevas entradas)
Formatear la salida¶
Formatos (-o)**¶
| Formato | Uso |
|---|---|
short (predeterminado) | Estilo clásico de syslog |
short-iso | Hora en ISO 8601: 2025-01-07T15:30:45+03:00 |
short-precise | Hora con microsegundos |
cat | Solo texto del mensaje (sin metadatos) — útil para scripts |
json | JSON, una entrada por línea (legible por máquina) |
json-pretty | JSON legible por humanos (para depuración/análisis) |
verbose | Todos los campos, incluidos los ocultos _SOURCE_REALTIME_TIMESTAMP, _BOOT_ID, etc.) |
Ejemplos:
# JSON legible por humanos para nginx
journalctl -u nginx -o json-pretty --since today
# Solo texto del mensaje
journalctl -u nginx -p err -o cat
# Exportar a un archivo para análisis
journalctl -b -u docker --no-pager > docker_boot.log
Gestión del tamaño del registro¶
Tamaño actual¶
Limpieza de registros¶
Por tamaño¶
Por tiempo¶
Nota
Sufijos admitidos: s, m, h, days, weeks, months, years.
Límites persistentes (en la configuración)¶
Edite /etc/systemd/journald.conf:
Después de los cambios:
Nota
Los cambios en journald.conf no afectan a los registros ya acumulados: utilice --vacuum-* para limpiar.
Técnicas avanzadas¶
Búsqueda por contenido (con grep)¶
Análisis de frecuencia de eventos¶
Exportación y copia de seguridad¶
Preguntas frecuentes¶
P: ¿Por qué journalctl no muestra registros de reinicios anteriores? R: Compruebe si Storage=persistent está habilitado y si existe /var/log/journal/. Sin esto, los registros se mantienen solo en la memoria RAM /run.
P: ¿Cómo deshabilito journald y vuelvo a rsyslog? R: No puede deshabilitar completamente journald (es parte de systemd), pero puede: - Redirigir los registros a rsyslog mediante /etc/systemd/journald.conf o utilizando systemd-journald con SystemMaxUse=0 para deshabilitar el registro. - O deshabilitar journald como fuente para rsyslog, dejando solo este último.
P: ¿Se pueden cifrar los registros? R: journald no admite cifrado de forma nativa. Para ello, utilice: - logrotate + gpg, - O sistemas SIEM de terceros (Graylog, ELK, Loki + Promtail).