El servicio que escribe los registros del journal de systemd es systemd-journald.service.
En este artículo:
Resumen de las opciones de journalctl
:
journalctl
→ inicia la herramienta
journalctl --list-boots
→ muestra los inicios o reinicios
journalctl --since "2017-08-16 18:46:30" --until "2017-08-16 18:55:00"
→ filtrar los datos por fecha
journalctl –u cron
→ filtramos las entradas por servicio
journalctl –f
→ añade las nuevas entradas (como tail -f)
journalctl –p err
→ filtramos las entradas por prioridad
journalctl --disk-usage
→ muestra el espacio ocupado por logs
journalctl -k
→ muestra solo mensajes del kernel
journalctl -g ‘patrón’
→ busca según un patrón (soporta regex)
journalctl -b
journalctl --list-boots
Esto nos mostrará una linea para cada arranque.
-3 b69d56b2e608403792212edc8a9fba24 Fri 2019-08-23 17:58:28 CEST—Fri 2019-08-23 17:59:53 CEST
-2 efa94b7e04a643ffba1353c5439bdd1a Fri 2019-08-23 18:18:11 CEST—Fri 2019-08-23 18:23:40 CEST
-1 f217f1719ffc46caa264d13ffb133450 Tue 2019-10-01 16:24:37 CEST—Tue 2019-10-01 16:26:03 CEST
En la primera columna veremos el número de arranque, que podemos usar para visualizar el journal de ese arranque. La segunda columna muestra el ID del arranque, que también podemos utilizar.
Por ejemplo, para ver el registro de un reinicio concreto, en este caso del arranque anterior:
journalctl -b -1
o para ver el journal de hace 2 reinicios:
journalctl -b -2
Si queremos mostrar los registros dentro de un marco de tiempo concreto, podremos usar algunos parámetros entre fechas y horas.
Hemos de tener en cuenta que el formato de fecha es:
YYYY-MM-DD HH:MM:SS
usaremos since y until
journalctl –since “2019-09-28 17:15:00”
journalctl –since yesterday
Con journalctl podemos filtrar también por servicio o componente. Hay diversas formas de hacerlo.
journalctl -u rsyslog.service
(para encontrar las unidades en nuestro sistema podemos ejecutar systemctl list-units)
journalctl -u rsyslog.service -u anacron.service
journalctl -u cups.service -u acpid.service --since today
Por ejemplo, filtraremos por el PID 1, que corresponde al servicio systemd:
journalctl _PID=1
Lo primero que vamos a hacer es averiguar el UID de un usuario. En este caso averiguamos el UID del usuario test:
id -u test
y sabiendo que el UID de dicho usuario es el 1001, filtramos:
journalctl _UID=1001
man systemd.journal-fields
-F
Así que vamos a buscar los GID disponibles en journal:
journalctl -F _GID
Y el resultado arrojado es:
1001
1000
114
117
103
125
122
Sabemos que el GID de test es 1001
ya que
cat /etc/group | grep 1001
muestra
test:x:1001:
Ahora, sabiendo lo anterior, comprobamos las entradas en el journal para el GID 1001:
journalctl _GID=1001
journalctl /usr/sbin/sshd
-- Logs begin at Thu 2016-11-03 18:16:43 CET, end at Tue 2019-10-01 18:17:12 CES
Oct 01 18:00:26 Rasp sshd[491]: Server listening on 0.0.0.0 port 22.
Oct 01 18:00:26 Rasp sshd[491]: Server listening on :: port 22.
Oct 01 18:14:27 Rasp sshd[506]: Accepted password for pi from 192.168.8.
Oct 01 18:14:27 Rasp sshd[506]: pam_unix(sshd:session): session opened f
lines 1-5/5 (END)
Si además usamos la opción -r, el resultado son los mensjes del kernel del arranque actual, ordenador por los más recientes a los más antiguos:
journalctl -k -r
journalctl -k -b -5
Este tipo de filtro de mensajes de journal es muy interesante. En ocasiones buscamos concretamente los mensajes de error del sistema, y con este tipo de filtro podemos encontrarlos rápidamente.
Estos son los tipos de prioridad existentes en los mensajes de registro:
Así que teniendo esto en cuenta, vamos a filtrar y mostrar con journalctl los mensajes de error solamente, usando la opción -p (prioridad) :
journalctl -p err -b
El comando anterior muestra los mensajes de prioridad 3 (err), del arranque actual.