¿Qué es journalctl y qué puede hacer?
journalctl
permite gestionar y analizar los registros del sistema en Linux. La herramienta ofrece funciones de supervisión de las actividades del sistema, solución de problemas o de seguimiento de registros en tiempo real, así como la visión detallada de los datos de registro. Además, journalctl
resulta indispensable a la hora de diagnosticar los problemas del sistema.
¿Qué es journalctl?
journalctl
es una eficiente herramienta para consultar y mostrar registros de eventos o ficheros log en Linux. journalctl
se constituye como un componente clave de systemd, administrador de sistemas y servicios, que muchas distribuciones modernas de Linux, como Ubuntu, Fedora y Arch Linux, utilizan por defecto. El nombre “journalctl” se compone de “journal” (registro) y “ctl” (control), términos que hacen referencia a su función de herramienta de control y análisis de registros.
journalctl
permite el acceso al registro del sistema, gestionado por systemd-journald
. El registro del sistema es una colección centralizada de mensajes y eventos que tienen lugar mientras el sistema Linux está en funcionamiento. A diferencia de los registros tradicionales basados en texto, journalctl
ofrece una forma estructurada y eficiente de buscar, filtrar y mostrar datos de registro en tiempo real. Gracias a ello, es posible diagnosticar problemas o monitorizar el estado del sistema.
journalctl
guarda los archivos de registro en formato binario, pues este tipo de archivo es más compacto y eficiente que su equivalente basado en texto. Esto permite, a pesar de la gran cantidad de datos registrados, las búsquedas rápidas de eventos específicos o de información. Además, la estructura y encriptación de este tipo de archivos ofrecen mayor seguridad, pues dificultan la manipulación de los datos de registro.
Personalizar el espacio de almacenamiento de los archivos de registro
journalctl
puede utilizarse para limitar y configurar el espacio que ocupan los archivos de registro en el disco duro. Si se quiere llevar a cabo la citada configuración, hay que usar la configuración del servicio systemd-journald. Los ajustes de configuración se guardan en /etc/systemd/journald.conf
, un archivo en el que se pueden ver las siguientes entradas:
-
SystemMaxUse
: limita el espacio de almacenamiento para registros en el directorio del sistema. -
RuntimeMaxUse
: limita el espacio de almacenamiento para registros en el directorio temporal.
Para establecer el límite de espacio de almacenamiento, puedes incluir las siguientes líneas, que puedes ir modificando según necesites:
[Journal]
SystemMaxUse=50M
RuntimeMaxUse=50M
bashLos valores de este ejemplo (50M) pueden cambiarse según sea necesario. También se pueden cambiar las unidades: K
(kilobytes), M
(megabytes), G
(gigabytes) o T
(terabytes). Después de editar el fichero de configuración, hay que reiniciar systemd-journald para que los cambios se hagan efectivos:
sudo systemctl restart systemd-journald
bashAplicando los pasos anteriores, habrás configurado systemd-journald para limitar el espacio de almacenamiento de los archivos de registro. Asegúrate de que el límite establecido es suficiente para almacenar datos de registro necesarios, sin que ello consuma demasiado espacio en el disco duro. Ten en cuenta que los registros más antiguos se borran automáticamente cuando se llega al límite fijado.
Determinar el uso del disco duro
Antes de configurar el espacio de almacenamiento para los archivos de registro, puedes comprobar primero cuánto espacio de almacenamiento ocupa actualmente el “journal”. Para ello, hay que usar el argumento --disk-usage
:
journalctl --disk-usage
Journals take up 8.0M on disk.
bashBorrar entradas de registro antiguas
Si el Journal ocupa demasiado espacio en disco, puedes borrar las entradas de registro antiguas. Para ello, hay dos formas de proceder:
Con --vacuum-size
puedes reducir el tamaño del Journal especificando un tamaño. En este caso, se van eliminando todas las entradas antiguas hasta que el Journal ocupe el tamaño deseado.
sudo journalctl --vacuum-tamaño=1G
bashComo alternativa, se puede reducir el tamaño de Journal especificando un periodo de almacenamiento de archivos con la opción --vacuum-time
. Todas las entradas anteriores al periodo especificado se eliminarán. Si deseas conservar las entradas de Journal del último año, por ejemplo, puedes introducir:
sudo journalctl --vacuum-time=1years
bash¿Para qué sirve journalctl?
Una de las funciones más importantes de journalctl
es el filtrado de entradas de registro según distintos criterios. Gracias a ella, se puede buscar información específica e identificar problemas con mayor rapidez. A continuación, te presentamos algunas de las opciones de filtrado más comunes de journalctl
.
Mostrar registros
Con el comando journalctl
se muestran las entradas de registro del sistema actual en orden cronológico inverso. Si introduces journalctl -f
o journalctl --follow
, podrás ver las entradas en tiempo real. Las nuevas entradas se muestran automáticamente en el orden en que llegan.
La cantidad de datos que se te muestre puede resultar difícil de manejar (desde decenas a centenares de líneas), si bien depende del tiempo que lleve systemd ejecutándose en tu sistema. Para encontrar lo que estás buscando de forma eficiente, puedes filtrar los registros aún más utilizando otros comandos de Linux.
Filtrar por tiempo
journalctl se puede utilizar para filtrar los registros a partir de un periodo de tiempo específico, lo que permite obtener de forma más eficiente la información relevante.
Filtrar por secuencias de arranque
Filtrar los registros por procesos de arranque es especialmente útil si se quieren comprobar eventos específicos del sistema en un momento determinado o durante un escenario de arranque concreto. Esto facilita el diagnóstico de problemas, ya que las entradas de registro se pueden limitar a un estado de sistema específico o a una configuración del sistema.
-
Arranque actual: utiliza
journalctl -b
para mostrar todas las entradas de registro recopiladas desde el último arranque. -
Arranques anteriores: utiliza la opción
-b
seguida de una cifra para mostrar las entradas de registro correspondientes a un arranque específico anterior. Por ejemplo, si introducesjournalctl -b 1
, se mostrará el arranque inmediatamente anterior. -
Lista de todas las secuencias de arranque disponibles: el comando
journalctl --list-boots
muestra una lista de los procesos de arranque disponibles con sus respectivas identificaciones (ID). Puedes utilizar un ID específico para acceder a los registros asociados a un proceso de arranque concreto.
Mientras que en algunas distribuciones de Linux el almacenamiento de procesos de arranque anteriores está activado por defecto, en otras debe activarse manualmente. Para ello, con el comando sudo mkdir -p /var/log/journal
, puedes crear un directorio en el que se almacenarán los registros.
Como alternativa, puedes editar el archivo de configuración del Journal con sudo nano /etc/systemd/journald.conf
. A continuación, establece la opción Storage=
en persistent
para habilitar el registro persistente:
. . .
[Journal]
Storage=persistent
bashFiltrar por ventanas de tiempo
A veces puede ser necesario mostrar las entradas de registro de un periodo de tiempo específico. journalctl
ofrece las opciones --since
y --until
, que pueden utilizarse para restringir las entradas a un periodo de tiempo concreto. Para ello, se aplica el formato de tiempo YYYY-MM-DD HH:MM:SS
. El comando para, por ejemplo, mostrar todas las entradas de registro entre el 1 de enero de 2023 a las 12:00 y el 2 de enero de 2023 a las 12:00, tendría el siguiente aspecto:
journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bashLa combinación de los dos comandos también puede usarse para filtrar un periodo de tiempo más corto:
journalctl --since 09:00 --until "1 hour ago"
bashComo alternativa, se pueden omitir partes del formato anterior. Por ejemplo, se puede tener acceso a todas las entradas desde un momento determinado:
journalctl --since "2023-11-16 15:25:00"
bashjournalctl
también se puede usar con valores relativos como yesterday
(ayer), today
(hoy) o tomorrow
(mañana). Para mostrar los registros de ayer, puedes introducir lo siguiente:
journalctl --since yesterday
bashFiltrar por el interés de los mensajes
La capacidad de filtrar las entradas de registro por interés de mensaje con journalctl
también es extremadamente útil, ya que permite buscar información relevante y centrarse en aspectos concretos de los registros del sistema. De esta forma es posible, entre otras cosas, realizar un diagnóstico eficiente de errores, detectar los problemas de forma temprana y monitorizar el rendimiento rápidamente.
Filtrar por prioridad
Para filtrar los registros con journalctl
según tus intereses específicos en los mensajes, puedes utilizar los niveles de gravedad de los mensajes. Para ello, puedes utilizar el nombre del nivel respectivo o su valor numérico correspondiente. Cuanto menor sea el número, más importante es el mensaje:
- 0: emerg (emergencia)
- 1: alert (alarma)
- 2: crit (crítico)
- 3: err (error)
- 4: warning (advertencia)
- 5: notice (nota)
- 6: info (información)
- 7: debug (solución de problemas)
Para filtrar los mensajes teniendo en cuenta un nivel de gravedad concreto puedes recurrir a la opción -p
. El siguiente comando, por ejemplo, solo muestra las entradas de registro con prioridad “err” (error) y superior:
journalctl -p err
bashFiltrar por unidad
Filtrar los registros por unidad con journalctl
es especialmente útil si quieres enfocarte en servicios o procesos concretos. Para ello, utiliza la opción -u
. Por ejemplo, para mostrar las entradas de registro del servidor web Apache, puedes introducir lo siguiente:
journalctl -u apache2
bashLa búsqueda se puede refinar aún más utilizando los valores de tiempo relativo. Si, por ejemplo, quieres saber si se ha ejecutado algún servicio hoy, puedes introducir lo siguiente:
journalctl -u apache2 --since today
bashCon journalctl
, también puedes combinar registros de datos de diferentes unidades. Si tu proceso de Nginx está conectado a una unidad PHP-FPM, por ejemplo, se pueden combinar las entradas de ambos en orden cronológico. El comando sigue la sintaxis que se muestra:
journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bashFiltrar por ID de proceso, usuario o de grupo
journalctl
también puede usarse para filtrar entradas de registro por ID de proceso, usuario o grupo. Si conoces el ID del proceso (PID) que quieres buscar, puedes filtrar la información que deseas usando la opción _PID
. Por ejemplo, si el PID es 8088, el comando tendría la sintaxis que se muestra:
journalctl _PID=8088
bashSi lo deseas, también puedes filtrar por _UID
o _GID
para tener acceso a las entradas que fueron registradas por un usuario o grupo específico. Para conocer tu nombre de usuario puedes utilizar el comando id -u www-data
, que en este caso muestra la salida 33.
id -u www-data
33
bashA continuación, puedes filtrar por _UID
, pues ya conoces el ID de usuario:
journalctl _UID=33 --since today
bashPara ver para qué ID de grupo (GID) se han creado entradas, puedes utilizar la opción -F
, que muestra todos los valores guardados para el campo “ID de grupo”:
journalctl -F _GID
32
99
102
133
81
84
100
0
124
87
bashFiltrar por campo de componente
Filtrar por el campo componente es sumamente útil para centrarse en aplicaciones, servicios o procesos específicos. El campo componente lo utilizan normalmente distintos servicios o componentes de software para identificar información específica en los registros. Este tipo de filtrado permite limitar las entradas de registro a un componente, aplicación o unidad de servicio concretos. Por ejemplo, para filtrar las entradas que contienen el archivo ejecutable bash
, debes introducir el siguiente comando:
journalctl /usr/bin/bash
bashMostrar mensajes del kernel
Filtrar entradas de registro por mensajes del kernel con journalctl
es una forma efectiva de analizar información específica sobre el funcionamiento del kernel en un sistema Linux. Los mensajes del kernel pueden ofrecer indicios sobre problemas de hardware, conflictos de controladores u otros eventos del sistema.
Los mensajes del kernel encontrados en dmesg
también pueden filtrarse desde el journal. Pueden mostrarse con las opciones -k
o --dmesg
:
journalctl -k
bashLos mensajes del kernel del proceso de arranque actual son los que se muestran por defecto. Los mensajes de un proceso de arranque alternativo pueden filtrarse con las opciones de selección de arranque ya conocidas. Por ejemplo, si deseas ver los mensajes del kernel de los últimos cinco procesos de arranque, introduce lo siguiente:
journalctl -k -b -5
bashCambiar la visualización del Journal en journalctl
Personalizar la visualización en journalctl
permite a los usuarios buscar en los registros de una forma más concreta y, de esta forma, encontrar la información deseada con mayor rapidez. Con la visualización de datos de registro en tiempo real o de un periodo concreto, se pueden reconocer rápidamente los errores y los problemas en el sistema.
Acortar o ampliar la salida
Además, es posible personalizar la forma en que journalctl
muestra los datos. La salida puede acortarse o ampliarse. De forma predeterminada, journalctl
muestra la entrada completa en el pager y muestra tantas entradas como sea posible en la parte derecha de la pantalla. Esto se puede acortar con la opción --no-full
:
journalctl --no-full
bashPuedes ampliar la visualización utilizando la opción -a
:
journalctl -a
bashEstablecer journalctl a la salida estándar
En journalctl
, la salida de registro se muestra por defecto usando un pager, por ejemplo less
. Esto permite ver la salida paso a paso, lo que favorece navegar a través de archivos de registro más extensos. A veces, sin embargo, puede ser necesario mostrar los registros directamente en la salida estándar. Para ello, hay que escribir lo siguiente:
journalctl --no-pager
bashConfigurar formatos de salida
Hay varias opciones disponibles para personalizar el formato de salida de los registros en journalctl
. Para realizar esta configuración, se puede utilizar la opción -o
con el identificador de formato correspondiente. Por ejemplo, para que las entradas de registro salgan en JSON:
journalctl -b -u nginx -o json
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :
bashLos formatos que se pueden especificar en journalctl
son:
- cat: muestra solo el campo del mensaje.
- export: este formato binario es adecuado para transferir o guardar datos.
- json: utiliza el formato JSON estándar con una entrada por línea.
- json-pretty: JSON formateado para una mejor legibilidad.
- json-sse: salida con formato JSON encapsulado que permite añadir eventos enviados por el servidor.
- short: salida estándar estilo syslog.
- short-iso: formato estándar para mostrar marcas de tiempo ISO-8601.
- short-monotonic: formato estándar con marcas de tiempo monótonas.
- short-precise: formato estándar con precisión de microsegundos.
- verbose: muestra todos los campos del journal disponibles para la entrada correspondiente.
Monitorizar procesos activos
Al monitorizar procesos con journalctl
, se utiliza el programa de línea de comandos tail
para rastrear los registros en tiempo real y tener acceso a las entradas más recientes. De este modo, es más sencillo hacer un seguimiento de los eventos del sistema en tiempo real y, en consecuencia, reaccionar con rapidez a cualquier problema que surja.
Mostrar registros actuales
La opción -n
sirve para acceder a un número específico de registros de datos. La opción funciona exactamente igual que tail -n
. Con el siguiente comando, se muestran por defecto los últimos 10 registros:
journalctl -n
bashEl número de registros que se muestran se puede configurar en cada caso. Con el siguiente comando, se pueden consultar, por ejemplo, 20:
journalctl -n 20
bash- Rápido, seguro, flexible y escalable
- Certificado SSL/DDoS incluido
- Dominio y asesor personal incluidos