¿QUÉ ES JOURNALCTL?
journalctl es una utilidad incluida en systemd que permite consultar el journal, una base de datos donde se almacenan los registros del sistema y de los servicios.
A diferencia de los archivos de log tradicionales ubicados en /var/log, journalctl reúne toda la información en un único lugar, facilitando la búsqueda y el filtrado de eventos.
Con esta herramienta podremos:
- Consultar los logs del sistema.
- Ver los mensajes de un servicio concreto.
- Analizar errores de arranque.
- Filtrar registros por fecha y hora.
- Seguir los logs en tiempo real.
Journalctl permite visualizar y gestionar los logs del sistema
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- Equipo con GNU/Linux con systemd
2.- MOSTRAR TODOS LOS LOGS
Como consejo, os recomiendo utilizar siempre sudo para poder visualizar todos los logs, ya que algunos son solo accesibles por root o por un usuario con permisos de sudoer.
Para visualizar todos los registros almacenados en el journal, ejecutaremos el siguiente comando:
raul@debian:~$ sudo journalctl
Obtendremos una salida similar a la siguiente con todos los logs:
ago 12 15:02:16 debian systemd[767]: Queued start job for default target default.target.
ago 12 15:02:16 debian systemd[767]: Created slice app.slice - User Application Slice.
ago 12 15:02:16 debian systemd[767]: Created slice session.slice - User Core Session Slice.
ago 12 15:02:16 debian systemd[767]: Reached target paths.target - Paths.
ago 12 15:02:16 debian systemd[767]: Reached target timers.target - Timers.
ago 12 15:02:16 debian systemd[767]: Starting dbus.socket - D-Bus User Message Bus Socket...
ago 12 15:02:16 debian systemd[767]: Listening on dirmngr.socket - GnuPG network certificate management daemon.
ago 12 15:02:16 debian systemd[767]: Listening on gcr-ssh-agent.socket - GCR ssh-agent wrapper.
ago 12 15:02:16 debian systemd[767]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-browser.socket - GnuPG cryptographic agent and passphrase cache (access for web browsers).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-extra.socket - GnuPG cryptographic agent and passphrase cache (restricted).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-ssh.socket - GnuPG cryptographic agent (ssh-agent emulation).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent.socket - GnuPG cryptographic agent and passphrase cache.
ago 12 15:02:16 debian systemd[767]: Listening on pulseaudio.socket - Sound System.
ago 12 15:02:16 debian systemd[767]: Listening on dbus.socket - D-Bus User Message Bus Socket.
ago 12 15:02:16 debian systemd[767]: Reached target sockets.target - Sockets.
ago 12 15:02:16 debian systemd[767]: Reached target basic.target - Basic System.
ago 12 15:02:16 debian systemd[767]: Starting pulseaudio.service - Sound Service...
ago 12 15:02:16 debian systemd[767]: Started gnome-keyring-daemon.service - GNOME Keyring daemon.
ago 12 15:02:16 debian systemd[767]: Starting dbus.service - D-Bus User Message Bus...
ago 12 15:02:16 debian systemd[767]: Started dbus.service - D-Bus User Message Bus.
ago 12 15:02:16 debian gnome-keyring-daemon[788]: GNOME_KEYRING_CONTROL=/run/user/1000/keyring
.
.
.
3.- VISUALIZAR LOS ÚLTIMOS REGISTROS
Si únicamente queremos consultar las últimas 20 líneas, ejecutaremos:
raul@debian:~$ sudo journalctl -n 20
Este comando mostrará los 20 registros más recientes.
ago 12 15:02:16 debian systemd[767]: Reached target paths.target - Paths.
ago 12 15:02:16 debian systemd[767]: Reached target timers.target - Timers.
ago 12 15:02:16 debian systemd[767]: Starting dbus.socket - D-Bus User Message Bus Socket...
ago 12 15:02:16 debian systemd[767]: Listening on dirmngr.socket - GnuPG network certificate management daemon.
ago 12 15:02:16 debian systemd[767]: Listening on gcr-ssh-agent.socket - GCR ssh-agent wrapper.
ago 12 15:02:16 debian systemd[767]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-browser.socket - GnuPG cryptographic agent and passphrase cache (access for web browsers).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-extra.socket - GnuPG cryptographic agent and passphrase cache (restricted).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent-ssh.socket - GnuPG cryptographic agent (ssh-agent emulation).
ago 12 15:02:16 debian systemd[767]: Listening on gpg-agent.socket - GnuPG cryptographic agent and passphrase cache.
ago 12 15:02:16 debian systemd[767]: Listening on pulseaudio.socket - Sound System.
ago 12 15:02:16 debian systemd[767]: Listening on dbus.socket - D-Bus User Message Bus Socket.
ago 12 15:02:16 debian systemd[767]: Reached target sockets.target - Sockets.
ago 12 15:02:16 debian systemd[767]: Reached target basic.target - Basic System.
ago 12 15:02:16 debian systemd[767]: Starting pulseaudio.service - Sound Service...
ago 12 15:02:16 debian systemd[767]: Started gnome-keyring-daemon.service - GNOME Keyring daemon.
ago 12 15:02:16 debian systemd[767]: Starting dbus.service - D-Bus User Message Bus...
ago 12 15:02:16 debian systemd[767]: Started dbus.service - D-Bus User Message Bus.
ago 12 15:02:16 debian gnome-keyring-daemon[788]: GNOME_KEYRING_CONTROL=/run/user/1000/keyring.
4.- VISUALIZAR LOS LOGS EN TIEMPO REAL
Al igual que hacemos con el comando tail -f, podemos seguir los registros conforme se generan en tiempo real:
raul@debian:~$ sudo journalctl -f
Resulta muy útil mientras iniciamos un servicio ó investigamos un problema.
5.- CONSULTAR LOS LOGS DE UN SERVICIO
Una de las funciones más útiles consiste en consultar únicamente los registros de un servicio. Por ejemplo, para ver los logs del servidor NGINX:
raul@debian:~$ sudo journalctl -u nginx
La salida del comando mostrará solo logs referentes al servicio Nginx:
raul@debian:~$ sudo journalctl -u nginx
sep 06 21:39:38 debian systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
sep 06 21:39:38 debian systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.
sep 07 09:29:49 debian systemd[1]: Stopping nginx.service - A high performance web server and a reverse proxy server...
sep 07 09:29:49 debian systemd[1]: nginx.service: Deactivated successfully.
sep 07 09:29:49 debian systemd[1]: Stopped nginx.service - A high performance web server and a reverse proxy server.
-- Boot e366359096ac4d76b64701be55bd1ff2 --
oct 26 15:18:49 debian systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
oct 26 15:18:49 debian nginx[800]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
oct 26 15:18:49 debian nginx[800]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
oct 26 15:18:50 debian nginx[800]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
oct 26 15:18:50 debian nginx[800]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
oct 26 15:18:50 debian nginx[800]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
oct 26 15:18:50 debian nginx[800]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
oct 26 15:18:51 debian nginx[800]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
oct 26 15:18:51 debian nginx[800]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
oct 26 15:18:51 debian nginx[800]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
oct 26 15:18:51 debian nginx[800]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
oct 26 15:18:52 debian nginx[800]: nginx: [emerg] still could not bind()
oct 26 15:18:52 debian systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
oct 26 15:18:52 debian systemd[1]: nginx.service: Failed with result 'exit-code'.
oct 26 15:18:52 debian systemd[1]: Failed to start nginx.service - A high performance web server and a reverse proxy server.
6.- FILTRAR LOS LOGS POR FECHA
También podemos filtrar por fecha o día. Por ejemplo, el siguiente comando sirve para mostrar los logs del sistema desde el comienzo del día de hoy:
raul@debian:~$ sudo journalctl --since today
También podemos especificar una fecha y hora concretas para consultar los registros. Por ejemplo, el siguiente comando muestra los logs del sistema desde el 19 de julio de 2026 a las 08:00 horas:
raul@debian:~$ sudo journalctl --since "2026-07-19 08:00:00"
También podemos consultar los registros correspondientes a un periodo de tiempo relativo. Por ejemplo, el siguiente comando permite mostrar los logs desde el día de ayer hasta el comienzo del día de hoy:
raul@debian:~$ sudo journalctl --since yesterday --until today
7.- MOSTRAR LOS ERRORES DE LOS LOGS
También podemos filtrar los logs según su nivel de prioridad. Por ejemplo, el siguiente comando muestra únicamente los mensajes de error registrados en el sistema:
raul@debian:~$ sudo journalctl -p err
Si queremos obtener información más amplia, podemos mostrar los mensajes que tengan una prioridad de warning (advertencia) o superior:
raul@debian:~$ sudo journalctl -p warning
De esta forma, podemos centrarnos rápidamente en los mensajes que pueden indicar errores, advertencias o posibles problemas en el sistema, sin tener que revisar todos los registros disponibles.
8.- MOSTRAR LOS LOGS DEL ÚLTIMO ARRANQUE
También podemos consultar los registros asociados a un arranque concreto del sistema mediante la opción '-b'. Por ejemplo, el siguiente comando muestra los logs correspondientes al arranque actual:
raul@debian:~$ sudo journalctl -b
Si queremos consultar los registros del arranque anterior, podemos utilizar '-1' junto con '-b':
raul@debian:~$ sudo journalctl -b -1
De esta forma, podemos comparar los registros del arranque actual con los de arranques anteriores, algo especialmente útil para diagnosticar problemas que aparecen durante el inicio del sistema.
9.- MOSTRAR LOS LOGS DEL KERNEL
También podemos consultar específicamente los mensajes generados por el kernel de Linux utilizando la opción '-k'.
raul@debian:~$ journalctl -k
Esta opción resulta especialmente útil para diagnosticar problemas relacionados con el hardware, controladores (drivers) o dispositivos detectados por el sistema.
10.- MOSTRAR LOS LOGS COMO TEXTO PLANO
También podemos evitar que journalctl utilice el paginador para mostrar los resultados directamente en la terminal. Para ello, utilizamos la opción --no-pager:
raul@debian:~$ journalctl --no-pager
11.- BORRAR LOGS ANTIGUOS
También podemos liberar espacio ocupado por los registros almacenados por 'systemd-journald' utilizando la opción '--vacuum'. Por ejemplo, el siguiente comando elimina los archivos de logs que tengan más de 7 días de antigüedad:
raul@debian:~$ sudo journalctl --vacuum-time=7d
Otra posibilidad es establecer un límite máximo de espacio en disco para los logs. El siguiente comando elimina archivos antiguos hasta conseguir que el espacio utilizado por los registros archivados quede por debajo de 500 MB:
raul@debian:~$ sudo journalctl --vacuum-size=500M
Estas opciones son útiles para gestionar el espacio en disco ocupado por los registros y evitar que los logs antiguos consuman una cantidad excesiva de almacenamiento.
12.- LOS COMANDOS MÁS UTILIZADOS
A continuación, os hago un resumen de los comandos más utilizados en la gestión de logs, con journalctl:
journalctl # Mostrar todos los logs
journalctl -f # Seguir los logs en tiempo real
journalctl -n 50 # Últimos 50 registros
journalctl -u <servicio> # Logs de un servicio
journalctl -b # Último arranque
journalctl -b -1 # Arranque anterior
journalctl -k # Logs del kernel
journalctl -p err # Solo errores
journalctl --since today # Registros de hoy
ENJOY!