El hecho de que no esté recibiendo errores en su sistema no significa que todo esté funcionando bien. ¿Por qué no leer y analizar los registros de su sistema Linux para ver qué sucede con su sistema? ¿No estás seguro de cómo? ¡Por suerte para ti, Journalctl está preparado para la tarea!
En este tutorial, aprenderá cómo observar de cerca cómo se comporta su sistema con la herramienta journalctl leyendo y analizando los archivos de registro de diario de systemd.
¡Siga leyendo y mantenga su sistema en su mejor momento!
Requisitos
Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener lo siguiente.
- Una máquina Linux:esta demostración usa Ubuntu 20.04 LTS, pero puede usar cualquier distribución.
- Una cuenta no root con privilegios sudo.
Configurar la hora correcta del sistema
Antes de que pueda usar Journalctl, deberá configurar la hora de su sistema. Las marcas de tiempo registradas en el diario systemd están en UTC, por lo que debe seleccionar la zona horaria correcta. Si su tiempo se atrasa por solo unos segundos, es posible que algunas de las entradas del registro no se muestren correctamente cuando las use más adelante.
1. Abra su terminal y ejecute el timedatectl
Comando a continuación para obtener una lista de las zonas horarias disponibles.
timedatectl list-timezones
Elija y anote uno de la lista que se muestra a continuación que coincida con su región. Por ejemplo, si vive en Estados Unidos, elija la zona horaria que coincida con la más cercana a su ciudad.
2. A continuación, ejecute el siguiente comando para configurar su zona horaria (set-timezone
). Reemplazar your-zone
con el nombre de la zona horaria que escogiste previamente (paso uno). Este comando establece la hora de su sistema en la zona horaria elegida.
De ahora en adelante, cada entrada de registro se registrará como su hora local.
sudo timedatectl set-timezone your-zone
3. Finalmente, ejecute el siguiente comando para verificar que ha configurado correctamente la zona horaria.
timedatectl status
Como se muestra a continuación, la fecha y la hora actuales del sistema deben coincidir con la región y la zona horaria seleccionadas.
Mostrar todos los registros
Ahora que la configuración de la zona horaria está fuera del camino, puede comenzar a ver los registros en su sistema. Systemd System and Service Manager proporciona una gestión centralizada de los demonios de registro, que recopila registros de varias partes/herramientas del sistema.
Pero, ¿cómo se ven los registros? La utilidad journalctl le permite ver los registros de su máquina. Y lo primero que normalmente quiere hacer es mostrar todo lo que ha sucedido desde el último arranque.
Ejecute el journalctl
Comando a continuación para mostrar todos los registros del daemon journald.
La utilidad journalctl implementa la interfaz de línea de comandos del demonio journald para recopilar y ver el diario systemd. La utilidad journalctl permite a los usuarios realizar una introspección de la actividad y el estado de cualquier unidad administrada por systemd (servicio, proceso, etc.).
sudo journalctl
El comando muestra el diario completo que se muestra a continuación, y es un poco difícil de leer. Los registros más antiguos están en la parte superior de la lista, mientras que los registros más recientes están en la parte inferior.
Es probable que tenga cientos o miles de entradas si el diario systemd ha estado registrando registros durante el tiempo suficiente.
Puede usar otros parámetros para filtrar los registros, pero no entrará en esos filtros aquí ya que ese tema va más allá de este tutorial.
Dado que es probable que desee navegar por la lista de manera más selectiva, sería bueno tener flechas hacia arriba/abajo de página. Presiona K para saltar una página y J para saltar una página hacia abajo. Presiona FIN para saltar a la última página.
Tenga en cuenta que las marcas de tiempo al comienzo de cada entrada son su hora local, ya que configuró previamente su zona horaria en la sección "Configuración de la hora correcta del sistema" (paso dos).
Hacer que el diario sea persistente
Ha visto cómo ver todos los registros, pero normalmente querrá mantener los registros durante un período más largo, para que tenga más posibilidades de encontrar datos sobre problemas que rara vez ocurren. ¿Cómo? Al hacer que el diario sea persistente.
El /run/log/journal/ El directorio es la ubicación predeterminada de los datos de registro y no es persistente de forma predeterminada. Tan pronto como reinicie el sistema, todos los registros desaparecerán. La idea del registro persistente es mantener todos los archivos de registro, pero los registros más antiguos se archivan cuando crecen demasiado.
Para hacer que el diario sea persistente entre arranques, editará el archivo /etc/systemd/journald.conf y configúrelo para usar una ubicación de almacenamiento persistente.
1. Abra el /etc/systemd/journald.conf archivo con su editor de texto preferido y busque Storage=auto
directiva, como se muestra a continuación.
2. A continuación, cambia el Almacenamiento valor de la directiva de auto a persistente , luego guarde los cambios y cierre el editor. Mantenga el almacenamiento directiva en una línea y sin espacios entre la directiva y el valor, o la configuración no funcionará.
3. Ejecute el siguiente comando para reiniciar el systemd-journald
servicio para activar todos los cambios. Este comando no imprime la salida, pero reinicia tu máquina y abre otra terminal una vez que se completa este comando.
En este punto, systemd ignorará /run/log/journal y en su lugar almacene los datos del diario en el /var/log/journal directorio, por lo que su diario de registro se vuelve persistente entre arranques.
Cuando inicias el
systemd-journald
servicio, crea automáticamente el directorio /var/log/journal si no existe.
sudo systemctl restart systemd-journald
4. Ahora, ejecute el siguiente comando para verificar el estado del systemd-journald.service
.
sudo systemctl status systemd-journald.service
Verá un estado activo (en ejecución) si su configuración funciona, como se muestra a continuación. El siguiente resultado confirma que el diario se está ejecutando según lo previsto.
5. Ejecute el ls
comando a continuación para ver si el /var/log/journal
el directorio existe.
ls /var/log/journal
Verá el siguiente resultado, que es el UUID del diario persistente. Este UUID no tiene ningún significado particular y es solo una cadena aleatoria única generada durante el proceso de arranque. Esta cadena es un identificador que puede usar para hacer referencia a los datos en /var/log/journal .
Tenga en cuenta el UUID, ya que lo usará para enumerar los diarios de registro (paso seis).
6. Finalmente, ejecute el siguiente comando para enumerar los diarios de registro. Asegúrese de reemplazar myUUID
con su UUID previamente anotado (paso cinco).
ls /var/log/journal/myUUID
Del mismo modo, a continuación, verá el diario de su último arranque. Y en este punto, ¡ahora tiene un sistema de registro persistente!
Lista de entradas de diario del inicio actual
Ha aprendido a mostrar todas las entradas del registro. Pero quizás prefiera filtrar tipos específicos de registros. Si es así, es posible que desee ver solo las entradas del registro del kernel.
La herramienta journalctl tiene una poderosa sintaxis de filtrado que le permite mostrar tipos específicos de entradas de registro. O incluso mostrar información relacionada como el ID del proceso (PID) o el nombre de la unidad del servicio de origen.
Hay diferentes formas de filtrar los registros, pero tal vez solo le interese ver los diarios de su arranque actual. Si es así, el journalctl
básico el comando hará el truco.
Ejecute el journalctl
Comando a continuación para enumerar todas las entradas del diario de su arranque actual (-b
) pertinente a su sistema/entorno actual. El -b
bandera le dice al journalctl
comando para mostrar los registros almacenados por journald desde el último arranque del sistema.
journalctl -b
Lista de registros de botas anteriores
Mientras usa journalctl
para la solución de problemas, es posible que también deba mostrar las entradas de registro de un arranque anterior específico. Tal vez tenga un servicio que se inicia en un arranque pero falla en otro. En ese caso, debe aislar la entrada de registro del segundo arranque para ver qué salió mal.
1. Ejecute el siguiente comando para mostrar la lista de arranques anteriores (–list-boots).
journalctl --list-boots
Como se muestra a continuación, dado que configuró el registro persistente en la sección anterior, journalctl muestra todos los arranques anteriores.
- Cada línea de la lista indica una entrada de registro de arranque anterior. La primera columna es el desplazamiento del arranque, que puede usar para hacer referencia a cada entrada. Las compensaciones se muestran como números (-1, 0 ).
- También puede utilizar la segunda columna, el ID de inicio, como una referencia absoluta a una entrada de inicio.
2. A continuación, ejecute el journalctl -b -1
Comando para mostrar las entradas del diario desde el arranque 1 (el arranque anterior). Pero también puede mostrar las entradas del diario de otras botas cambiando el número de la bota (es decir, bota 2, bota 3...)
journalctl -b -1
3. Finalmente, ejecute el siguiente comando para mostrar las entradas del diario desde el mismo arranque pero referenciado por su ID de arranque (boot_id
). Asegúrese de reemplazar boot_id
con el ID de inicio que anotó en el paso uno.
journalctl -b boot_id
Lista de registros basados en ventanas de tiempo
Ha visto cómo ver todos los registros de arranques anteriores, pero ¿qué sucede si necesita ver registros específicos por hora? Agregando el --since
y --until
las opciones filtran las entradas del registro diario en función de las ventanas de tiempo.
Ejecute el journalctl
Comando a continuación para encontrar todas las entradas de diario generadas hace 24 horas a partir de una fecha y hora específicas (--since "2022-02-04 12:40:49”
).
journalctl --since "2022-02-04 12:40:49”
Tal vez no le interese especificar la fecha y la hora. Si es así, utilice valores relativos y duraciones de tiempo en su lugar. Por ejemplo, "2 minutos", "30 minutos", "1 hora" e incluso días como "ayer" o "ahora, etc."
Ejecute el siguiente comando para mostrar todas las entradas del diario desde hace 24 horas desde la fecha y hora actuales (”yesterday”
).
journalctl --since "yesterday"
Ahora, ¿qué pasaría si su servicio SSH estuviera funcionando desde las 10:10 de hoy y continuara hasta que se interrumpió hace una hora? Agregue ambos --since
y --until
opciones al journalctl
comando para averiguar qué salió mal.
Ejecute el siguiente comando para buscar registros generados desde 10:10
hoy hasta 1 hour ago
.
journalctl --since 10:10 --until "1 hour ago"
Filtrado de registros según la unidad del proceso de origen
Encontrar registros generados desde y hasta una fecha y hora específicas es útil para solucionar problemas, pero aún puede obtener muchos registros en la salida. ¿Cómo se filtran aún más los registros?
Por ejemplo, desea filtrar las entradas del diario de una unidad de servidor web NGINX que no pudo iniciarse en el arranque. Usa el journalctl
comando con el -unit
y el nombre de la unidad del servicio para ver los registros.
Ejecute el siguiente comando para enumerar todas las entradas del diario según la unidad del proceso de origen (-u
) (nginx.service
). Este tipo de filtrado es beneficioso para conocer los PID de los procesos o servicios relacionados con un error o advertencia en particular.
journalctl -u nginx.service
Tal vez prefiera mostrar activamente los cambios a medida que ocurren, como durante la resolución de problemas del servicio, y necesita ver los registros a medida que los carga journald. Si es así, ejecute el siguiente comando para enumerar o seguir (-f
) todos los cambios a medida que ocurren.
journalctl -f
Hasta ahora, ha visto que journalctl es flexible y tiene muchas opciones para filtrar y mostrar registros. Es imposible mostrar todo tipo de filtros e intervalos de tiempo en este tutorial, pero puede ejecutar el
man journalctl
comando para ver otras opciones que ofrece la herramienta journalctl.
Personalización del formato de salida
De forma predeterminada, journalctl muestra las entradas de registro en un formato similar a un buscapersonas y colorea el texto del terminal en la salida. Pero probablemente desee generar sus registros en un formato estandarizado y más analizable. En ese caso, puede usar cualquier herramienta de manipulación de texto.
Ejecute el siguiente comando para suprimir la paginación y el coloreado. La herramienta journalctl le permite especificar qué mostrar en stdout con una directiva de salida en el archivo de configuración.
journalctl --no-pager
Pero si prefiere especificar un formato de salida, agregue el -o
opción al comando journalctl. El siguiente ejemplo usa el formato de salida JSON, pero puede usar cualquier otra opción disponible en journalctl.
El siguiente comando enumera las entradas del diario del arranque actual (-b
) generado para el servicio NGINX (nginx
) y genera la lista en formato JSON (-o json
).
journalctl -b -u nginx -o json
Aunque también puede usar un formato de salida personalizado,
journalctl
proporciona varios útiles predefinidos, como JSON, CSV y Syslog. Cada uno de estos formatos tiene sus méritos, pero debe consultar las páginas de herramientas de manipulación de texto para obtener más información sobre cómo manejan el texto.
Conclusión
En este tutorial, ha aprendido a usar el journalctl
Comando para ver los registros de diario de systemd. Pero antes de usar cualquiera de estos comandos, primero debe seleccionar las opciones de subcomando adecuadas para especificar lo que desea ver.
En este punto, ahora puede ubicar y señalar rápidamente información específica dentro de los registros de su sistema a través de journalctl
. Ahora cuenta con los conocimientos necesarios, así que ¿por qué no empezar a administrar los servicios de Linux con systemctl y journalctl?