El proceso que gestiona las notificaciones del sistema en systemd es systemd-journal y tiene una herramienta para gestionarlo que es journalctl.
Con journalctl podemos consultar todos los registros del sistema en Linux o hacer consultas específicas.
El servicio que escribe los registros del journal de systemd es systemd-journald.service.
En este artículo:
- Resumen de opciones de journalctl
- Visualización básica de registros
- Filtrar el journal por tiempo
- Registros del arranque actual
- registros de otros reinicios/arranques
- Ventanas de tiempo con journalctl
- untill
- since
- FILTRAR POR MENSAJES de interés
- filtrar por unidad
- varias unidades
- Filtrando por proceso, usuario o ID de grupo
- Filtrar por ruta de componente
- Mostrar mensajes del kernel con journalctl
- Filtrar mensajes de journal según la prioridad
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)
Visualización básica de registros de journalctl
- journalctl : Muestra todos los registros existentes en el journal. Se muestran arriba del todo los más antiguos. Es mejor que paginemos la salida de datos, con less por ejemplo.
Filtrar el journal por tiempo
- Para mostrar registros del arranque actual (útil cuando hacemos un uso diario de journal):
journalctl -b |
- Mostrar los reinicios registrados en el journal:
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 |
Ventanas de tiempo con journalctl
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 |
- Para ver los registros durante una ventana de tiempo concreta:
usaremos since y until
- Por ejemplo, para ver los registros desde el 28 de septiembre de 2019, usaremos:
journalctl –since “2019-09-28 17:15:00”
- Con journal también podemos usar valores relativos como ayer (yesterday), hoy (today), mañana (tomorrow) o ahora (now). Por ejemplo, para obtener los datos del registro del día anterior (ayer):
journalctl –since yesterday
Filtrar por mensajes de interés
Con journalctl podemos filtrar también por servicio o componente. Hay diversas formas de hacerlo.
- Filtrar por unidad de Systemd:
journalctl -u rsyslog.service
(para encontrar las unidades en nuestro sistema podemos ejecutar systemctl list-units)
- Filtrar intercalando varias unidades:
journalctl -u rsyslog.service -u anacron.service |
- Combinando los filtros anteriores, buscamos el journal para varios servicios, con una ventana de tiempo concreta:
journalctl -u cups.service -u acpid.service --since today |
Filtrando por proceso, usuario o ID de grupo
- Algunos servicios generan procesos secundarios. Si conocemos el PID exacto, podemos realizar filtros en el journal por medio del PID.
Por ejemplo, filtraremos por el PID 1, que corresponde al servicio systemd:
journalctl _PID=1 |
- Ahora vamos a filtrar por el UID de un usuario.
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 |
- El journal de systemd tiene muchos campos por los que podemos filtrar. Para averiguar dichos campos, usamos:
man systemd.journal-fields |
- Para ver para qué GID el journal de systemd tiene registros, podemos usar la opción
-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 |
También podemos filtrar por ruta de componente
- Por ejemplo, vamos a ver los registros del servicio de OpenSSH, buscando en su ruta de componente /usr/sbin/sshd :
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) |
Mostrar mensajes del kernel con journalctl
- Por defecto se muestran los mensajes de kernel del arranque actual con journalctl -k:
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 |
- Para mostrar los mensajes del kernel de otros arranques anteriores:
journalctl -k -b -5 |
Filtrar mensajes de journal según la prioridad
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:
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
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.