Búsqueda de sitios web

Administrar mensajes de registro en Systemd usando Journalctl [Guía completa]


Systemd es un administrador de sistemas y servicios de última generación para sistemas Linux: un reemplazo del demonio init destinado a iniciar procesos en paralelo durante el arranque del sistema. Ahora es compatible con varias distribuciones principales actuales, incluidas Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etc.

Anteriormente explicamos la historia detrás de "init" y "systemd"; donde discutimos qué son los dos demonios, por qué 'init' técnicamente necesitaba ser reemplazado por 'systemd', así como las características principales de systemd.

Una de las principales ventajas de systemd sobre otros sistemas de inicio comunes es la compatibilidad con la gestión centralizada del sistema y el registro de procesos mediante un diario. En este artículo, aprenderemos cómo administrar y ver mensajes de registro en systemd usando el comando journalctl en Linux.

Importante: antes de continuar con esta guía, es posible que desee aprender cómo administrar servicios y unidades 'Systemd' usando el comando 'Systemctl', y también crear y ejecutar nuevos unidades de servicio en systemd usando scripts de shell en Linux. Sin embargo, si está de acuerdo con todo lo anterior, continúe leyendo.

Configuración de Journald para recopilar mensajes de registro en Systemd

journald es un demonio que recopila y escribe entradas de diario de todo el sistema; Estos son esencialmente mensajes de arranque, mensajes del kernel y de syslog o varias aplicaciones y almacena todos los mensajes en una ubicación central: el archivo de diario.

Puede controlar el comportamiento de journald a través de su archivo de configuración predeterminado: /etc/systemd/journald.conf que se genera en el momento de la compilación. Este archivo contiene opciones cuyos valores puede cambiar para adaptarse a los requisitos de su entorno local.

A continuación se muestra un ejemplo de cómo se ve el archivo, visto usando el comando cat.

cat /etc/systemd/journald.conf 
See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

Tenga en cuenta que varias instalaciones de paquetes y extractos de configuración de uso en /usr/lib/systemd/*.conf.d/ y las configuraciones de tiempo de ejecución se pueden encontrar en /run/systemd/journald.conf. d/*.conf que no necesariamente utilizará.

Habilitar el almacenamiento de datos del diario en disco

Varias distribuciones de Linux, incluido Ubuntu y sus derivados, como Linux Mint, no permiten el almacenamiento persistente de mensajes de arranque en el disco de forma predeterminada.

Es posible habilitar esto configurando la opción “Almacenamiento” en “persistente” como se muestra a continuación. Esto creará el directorio /var/log/journal y todos los archivos del diario se almacenarán en él.

sudo vi /etc/systemd/journald.conf 
OR
sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

Para configuraciones adicionales, encuentre el significado de todas las opciones que se supone que deben configurarse en la sección “[Diario]” escribiendo.

man journald.conf

Configuración de la hora correcta del sistema mediante el comando Timedatectl

Para una gestión de registros confiable en systemd utilizando el servicio journald, asegúrese de que la configuración de hora, incluida la zona horaria, sea correcta en el sistema.

Para ver la configuración actual de fecha y hora en su sistema, escriba.

timedatectl 
OR
timedatectl status

Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Para configurar la zona horaria correcta y posiblemente la hora del sistema, utilice los siguientes comandos.

sudo timedatectl set-timezone  Africa/Kampala
sudo timedatectl set-time “13:50:00”

Visualización de mensajes de registro mediante el comando Journalctl

journalctl es una utilidad que se utiliza para ver el contenido del diario systemd (que está escrito por el servicio journald).

Para mostrar todos los registros recopilados sin ningún filtrado, escriba.

journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel:   Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel:   AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel:   Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

Ver mensajes de registro basados en botas

Puede mostrar una lista de números de inicio (relativos al inicio actual), sus ID y las marcas de tiempo del primer y último mensaje correspondiente al inicio con la opción --list-boots.

journalctl --list-boots

-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1 

Para ver las entradas del diario del inicio actual (número 0), use el modificador -b de esta manera (igual que el resultado de muestra anterior).

journalctl -b

y para ver un diario del inicio anterior, use el puntero relativo -1 con la opción -b como se muestra a continuación.

journalctl -b -1

Alternativamente, use el ID de arranque como este.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Filtrado de mensajes de registro según el tiempo

Para usar la hora en formato de hora universal coordinada (UTC), agregue las opciones --utc de la siguiente manera.

journalctl --utc

Para ver todas las entradas desde una fecha y hora determinadas, p. 15 de junio de 2017 a las 8:15 a. m., escriba este comando.

journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday

Ver mensajes de registro recientes

Para ver los mensajes de registro recientes (10 de forma predeterminada), use el indicador -n como se muestra a continuación.

journalctl -n
journalctl -n 20 

Visualización de mensajes de registro generados por el kernel

Para ver solo mensajes del kernel, similar a la salida del comando dmesg, puede usar el indicador -k.

journalctl -k 
journalctl -k -b 
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Visualización de mensajes de registro generados por unidades

Para poder ver todas las entradas del diario de una unidad en particular, utilice el interruptor -u de la siguiente manera.

journalctl -u apache2.service

Para llegar al inicio actual, escriba este comando.

journalctl -b -u apache2.service

Para mostrar registros del inicio anterior, use esto.

journalctl -b -1 -u apache2.service

A continuación se muestran algunos otros comandos útiles:

journalctl -u apache2.service  
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday

Visualización de mensajes de registro generados por procesos

Para ver los registros generados por un proceso específico, especifique su PID de esta manera.

journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday

Visualización de mensajes de registro generados por ID de usuario o grupo

Para ver los registros generados por un usuario o grupo específico, especifique su ID de usuario o grupo de esta manera.

journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today

Ver registros generados por un archivo

Para mostrar todos los registros generados por un archivo (posiblemente un ejecutable), como el ejecutable D-Bus o los ejecutables bash, simplemente escriba.

journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Ver mensajes de registro por prioridad

También puede filtrar la salida según las prioridades de los mensajes o los rangos de prioridad utilizando el indicador -p. Los valores posibles son: 0 – emerg, 1 – alerta, 2 – crítico, 3 – err, 4 – advertencia, 5 – aviso, 6 – información, 7 – depuración):

journalctl -p err

Para especificar un rango, utilice el siguiente formato (emerg a advertencia).

journalctl -p 1..4
OR
journalctl -p emerg..warning

Ver mensajes de registro en tiempo real

Prácticamente puedes observar los registros mientras se escriben con la opción -f (similar a la funcionalidad tail -f).

journalctl -f

Manejo del formato de visualización del diario

Si desea controlar el formato de salida de las entradas del diario, agregue el indicador -o y use estas opciones: cat, export, json, json-pretty, json-sse, short, short-iso, breve, monótono, breve y detallado (consulte el significado de las opciones en la página de manual:

La opción cat muestra el mensaje real de cada entrada del diario sin ningún metadato (marca de tiempo, etc.).

journalctl -b -u apache2.service -o cat

Gestión de revistas en un sistema

Para comprobar la coherencia interna del archivo de diario, utilice la opción --verify. Si todo está bien, el resultado debería indicar PASA.

journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Eliminar archivos de diario antiguos

También puede mostrar el uso actual del disco de todos los archivos de diario con las opciones --disk-usage. Muestra la suma del uso del disco de todos los archivos de diario archivados y activos:

journalctl --disk-usage

Para eliminar archivos de diario antiguos (archivados), ejecute los siguientes comandos:

sudo journalctl --vacuum-size=50M  #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years	#delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4     #delete files so that no more than the specified number of separate journal files remain in storage location

Archivos de diario rotativos

Por último, pero no menos importante, puede indicarle a journald que rote los archivos de diario con la opción --rotate. Tenga en cuenta que esta directiva no regresa hasta que finaliza la operación de rotación:

sudo journalctl --rotate

Para obtener una guía de uso detallada y opciones, consulte la página de manual de journalctl de la siguiente manera.

man journalctl

Consulte algunos artículos útiles.

  1. Gestión del proceso y servicios de inicio del sistema (SysVinit, Systemd y Upstart)
  2. Petiti: una herramienta de análisis de registros de código abierto para administradores de sistemas Linux
  3. Cómo configurar y administrar la rotación de registros usando Logrotate en Linux
  4. lnav: observe y analice los registros de Apache desde una terminal de Linux

Eso es todo por ahora. Utilice los comentarios a continuación para hacer cualquier pregunta o agregar sus ideas sobre este tema.