Journalctl, algunos comandos interesantes

Publicado por Diego Córdoba en

Alrededor del 2012, mucnas distribuciones Linux cambiron su tradicional «System V» init por el nuevo systemd. systemd es utilizado para arrancar el sistema operativo y administrar procesos. systemd incluye un componenjournal_portadate auxiliar denominado «journalctl», cuyo principal propósito es administrar los eventos de log del sistema, por lo que para los sysadmines y devops es una herramient súper útil.

Ya hemos estado hablando de algunos comandos del nuevo systemd en SystemD vs SysVinit: algunos comandos.

Por defecto, el comando utilizado sin argumentos muestra todos los contenidos del journal, iniciando con la entrada más antigua que fue guardada.

Todos los usuarios por defecto pueden ver sus propios journals, no obstante, el acceso a los archivos de logs principales y a los logs de otros usuarios solo puede ser visto por usuarios privilegiados, como el root, o los usuarios pertenecientes a los grupos wheel o systemd-journal.

Además, como los logs del sistema pueden ser muy cargados de información adicional y explicativa, journalctl permite pasarle parámetros para limitar la salida a entradas específicas.

Por defecto, las entradas más antiguas se muestran al principio. La salida es mostrada una pantalla a la vez, no obstante, podemos deslizarnos con las teclas del cursor para ver el resto de la salida, o presionando la tecla de espacio para desplazarnos pantallas enteras.

Las líneas están truncadas, no obstante podemos movernos con las teclas del cursor a izquierda y derecha para ver el contenido completo.

journalctl

Otras variantes de journalctl

Veremos ahora algunas variantes de journalctl interesantes a la hora de administrar un sistema.

journalctl -r

Nos permite mostrar la salida del comando en orden invertido, los primeros debajo, y los últimos encima.

journalctl

journalctl -f

Esta es una interesante opción que emula el clásico «tail -f /var/log/syslog». Este comando nos permite ver el journal del ordenador en tiempo real, y las nuevas líneas las iremos viendo entrar a las salida del comando.

La opción «-f» viene de «follow» o seguir, por su significado del inglés.

journal3

journalctl -n12

Este comando nos permite limitar, en este caso particular, la salida a solamente las últimas 12 líneas. La cantidad de líneas dependen de la necesidad del usuario.

journalctl

Limitando la salida por tiempo

Una opción muy interesante es la de filtrar la salida por tiempo, y mostrar únicamente los logs de cierta fecha, hora, o en un rango de tiempo.

Los tiempos se pueden especificar siguiendo el formato: YYYY-MM-DD HH:MM:SS (Año, mes, día, hora, minuto, segundo).

Por otro lado, esta estampa de tiempo puede ir acompañada de un «–since» para indicar «desde», y/o un «–until» para indicar «hasta».

Veamos los logs de algunas horas de un día específico:

journal5

Como se puede ver, estos logs son del 13 de enero del 2016, y van desde las 10 de la mañana, hasta las 12. Es la salida correspondiente al siguiente comando:

sudo journalctl –since «2016-01-13 10:00:00» –until «2016-01-13 12:00:00»

Por otro lado, puede omitirse tanto el «–since» como el «–until» y eliminar uno de los límites en la salida.

Además, este comando permite especificar fechas y tiempos en un formato más amigable y «humano» 🙂

Algunos ejemplos:

sudo journalctl --since "1 hour ago"
sudo journalctl --since "30 minutes ago"
sudo journalctl --since "30 minutes ago"
sudo journalctl --since "1 day ago"
sudo journalctl --since "1 wheek ago"
sudo journalctl --since "1 week ago"
sudo journalctl --since "1 month ago"
sudo journalctl --since "1 year ago"
sudo journalctl --since "1 year ago"

Por supuesto, «–since» puede ser sustituido por «–until», o pueden usarse ambos:

sudo journalctl --since "2 hours ago" --until "30 minutes ago"

Eventos de un usuario específico

Sabiendo el UID de un usuario en Linux, podemos mostrar los eventos de dicho usuario sin inconvenientes:

diego@cryptos:~$ id andy
uid=1001(andy) gid=1001(andy) groups=1001(andy)
diego@cryptos:~$ sudo journalctl UID=1001
-- No entries --

Además, se puede combinar con las opciones anteriores, para filtrar por tiempo, cantidad de líneas, etc.

Eventos de un servicio

Para quienes administran servidores, por ahí les interesará saber cómo podemos ver los logs generados, por ejemplo, por el servicio de SSH.

En este caso, un comando tan simple como:

sudo journalctl -u sshd.service

Nos dará una salida como esta:

journal7

Podemos listar los eventos de varios servicios simultáneamente:

sudo journalctl -u sshd.service -u vsftpd.service

Para listar los servicios que están corriendo en nuestro ordenador podemos correr el siguiente comando:

sudo systemctl -t service -a

journal8

Mostrando log del inicio del ordenador

Es algo súmamente útil para saber si cierto y determinado servicio o componente se ha ejecutado correctamente o no al iniciarse el equipo, o detectar cualquier anomalía.

sudo journalctl -b

journal9

Mostrando los mensajes del kernel

Otra forma de ver información para debuggear información del sistema es ver los mensajes del núcleo del sistema:

sudo journalctl -k

journal10

En otros artículos iremos amplicando la información para poder administrar correctamente un sistema systemd.

¡Espero que les haya gustado y les haya resultado útil!

¡Hasta la próxima!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

3 comentarios

Jorge Schiariti · 18 agosto, 2016 a las 14:52

Qué bueno que está tu portal Diego !!!

    Diego Córdoba · 19 agosto, 2016 a las 01:35

    Muchas gracias Jorge!! 🙂

Diego Cordoba - @d1cor · 12 junio, 2017 a las 19:36

Fede! Quizás me expresé mal… la fecha siempre va acompañando a uno de estos parámetros, -since o -until, nunca sola… ahora, ĺo que quise decir, es que podés omitir el -since o -until para eliminar uno de los límites, con lo que, el comando podría quedar:
sudo journalctl -since -until #con los dos limites
sudo journalctl -until # solo con limite inicial
sudo journalctl -since # solo con límite final

Espero te aclare!

Los comentarios están cerrados.