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.
- Gestión del proceso y servicios de inicio del sistema (SysVinit, Systemd y Upstart)
- Petiti: una herramienta de análisis de registros de código abierto para administradores de sistemas Linux
- Cómo configurar y administrar la rotación de registros usando Logrotate en Linux
- 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.