Ver los logs del sistema en Linux con journalctl

journalctlLa 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

journalctl_bootPara 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

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

journalctl_ultimosPero 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

journalctl_PIDEspecificar 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

journalctl_servicePodemos 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

journalctl_criticosMensajes 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 😉

13 thoughts on “Ver los logs del sistema en Linux con journalctl”

  1. liamngls says:

    Habrá que tener esto presente para cuando llegue Jessie 🙂

  2. Juanca_Cba says:

    Es decir, cómo hacer, mediante una gran cantidad de esfuerzo inútil, lo que antes se hacía mientras tomabas alegremente una cerveza y mirabas tu serie favorita, al mismo tiempo.
    Es por eso que nunca habrá una distro que use winsystmed en mi equipo.
    El secuestro de los logs por parte de un … (reemplazar por lo que más os guste) es un ataque liso y llano a la libertad con la que uno podía accederlos. Y esto, creo que es lo que primó para que más de uno de nosotros comience a utilizar un sistema tipo Unix: la LIBERTAD. Ahora nos vemos traicionados.
    Ojalá cuaje la concepción de Devuan (de la cual ya hay pre-alfa, al menos) para demostrarles a ciertos sujetos (los “empresarios de toda la vida”) que no tienen derecho a adueñarse de un sistema operativo.
    Sé que no eres un defensor del software libre, de hecho ya lo has expresado en un post reciente, y que incluso comentas sobre software privativo, lo cual me parece perfecto porque siempre habrá quién encuentre muy útiles tus acertadas entradas (y de paso me río mucho con las imágenes de cabecera), pero me sorprende que dado el gran nivel de conocimiento de los usuarios que comentan en tus post, ninguno lo haya expuesto (tal vez se me haya pasado algún que otro comentario, vale).
    Se ha dejado ir muy lejos al tal Harry Poettering ese (que cada vez sigue mordiendo más y más trozos del sistema e incorporándolos a su piedra filosofal) y ahora una empresa ha hecho que todas las distros sean exactamente lo mismo. Sólo te diferenciarás por el escritorio que uses, lo que nos aleja un poco más del cielo cada día.
    Saludos.

    1. tannhausser says:

      Systemd es software libre (GPL LGPL) y nadie le ha impuesto a los desarrolladores de la mayoría de distros que lo usen (de hecho slackware, gentoo, manjaro y seguro que alguna más, dan otras opciones)

      No se de donde deduces o de que artículo que no defiendo el software libre, en todo caso la polémica de systemd, el que sea más o menos UNIX o monolítico, no es algo que entre entre mis preocupaciones. Que si que es interesante el debate, pero que tampoco lo vivo con pasión…

      De hecho me he encontrado con mucha gente (seguro que no es tu caso) con un grado de hooliganismo importante a favor y en contra que estoy seguro que no han leído practicamente nada sobre systemd o los motivos por los que por ej. el comite técnico de Debian decidió adoptarlo como sistema de inicio.

      Y en cuanto a Devuan, me parece perfecto lo que están haciendo, en vez de quejarse y rayar con que su postura en Debian había sido derrotada, decidieron llevar adelante un proyecto propio para poder materializar sus ideas. Nada que decir ahí, al contrario ojalá triunfen y el resto de la comunidad de GNU/Linux puede sacar partido de su trabajo.

      Saludos!

      1. Juanca_Cba says:

        Quise decir que no eres un defensor “a ultranza” del software libre, tal vez me faltó ser más específico, ya que tienes razón que no quedó claro. Vamos, que tú mismo lo has dicho en el post anterior de Hitler (o al menos eso es lo que entendí) pero que era algo obvio, de todos modos, por ciertas entradas sobre programas que no son libres que has hecho (y que, reitero, no me parece equivocado, sólo que yo no instalo nada que no lo sea).
        Además es algo que habíamos visto en la entrada sobre las licencias, donde tenías muchas que eran restrictivas.
        Que no es algo que me invente yo, hombre, es leer todos tus post desde ya hace varios años… ¡y a mucha honra!
        Y no creo que baste que un software sea libre para que sea bueno.
        Por cierto, basta ver lo que me responde el tío ese ahí abajo; redujo todo el comentario a que él puede usar cat para leer un log. Es como predicar en el desierto.
        Bueno, ¡saludos!

        1. tannhausser says:

          Para mi que te confundes de blog…no creo que llegue ni al 0,1 % los artículos sobre software privativo (alguno sobre skype en linux y poco más…).

          Artículo sobre las licencias o tipos de licencias no recuerdo…aunque es cierto que a veces me olvido de los post que escribo (+ de 1500 ya..)

          En todo caso mi licencia favorita es la GNU, por encima de la MIT por dejar el tema más o menos claro.

          En el post de Apple y Hitler solo dije que era algo exagerada la comparación, y que Apple también había hecho alguna contribución al desarrollo del software (libre incluso) como comprenderás solo soy responsable de lo que yo escriba, no de lo que los demás entiendan.

          Saludos!

    2. goidor says:

      Yo llevo tiempo usando Systemd en Manjaro y Archlinux. Y igual puedo usar un cat, tail, less, more o lo que sea para acceder a mis Logs en /var/log/. No entiendo cuál es el drama.

      Buen post. Saludos.

  3. Hugo says:

    Me ya encantado tu artículo. Una manera sencilla de introducir al mundo del journalnde systemd.
    Buen trabajo

    1. tannhausser says:

      Gracias colega! son de esas entradas que hago para no tener que leerme después todo el manual si se me olvida algo xD
      Un saludo!

  4. x-man says:

    Excelente como suele sucede en “La Mirada del Replicante”, …y falta que me esta haciendo un articulo así, pues hay días que mi PC se apaga en muy pocos segundos y día en que toma casi 1 min, creo que ahora me va a ser mas fácil encontrar que esta pasando o por que sucede así.

    Gracias. 😉

  5. Anger Pulido says:

    Excelente aporte amigo jose, gracias por compartir. En días pasados en un Debian, me toco leer mucho y pague la novatada.

    systemctl restart varnish.service

    1. tannhausser says:

      Gracias Anger! sobre systemctl, esta chuleta viene bastante bien:

      http://lamiradadelreplicante.com/2014/09/08/chuleta-de-equivalencias-systemd-vs-syvvinit/

      Un saludo amigo!

  6. Dorian says:

    Y como lo instalo? Perdon por la ignorancia.

    1. tannhausser says:

      No es necesario instalarlo ya lo que lo provee systemd.
      Si en tu caso no funciona el comando, es que usas un sistema de inicio diferente en tu distro (upstart en Ubuntu, openRC en Gentoo, System V init en Debian…)

Deja un comentario