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
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 😉
Habrá que tener esto presente para cuando llegue Jessie 🙂
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.
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!
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!
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!
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.
Me ya encantado tu artículo. Una manera sencilla de introducir al mundo del journalnde systemd.
Buen trabajo
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!
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. 😉
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
Gracias Anger! sobre systemctl, esta chuleta viene bastante bien:
https://lamiradadelreplicante.com/2014/09/08/chuleta-de-equivalencias-systemd-vs-syvvinit/
Un saludo amigo!
Y como lo instalo? Perdon por la ignorancia.
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…)
Excelente publicación como para tener siempre a mano.
Gracias amigo!
Muy bueno el artículo, gracias.
De nada Rafael! Gracias a ti por comentar 🙂
Muy buena explicación Gracias
De nada me alegro que te haya servido!
Gracias quedo muy bueno el post