Una ventana de terminal en el escritorio gráfico de una computadora portátil Linux.

El registro del sistema Linux cambió con la introducción de systemdAprenda a usar el journalctlcomando para leer y filtrar mensajes de registro del sistema.

Registro centralizado

No ajeno a la controversia, el systemd administrador de sistemas y servicios introdujo un cambio significativo en la forma en que se recopilan los registros del sistema. Los registros solían estar ubicados en diferentes lugares del sistema de archivos de acuerdo con el servicio o demonio que los estaba creando. Pero todos tenían algo en común. Eran archivos de texto sin formato.

Con systemdtodo el sistema, los archivos de registro de arranque y del kernel se recopilan y administran mediante una solución de registro central y dedicada. El formato en el que se almacenan es binario. Una cosa que esto facilita es poder extraer los datos en diferentes formatos, como JSON, como veremos.

También puede facilitar la referencia cruzada de información relacionada que se hubiera registrado previamente en archivos de registro separados. Debido a que los datos ahora se guardan en un solo diario, los datos de varias fuentes de interés se pueden seleccionar y mostrar en una sola lista entrelazada de entradas.

journalctl  es la herramienta que se utiliza para trabajar con la revista.

journalctl sin lujos

Puede invocar journalctlsin parámetros de línea de comando:

journalctl

journalctl en una ventana de terminal

journalctlmuestra el diario completo, con las entradas más antiguas en la parte superior de la lista. La lista se muestra en less, lo que le permite buscar y buscar con las funciones de navegación habituales de  lessTambién puede usar las  teclas Left ArrowRight Arrowpara desplazarse hacia los lados para leer entradas de registro amplias.

Salida de journalctl en una ventana de terminal

Al presionar la End tecla, se irá directamente al final de la lista y las entradas de registro más recientes.

Salida de journalctl en una ventana de terminal que muestra las entradas más recientes

Presione Ctrl+Cpara salir.

Aunque journalctlse puede llamar sin usar sudose asegurará de ver todos los detalles dentro del registro si usa sudo.

sudo journalctl

sudo journalctl en una ventana de terminal

Si es necesario, puede hacer que journalctlenvíe su salida a la ventana de terminal en lugar de hacerlo less, usando la  --no-pageropción.

sudo journalctl --no-pager

sudo journalctl --no-pager en una ventana de terminal

La salida se desplaza rápidamente a través de la ventana de la terminal y regresa al símbolo del sistema.

salida de sudo journalctl --no-pager en una ventana de terminal

Para limitar el número de líneas que journalctldevuelve, use la -nopción (líneas). Pidamos diez líneas de salida:

sudo journalctl -n 10

sudo journalctl -n 10 en una ventana de terminal

Siguiendo las actualizaciones de la revista

Para hacer que se journalctlmuestren las entradas más recientes a medida que llegan al diario, use la -fopción (seguir).

sudo journalctl -f

sudo journalctl -f en una ventana de terminal

salida de sudo journalctl -f en una ventana de terminal

La entrada más reciente tiene una marca de tiempo de 07:09:07. A medida que se lleva a cabo una nueva actividad, las nuevas entradas se agregan al final de la pantalla. Actualizaciones casi en tiempo real: ¡genial!

salida de sudo journalctl -f en una ventana de terminal con nuevas entradas

A las 07:09:59, una aplicación llamada geek-appinyectó una entrada de registro en el diario que decía "Nuevo mensaje de HTG".

Cambio del formato de visualización

Debido a que el diario es un archivo binario, los datos que contiene deben traducirse o analizarse en texto antes de que se puedan mostrar. Con diferentes analizadores, se pueden crear diferentes formatos de salida a partir de los mismos datos de origen binario. Hay varios formatos diferentes que se journalctlpueden utilizar.

La salida predeterminada es el formato corto, que es muy similar al formato de registro del sistema clásico. Para solicitar explícitamente el formato corto, use la -oopción (salida) con el shortmodificador.

sudo journalctl -n 10 -o corto-completo

sudo journalctl -n 10 -o corto en una ventana de terminal

De izquierda a derecha, los campos son:

  • La hora en que se creó el mensaje, en hora local.
  • El nombre de host.
  • El nombre del proceso. Este es el proceso que generó el mensaje.
  • El mensaje de registro.

Para obtener una marca de fecha y hora completa, utilice el short-fullmodificador:

sudo journalctl -n 10 -o corto-completo

sudo journalctl -n 10 -o short-full en una ventana de terminal

Los formatos de fecha y hora en esta salida son el formato en el que debe proporcionar fechas y horas cuando selecciona mensajes de registro por período, como veremos en breve.

Para ver todos los metadatos que acompañan a cada mensaje de registro, use el verbosemodificador.

sudo journalctl -n 10 -o detallado

sudo journalctl -n 10 -o detallado en una ventana de terminal

Hay muchos campos posibles, pero es raro que todos los campos estén presentes en un mensaje.

Salida de sudo journalctl -n 10 -o detallado en una ventana de terminal

Un campo que vale la pena discutir es el Prioritycampo. En este ejemplo, tiene un valor de 6. El valor representa la importancia del mensaje:

  • 0 : Emergencia. El sistema no se puede utilizar.
  • 1 : Alerta. Se ha marcado una condición que debe corregirse de inmediato.
  • 2 : Crítico. Esto cubre bloqueos, volcados de núcleo y fallas importantes en aplicaciones primarias.
  • 3 : Error. Se ha informado de un error, pero no se considera grave.
  • 4 : Advertencia. Señala una condición que, si se ignora, puede convertirse en un error.
  • 5 : Aviso. Se utiliza para informar eventos que son inusuales, pero no errores.
  • 6 : Información. Mensajes operativos regulares. Estos no requieren acción.
  • 7 : depurar. Los mensajes se colocan en aplicaciones para que les sea más fácil depurarlos.

Si desea que la salida se presente como objetos de notación de objetos JavaScript (JSON) correctamente formados, use el jsonmodificador:

sudo journalctl -n 10 -o json

sudo journalctl -n 10 -o json en una ventana de terminal

Cada mensaje se envuelve correctamente como un objeto JSON bien formado y se muestra un mensaje por línea de salida.

Para tener la salida JSON bastante impresa, use el json-prettymodificador.

sudo journalctl -n 10 -o json-pretty

sudo journalctl -n 10 -o json-pretty en una ventana de terminal

Cada objeto JSON se divide en varias líneas, con cada par nombre-valor en una nueva línea.

salida de sudo journalctl -n 10 -o json-pretty en una ventana de terminal

Para ver solo los mensajes de entrada de registro, sin marcas de tiempo u otros metadatos, use el catmodificador:

sudo journalctl -n 10 -o gato

sudo journalctl -n 10 -o cat en una ventana de terminal

Este formato de visualización puede dificultar la identificación de qué proceso generó el evento de registro, aunque algunos mensajes contienen una pista.

Salida de sudo journalctl -n 10 -o cat en una ventana de terminal

Selección de mensajes de registro por período de tiempo

Para limitar la salida journalctla un período de tiempo que le interese, use las  opciones -S (desde) y -U(hasta).

Para ver las entradas del registro desde una fecha y hora en particular, use este comando:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S "2020-91-12 07:00:00" en una ventana de terminal

La pantalla contiene solo mensajes que llegaron después de la fecha y hora del comando.

Salida de sudo journalctl -S "2020-91-12 07:00:00" en una ventana de terminal

Para definir un período de tiempo sobre el que desea informar, use las opciones -S(desde) y -U(hasta) juntas. Este comando analiza los mensajes de registro de un período de tiempo de 15 minutos:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00" en una ventana de terminal

Esta es una excelente combinación de uso si sabe que sucedió algo extraño en su sistema y aproximadamente cuándo sucedió.

salida de sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00" en una ventana de terminal

Uso de períodos de tiempo relativos

Puede utilizar direcciones relativas cuando seleccione sus períodos de tiempo. Eso significa que puedes decir cosas como "muéstrame todos los eventos desde hace un día hasta ahora". Esto es exactamente lo que significa este comando. La "d" significa "día" y "-1" significa un día en el pasado.

sudo journalctl -S -1d

sudo journalctl -S -1d en una ventana de terminal

Los mensajes de registro se enumeran desde las 00:00:00 de ayer hasta "ahora".

Salida de sudo journalctl -S -1d en una ventana de terminal

Si desea investigar algo que sucedió en el pasado reciente, puede especificar un período de tiempo relativo medido en horas. Aquí estamos revisando los mensajes de registro de la última hora:

sudo journalctl -S -1h

sudo journalctl -S -1h en una ventana de terminal

Se muestran los mensajes de la última hora. También puede utilizar "m" para establecer períodos de tiempo relativos medidos en minutos y "w" para semanas.

Salida de sudo journalctl -S -1h en una ventana de terminal

journalctlentiende todayyesterdaytomorrowEstos modificadores proporcionan una forma práctica de especificar períodos de tiempo comunes. Para ver todos los eventos que sucedieron ayer, use este comando:

sudo journalctl -S ayer

sudo journalctl - S ayer en una ventana de terminal

Todos los eventos de registro de diario que ocurrieron ayer, hasta la medianoche 00:00:00, se recuperan y se muestran.

Salida de sudo journalctl - S ayer en una ventana de terminal

Para ver todos los mensajes de registro recibidos hoy hasta ahora, use este comando:

sudo journalctl -S hoy

sudo journalctl -S today en una ventana de terminal

Se muestra todo desde las 00:00:00 hasta el momento en que se emite el comando.

Salida de sudo journalctl -S hoy en una ventana de terminal

Puede mezclar los diferentes modificadores de período de tiempo. Para ver todo desde hace dos días hasta el comienzo de hoy, use este comando:

sudo journalctl -S -2d -U hoy

sudo journalctl -S -2d -U hoy en una ventana de terminal

Se recupera y muestra todo desde anteayer hasta hoy.

Salida de sudo journalctl -S -2d -U hoy en una ventana de terminal

Seleccionar mensajes de registro por campos de datos

Puede buscar mensajes de registro que coincidan con una amplia gama de campos de diarioEstas búsquedas intentan encontrar coincidencias en los metadatos adjuntos a cada mensaje. Se recomienda que consulte la lista de campos y elija los que le resulten más útiles.

Tenga en cuenta que si una aplicación completa todos los campos o no, depende totalmente de los autores de la aplicación. No puede garantizar que se completarán todos los campos.

Todos los modificadores de campo de diario se utilizan de la misma forma. Usaremos algunos en nuestros ejemplos a continuación. Para buscar mensajes de registro de una aplicación específica, use el _COMMmodificador (comando). Si también usa la -fopción (seguir), journalctlrastreará los mensajes nuevos de esta aplicación a medida que lleguen.

sudo journalctl -f _COMM = aplicación-geek

sudo journalctl -f _COMM = geek-app en una ventana de terminal

Puede buscar entradas de registro utilizando el ID de proceso del proceso que generó el mensaje de registro. Utilice el pscomando para encontrar el ID de proceso del demonio o la aplicación que va a buscar.

sudo journalctl _PID = 751

sudo journalctl _PID = 751 en una ventana de terminal

En la máquina utilizada para investigar este artículo, el demonio SSH es el proceso 751.

salida de sudo journalctl _PID = 751 en una ventana de terminal

También puede buscar por Id. De usuarioEste es el ID de usuario de la persona que inició la aplicación o comando, o que es el propietario del proceso.

sudo journalctl _UID = 1000

sudo journalctl _UID = 1000 en una ventana de terminal

Todos los mensajes asociados con cualquier otro ID de usuario se filtran. Solo se muestran los mensajes relacionados con el usuario 1000:

salida de sudo journalctl _UID = 1000 en una ventana de terminal

Otra forma de buscar mensajes de registro relacionados con una aplicación específica es proporcionar la ruta al ejecutable.

sudo journalctl / usr / bin / anacron

sudo journalctl / usr / bin / anacron en una ventana de terminal

Todos los anacron mensajes de registro del programador se recuperan y se muestran.

Salida de sudo journalctl / usr / bin / anacron en una ventana de terminal

Para facilitar la búsqueda, podemos solicitar journalctluna lista de todos los valores que contiene, para cualquiera de los campos de la revista.

Para ver los ID de usuario para los que se journalctlhan registrado mensajes de registro, utilice la -Fopción (campos) y pase el _UIDidentificador de campo.

journalctl -F _UID

journalctl -F _UID en una ventana de terminal

Hagamos eso de nuevo y miremos los ID de grupo (GID):

journalctl -F _GID

journalctl -F _GID en una ventana de terminal

Puede hacer esto con cualquiera de los identificadores de campo de diario.

Listado de mensajes del kernel

Hay una forma incorporada de aislar los mensajes del kernel rápidamente. No necesita buscarlos y aislarlos usted mismo. La -kopción (kernel) elimina todos los demás mensajes y le brinda una vista instantánea de las entradas del registro del kernel.

sudo journalctl -k

sudo journalctl -k en una ventana de terminal

El resaltado refleja la importancia del mensaje, según los valores en el Prioritycampo.

Salida de sudo journalctl -k en una ventana de terminal

Revisión de mensajes de arranque

Si tiene un problema relacionado con el arranque que desea investigar, lo journalctltiene cubierto. Quizás ha agregado nuevo hardware y no responde, o un componente de hardware que funcionaba anteriormente ya no funciona después de la última actualización del sistema.

Para ver las entradas de registro relacionadas con su último arranque, use la -bopción (arranque):

journalctl -b

journalctl -b en una ventana de terminal

Se muestran las entradas de registro del último inicio.

Salida de journalctl -b en una ventana de terminal

Cuando decimos "último arranque", nos referimos al proceso de arranque que dio vida a su computadora para su sesión actual. Para ver los arranques anteriores, puede utilizar un número para indicar en journalctlqué arranque está interesado. Para ver el tercer arranque anterior, utilice este comando:

journalctl -b 3

Salida de journalctl -b 3 en una ventana de terminal

Generalmente, si ha tenido un problema y ha tenido que reiniciar su máquina, es una secuencia de arranque anterior que le interesa. Así que esta es una forma de comando común.

Salida de journalctl -b 3 en una ventana de terminal

Es fácil confundirse con la secuencia de botas. Para ayudar, podemos pedir journalctlque se enumeren las botas que tiene registradas en su diario, usando la --list-bootsopción.

journalctl --list-boots

journalctl --list-boots en una ventana de terminal

Puede identificar el inicio para el que desea ver los mensajes a partir del sello de fecha y hora, y luego usar el número en la columna de la izquierda para obtener los mensajes de registro para esa secuencia de inicio. También puede elegir el identificador de inicio de 32 bits y pasarlo a journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7 en una ventana de terminal

Los mensajes de registro de la secuencia de inicio que solicitamos se recuperan y se muestran.

salida de sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7 en una ventana de terminal

Administrar el espacio del disco duro del diario

Por supuesto, el diario y todos sus mensajes de registro se almacenan en su disco duro. Eso significa que ocuparán espacio en el disco duro. Para ver cuánto espacio ha ocupado la revista, use la --disk-usageopción.

journalctl: uso del disco

journalctl: uso del disco en una ventana de terminal

Con los discos duros actuales, 152 MB no es mucho espacio en absoluto, pero para fines de demostración, aún lo recortaremos. Hay dos formas de hacer esto. La primera es establecer un límite de tamaño al que desea que se reduzca la revista. Volverá a crecer, por supuesto, pero podemos podarlo ahora y estar listo para ese nuevo crecimiento.

Usaremos la --vacuum-sizeopción maravillosamente titulada y pasaremos el tamaño al que nos gustaría reducir el diario. Pediremos 100 MB. La forma de pensar en esto es que estamos pidiendo journalctl"tirar todo lo que puedas, pero no menos de 100 MB".

journalctl --vacío-tamaño = 100M

journalctl --vacuum-size = 100M en una ventana de terminal

La otra forma de recortar el tamaño del diario es usar la --vacuum-timeopción. Esta opción le dice journalctlque descarte los mensajes que sean más antiguos que el período que proporcionó en la línea de comando. Se puede utilizar daysweeksmonths, y years en el período de tiempo.

Eliminemos todos los mensajes anteriores a una semana:

journalctl --vacuum-time = 1weeks

journalctl --vacuum-time = 1weeks en una ventana de terminal

Datos frente a información

Los datos no son útiles a menos que pueda acceder a ellos y hacer uso de ellos. Entonces se convierte en información útil. El journalctlcomando es una herramienta flexible y sofisticada que le permite acceder a la información de interés de diversas formas.

Puede usar casi cualquier fragmento de información que tenga para ubicar los mensajes de registro que necesita.