Viernes, Agosto 18, 2017

Ver los logs del sistema en Linux con journalctl

journalctl.png

La llegada de systemd a la mayoría de distribuciones de GNU/Linux, como sistema de inicio reemplazando a init, ha supuesto una nueva manera de ver de los mensajes del sistema, como pueden ser los del kernel y los diferentes servicios o procesos.

Journalctl es ahora la herramienta más utilizada para acceder a los registros del sistema y en esta entrada vamos a ver como podemos echarles un vistazo sin morir en el intento, o lo que es lo mismo, aplicando unos cuantos filtros que nos permitirán separar el polvo de la paja.

Uso básico de journalctl

La forma básica de acceder a los registros del sistema es:

journalctl

que viene a equivaler al viejo “cat /var/log/messages” y nos permite acceder a todos los logs sin filtrar (en cualquier momento podemos salir de esa pantalla utilizando la tecla “q”)

Como pasa con el resto de comandos podemos redirigir la salida hacia un documento de texto

journalctl > mensajes.log

Si queremos seguir los mensajes en tiempo real añadimos el parámetro -f

journalctl -f

Filtrar la salida de logs por boots

Si habéis ejecutado alguno de los comandos anteriores os habréis dado cuenta que el número de mensajes es inmenso, así que vamos a filtrarlos por los diferentes procesos de arranque,que haya tenido nuestro ordenador.

Para ver la lista de todos los boots:

journalctl --list-boots

Para ver los logs del boot actual:

journalctl -b

Si necesitamos ver alguno de los anteriores tenemos dos opciones:

  • Utilizamos simplemente una cuenta regresiva. Por ej para ver al anterior:

journalctl -b -1

y así sucesivamente:

journalctl -b -2

journalctl -b -3

  • O elegimos usar la ID del boot, que nos aparecio al listar los procesos de arranque con “journal –list-boots”. Sería algo así:

journalctl _BOOT_ID=dfe74d5a9d384a88821ff8d24d64f81f[/sourcecode]

Ver los mensajes del kernel

Le añadimos el parámetro -k:

journalctl -k

Como suele pasar en la linea de comandos podemos combinar varios parámetros para afinar la búsqueda.

Aquí vemos los mensajes referidos al kernel durante el boot actual:

journalctl -k-b

Filtrar por número de entradas en el registro de logs

La opción predeterminada es ejecutar

journalctl -n

la cual nos proporciona los últimos 10 mensajes

Pero lo podemos cambiar, simplemente poniendo un número:

journalctl -n 50

Filtras los logs por ejecutables o programas

En este caso también tenemos varias formas de hacerlo, bien directamente con el ejecutable:

journalctl _COMM=NetworkManager

o especificando la ruta

journalctl /usr/sbin/NetworkManager

y como siempre tenemos la opción de filtrar con grep:

journalctl | grep NetworkManager

Mostrar la salida por PID

Filtramos mediante el número identificador del proceso (algo que podemos consultar con top o htop), en esta ocasión como veis en el ejemplo 2527 corresponde a Firefox:

journalctl _PID=2527

Especificar la salida por usuarios

La id de los usuarios la podéis encontrar ejecutando (obviamente sustituís la parte del nombre del usuario)

id nombre_del_usuario

y después seleccionáis la que corresponda (1000, 1001, 1002…)

journalctl _UID=1001

Filtrar la salida por servicios de systemd

Podemos ver los servicios que dependen de systemd, ejecutando:

systemctl list-units -t service --all

y si nos interesa uno en particular, estudiamos sus mensajes añadiendo el parámetro -u y el nombre del service, como en este ejemplo

journalctl -u dbus.service

Podemos hacer una búsqueda de varios servicios  añadiendo el caracter “+” (equivale a un “or”) y ejecutando:

journalctl _SYSTEMD_UNIT=apparmor.service + _SYSTEMD_UNIT=dbus.service

Filtrar por fechas

Se utilizan los parámetros “–since” y “–until”, así como expresiones tipo “yesterday” “ago” o “today”. El formato de tiempo es habitualmente YYYY-MM-DD HH:MM:SS.

Algunos ejemplos:

  • Ver los logs desde el día de ayer hasta hoy a las 02:00 horas.

journalctl --since 'yesterday' --until '02:00'

  • un intervalo de fechas específico:

journalctl --since='2015-02-29 00:01' --until='2015-03-29 00:01'

  • Todos los logs especificando la fecha en el formato que os comentaba anteriormente, y filtrando por el programa firefox

journalctl _COMM=firefox --since='2015-02-29 00:01' --until='2015-03-29 00:01'

  • Lo mismo que el caso anterior pero en este caso filtrando por el servicio de sshd.service

journalctl -u sshd.service --since='2015-02-29 00:01' --until='2015-03-29 00:01'

  • O simplemente ver lo que ha pasado en la última media hora:

journalctl --since '30 min ago'

Filtrar por la prioridad del mensaje

Los mensajes se clasifican en función de su prioridad en 7 niveles diferentes: “emerg” (0),”alert” (1), “crit” (2), “err” (3), “warning” (4), “notice” (5),”info” (6), y  “debug” (7)

Para filtrarlos utilizamos el parámetro -p seguido del número correspondiente. En este ejemplo vemos los críticos:

journalctl -p 2

Mensajes de los discos duros

Puede ser interesante para descubrir problemas de funcionamiento en nuestras unidades de discos duros.

journalctl /dev/sda

Ver el espacio que están ocupando los diferentes logs

Ejecutamos el comando:

journalctl --disk-usage

En el caso de que ese valor fuera excesivo lo podemos limitar en el archivo /etc/systemd/journald.conf, pero ya que hablamos de espacio, como el post al final ha quedado demasiado largo, eso algo que (quizás) veremos en otra ocasión.

 

Fuente: lamiradadelreplicante

Compártelo. ¡Gracias!

 
Grupo Digital de Ayuda! Laboratorio Linux! - Linux para todos.

¿Quién está en línea?

Hay 28 invitados y ningún miembro en línea

Contador de Visitas

8925754
Hoy Hoy 131
Ayer Ayer 1107
Esta semana Esta semana 4090
Este mes Este mes 17940
Total de Visitas Total de Visitas 8925754

Día con más
visitantes

07-19-2017 : 1525

Gracias por su visita