Journalctl, algunos comandos interesantes

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:

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

Eventos de un usuario específico

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

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!