Cómo usar el comando systemd journalctl para administrar registros
A pesar de la publicidad negativa, systemd ha aportado una gran funcionalidad nueva al sistema operativo Linux. La tala es uno de ellos. En los viejos tiempos antes de systemd, verificar los registros y solucionar problemas a veces era algo muy desagradable porque los registros de diferentes programas estaban dispersos en diferentes archivos y tenía que verificar las marcas de tiempo en todos y cada uno de ellos. Por supuesto, también había un archivo syslog, pero a veces no era tan detallado como era necesario. El systemd nos trae el demonio de diario llamado journald que permite la administración centralizada de registros. Estos registros se pueden filtrar y manipular mediante la utilidad llamada journalctl. En este artículo, analizaremos el uso básico de las utilidades.
Que es journald
Journald es un servicio que recopila y almacena registros de muchas fuentes y crea archivos de registro estructurados indexados que son fáciles de interpretar. Algunas de las fuentes que usa journald
- Mensajes de registro del kernel, a través de kmsg
- Mensajes de registro del sistema simples, a través de la libc syslog llamada
- Mensajes de registro del sistema estructurados a través de la API de Journal nativa
- Salida estándar y error estándar de los servicios del sistema
La idea es tener todos los mensajes de registro centralizados, sin importar de qué aplicación provengan.
Establecer la hora
Para que los registros sean útiles, debe tener la hora correcta del sistema. Los registros pueden tener la hora UTC o la hora local. Generalmente se guardan ambas marcas de tiempo. Así que configuremos la zona horaria primero
sudo timedatectl set-timezone Europe/Belgrade
Este comando establece la hora en la zona horaria de Europa Central, pero si se encuentra en cualquier otro lugar del mundo, solo debe ingresar al continente y presionar el tabulador para ver las ciudades que podría elegir. No importa si no es tu ciudad, yo tampoco vivo en Belgrado, es la gran ciudad más cercana. A continuación, veamos el estado de la zona horaria.
miki@ThinkPad-X220T:~$ timedatectl status Local time: Mon 2016-11-14 18:40:46 CET Universal time: Mon 2016-11-14 17:40:46 UTC RTC time: Mon 2016-11-14 17:40:46 Time zone: Europe/Belgrade (CET, +0100) Network time on: yes NTP synchronized: yes RTC in local TZ: no
1) Ver registros
Ahora que tenemos la hora correcta, continuemos viendo los registros. El comando básico para ver registros es
journalctl
Obtendrá una salida similar a esta:
-- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 18:42:51 CET Nov 13 17:38:07 ThinkPad-X220T systemd-journald[344]: Runtime journal (/run/log/ Nov 13 17:38:07 ThinkPad-X220T kernel: microcode: microcode updated early to rev
Esa es la primera línea y seguida de muchas líneas. Vemos que los registros comienzan desde el último inicio del sistema. La última vez que reinicié la computadora ayer. De forma predeterminada, journald no guarda los registros en los reinicios, porque eso haría que los archivos de registro se volvieran más grandes con el tiempo. El registro parece similar a syslog, pero tiene muchas más fuentes. Dijimos que tanto UTC como las marcas de tiempo de su zona horaria local se guardan, por lo que también puede ver los mismos registros con marcas de tiempo UTC.
journalctl --utc
Sí, sé que los registros son enormes. ¡Dijimos que los registros volverán a ser geniales! Pero son demasiado buenos, por lo que el journald tiene una característica interesante para filtrar registros.
Si desea ver los registros desde algún momento hasta ahora, debe usar el comando formateado de esta manera:
miki@ThinkPad-X220T:~$ journalctl --since "2016-11-14 19:15:00" -- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:07:51 CET Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session opene Nov 14 19:17:01 ThinkPad-X220T CRON[6049]: (root) CMD ( cd / && run-parts --re Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session close Nov 14 19:22:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo ...
2) Filtrar registros por tiempo
Esto todavía es demasiado grande, por lo que podemos hacerlos más pequeños si agregamos un operando más después de –desde, y será –hasta
miki@ThinkPad-X220T:~$ journalctl --since "2016-11-14 19:00:00" --until "2016-11-14 19:05:00" -- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:21:23 CET Nov 14 19:01:16 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo Nov 14 19:02:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo
En esos cinco minutos, solo hubo dos masajes de troncos.
Desde y hasta que las banderas aceptan las marcas de tiempo en formato AAAA-MM-DD HH: MM: SS pero esa no es la única forma. Si, por ejemplo, un usuario se queja de que su servidor no funciona en los últimos 5 minutos, puede examinar registros como este:
journalctl --since "5 minutes ago" -- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:22:21 CET Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox Nov 14 20:21:23 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox Nov 14 20:22:20 ThinkPad-X220T apport-gtk[5977]: gdk_pixbuf_composite: assertion Nov 14 20:22:21 ThinkPad-X220T systemd[3634]: Started Notification regarding a c
También comprende palabras como ayer u hoy, por lo que puede buscar registros desde ayer o hoy.
3) Configurar el registro entre reinicios
Todo esto es más útil si tiene los registros persistentes durante los reinicios. Si desea que los registros permanezcan después del inicio, debe habilitarlo manualmente. Primero cree el directorio donde se registrará
sudo mkdir -p /var/log/journal
Luego edite el archivo de configuración para registrar de forma persistente.
sudo sed -i.orig 's/#Storage=auto/Storage=persistent/g' /etc/systemd/journald.conf
Después de esto, puede reiniciar su máquina y verificar si los arranques se extienden entre los reinicios con el siguiente comando:
miki@ThinkPad-X220T:~$ journalctl --list-boots -1 7917f2c3498d4de89e94701ca8049245 Mon 2016-11-14 20:47:49 CET—Mon 2016-11-14 2 0 438c0a9258aa47fcbf88daf91106aaa3 Mon 2016-11-14 20:56:55 CET—Mon 2016-11-14 2
Reinicié la computadora dos veces y ambos arranques están registrados. Pensé que el arranque anterior también se guardaría, pero no fue así. Por lo tanto, solo se registrarán los reinicios que se realicen después de configurar los registros persistentes.
4) Administrar registros de diferentes botas
Si ahora desea ver los registros de este arranque solo, use el comando
journalctl -b
Puede usar el número de inicio para elegir un inicio específico
journalctl -b -1
O podrías usar la identificación de arranque
journalctl -b 7917f2c3498d4de89e94701ca8049245
El filtrado basado en el tiempo también funcionará
journalctl -b 0 --since "15 minutes ago"
5) Filtrado por servicio e id.
Supongamos que desea ver los registros de un solo programa. Miraré registros de fprintd
journalctl -u fprintd.service -- Logs begin at Mon 2016-11-14 20:47:49 CET, end at Mon 2016-11-14 21:28:03 CET Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Starting Fingerprint Authentication D Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Started Fingerprint Authentication Da Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: user 'miki' claiming the device: 0 Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: now monitoring fd 15 Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: device 0 claim status 0 Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: no longer monitoring fd 15 Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: released device 0 -- Reboot --
También puede filtrar registros por UID. Primero necesitas obtener el UID de tu usuario
miki@ThinkPad-X220T:~$ id -u miki 1000
Y a continuación, puede usar ese uid para filtrar registros
journalctl _UID=1000 --since "25 minutes ago"
También puede filtrar por GID
miki@ThinkPad-X220T:~$ journalctl -F _GID 30 102 130 1000 114 118 104 126 109 0
Ahora puede filtrar por cualquiera de esos GID
journalctl _GID=114
Filtrado de registros por ruta al ejecutable:
journalctl /usr/bin/sudo
Ver registros en tiempo real
journalctl -f
Si desea que sus registros se muestren en el texto del plan para copiarlos y pegarlos fácilmente, puede usar la opción «sin buscapersonas»
journalctl --no-pager
6) Visualización de mensajes del kernel y eliminación de registros antiguos
El journalctl también puede mostrar mensajes del kernel. De forma predeterminada, se mostrará desde el inicio actual
journalctl -k
Si desea mensajes del kernel del arranque anterior, use la marca -b -1.
journalctl -k -b -1
Para verificar cuánto espacio en disco usan sus registros, puede usar este comando
journalctl --disk-usage Archived and active journals take up 24.0M on disk.
Si sus troncos han aumentado de tamaño, puede usar una aspiradora para limpiar el más viejo. Bueno, no es realmente una aspiradora, pero el comando se llama aspiradora.
sudo journalctl --vacuum-size=16M
Esto reducirá el tamaño del registro a 16 MB.
Conclusión
Hemos pasado por comandos básicos de journald que hacen que el registro sea genial nuevamente. Con suerte, esto le ayudará mucho la próxima vez que tenga que solucionar algún problema con su servidor Linux o computadora de escritorio con systemd. El systemd nos brinda excelentes herramientas y la publicidad negativa que recibió temprano fue solo una reacción violenta contra el cambio de herramientas antiguas que las personas también usaban. Ya me acostumbré a systemd y no sé cómo vivía sin él. Todo esto es por este artículo, gracias por leer y que tengas un buen día.