systemd

Master journalctl comprender los registros de systemd

Master journalctl comprender los registros de systemd
Systemd es la nueva herramienta de gestión de servicios. Creado inicialmente por Red Hat, permite administrar mejor los servicios a través de un proceso centralizado que monitorea y lanza servicios según sea necesario. Pero systemd también incluye un sistema contenedor, un sistema cron, una forma de proporcionar directorios temporales a los servicios de forma segura y también un sistema de registro; ahí es donde nos centraremos aquí.

Comprender los registros es importante: si alguna vez cae en un servidor que tiene un error o está pirateado, generalmente la única forma de comprender lo que sucedió es a través de los registros. La aplicación principal que vamos a utilizar es journalctl, de ahí el nombre del artículo. Así que escuche con atención, ya que en el día correcto, puede que le guste saber cómo funciona.

¿Dónde se almacenan los registros de systemd?? ¿Y en qué formato está almacenado??

Supondremos que tiene un sistema normal, porque systemd se puede personalizar para estar en lugares excepcionales. Además, algunas distribuciones de Linux como Ubuntu 16.04 deshabilitó el registro persistente de forma predeterminada, lo que evita que systemd haga su trabajo correctamente. Si tiene dicha distribución, edite / etc / systemd / journald.conf, cambie Storage = auto a Storage = persistent y finalmente, reinicie.

Por lo tanto, encontrará normalmente los archivos de registros de systemd en / var / log / journal. El sistema de diario es en sí mismo un servicio llamado system-journald.Servicio.  Intentemos enumerar los archivos en este directorio:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
system @ a39da368947bd2ba-231f9bfc18a7a356.diario ~
system @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.diario
usuario-1000 @ b27e98812223a9bc-387e0521703f73d9.diario ~
usuario-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.diario
usuario-1000.diario
[muchos otros archivos como los de arriba…]

Como quiero que sigas leyendo, tuve que acortar la salida ya que contiene muchos archivos (en mi ejemplo, más de 60 archivos), lo siento! Tentado a abrir uno tal vez?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [email protected]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.diario
?s, q?n / FLz???Ulz?l?]????
?_?B???z????o?y1KN ?I?eO??W?tu?  ?=?x0?L?D?7??X4n #?mi? d3l?
pag??o | MFO:?!qs?.tK??R?\??1?| 5  ????PS?gramo??#?S??;??B7???????t???Y????Minnesota?q????ZQ
?Yv?mi?????BD?C?? wF??d |
?2?? 7???????[??Naciones Unidas?= 8????C?2 = p?Y?"   ?0
????*????_??  ???
5?????yk?GRAMO? ?6?|??tu??w: # 12?Y??
3 TU;???'?jX??2?X'?=??[[correo electrónico protegido]
[correo electrónico protegido]?_?>??3S???,lR?.?PS?gramo?L???s?/MI??M1??q???

Oye, mira, eso no se parece a los archivos de registro habituales que ves a la derecha? No se preocupe, este archivo no está dañado, acaba de descubrir un aspecto de systemd: systemd almacena archivos en formato binario. Por eso es lo más pequeño posible: los datos estructurados, como la hora o la ubicación, se almacenan directamente en binario, que generalmente ocupa menos bytes que el texto. Pero esa no es la única razón.

systemd no solo almacena líneas de registro. Su intención es facilitar el monitoreo y la exploración de registros. Para ayudar en esta tarea, los mensajes de registro son de hecho una línea de texto acompañada de datos como la gravedad del registro (advertencia, error, etc.), o incluso campos que solo serían útiles para su aplicación (URL solicitada, por ejemplo).

# journalctl --output = verbose --todos
PRIORIDAD = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
UNIDAD = dnf-makecache.Servicio
_TRANSPORT = diario
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system --deserialize 76
_SYSTEMD_CGROUP = / init.alcance
_SYSTEMD_UNIT = init.alcance
_SYSTEMD_SLICE =-.rodaja
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / trabajo.C
CODE_LINE = 795
CODE_FUNCTION = job_log_status_message
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
MENSAJE = Comenzó dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel" RESULT = hecho
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Les dije que hay muchos campos (aquí hay 25 campos, o 29 marcas de tiempo contando), todo el fragmento de arriba es solo para un solo mensaje de registro! El gran beneficio es que puede ejecutar una búsqueda filtrando en cualquier campo en este mensaje de registro. Esto realmente le permite realizar un filtrado avanzado.

Uno de los filtros más obvios que le gustaría es filtrar por servicio. Como puede ver arriba, hay un campo UNIDAD para que pueda filtrar fácilmente para obtener solo mensajes de registro de un servicio. Te contaré más sobre eso más tarde.

Pero esta cantidad de datos también significa algo más: en casi todos los casos, nunca abrirá un archivo de registro manualmente y nunca tocará la carpeta / var / log / journal. Utilizará journalctl para cualquier tarea relacionada con el registro. No existe tal cosa de rotación de registros, todo se administra por el tiempo del mensaje de registro.

Además, la cantidad de campos dependerá de qué tan buena sea la integración de systemd en su aplicación. Cuantos más campos contenga un mensaje de registro, mejor será. Para los servicios del sistema base, systemd ya se encargó de hacer una buena integración pero para otras aplicaciones y servicios, la calidad de la integración varía mucho. Normalmente, esto debería mejorar con el tiempo a medida que la gente se acostumbre a systemd.

Bien, ahora es el momento de descubrir las características de journalctl.

Comandos más utilizados para journalctl

El primer comando que quizás desee ver es el que muestra los registros del kernel de Linux. Sí, systemd también maneja el almacenamiento de los registros del kernel, por lo que también puede obtener los registros de los inicios anteriores. Aquí está el comando:

# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel"

Te muestra un buscapersonas donde puedes ver los últimos mensajes. Puede desplazarse hasta las últimas 3000 líneas usando las teclas de flecha (↑ / ↓) o Page Up / Page Down. El indicador -catalog le indica a journalctl que muestre el contexto alrededor de las líneas de registro, al igual que los reinicios de la computadora o, en otros contextos, un servicio que se detiene / inicia. Siempre coloco esta bandera ya que el contexto siempre importa, ayuda saber en qué situación apareció la línea de registro, para que pueda adivinar por qué obtuvo esta línea de registro.

Ahora, tal vez desee ver solo las líneas de registro del inicio actual:

# journalctl --catalog --lines = 35000 - pager-end --boot "_TRANSPORT = kernel"

Tenga en cuenta que el argumento de la línea de comandos -boot funciona en todas las situaciones, no solo con los registros del kernel. Si prefiere empezar desde el principio:

# journalctl --catalog --boot "_TRANSPORT = kernel"

No sé si es tu caso, pero tengo suficientes registros del kernel! ¿Y qué hay de tener una descripción general de su máquina??

# journalctl --catalog --lines = 3000 --pager-end

Vaya, están sucediendo muchas cosas en su sistema! Un poco de filtrado sería útil aquí. Uno de los filtros más utilizados es la coincidencia de un servicio específico (como su servidor SSH o servidor HTTP), el nombre de archivo de la unidad systemd para el servicio SSH es sshd.servicio, entonces:

# journalctl --catalog --lines = 3000 --pager-end --unit = sshd.Servicio

Eso es genial, ¿no es así?? Bueno, solo se puede usar si conoce el nombre del servicio, pero en muchos casos, no sabe el nombre de ese servicio. Si se encuentra en tal situación, es posible que desee una lista de los servicios, sus descripciones y su estado:

# systemctl list-units --type = servicio

De acuerdo, este problema ya está resuelto. Pero a veces, tiene un mensaje de error que recibe de un sistema externo como su propio sitio web o de una aplicación en su escritorio. Por lo tanto, probablemente desee buscar una palabra u oración específica en el mensaje de registro. Desde systemd v237, ahora es posible.

En journalctl, la búsqueda no distingue entre mayúsculas y minúsculas si la palabra que busca está en minúsculas. Entonces, si busca la palabra puerto, también buscará la palabra puerto con letras en mayúscula. Un ejemplo:

# journalctl --catalog --lines = 3000 --pager-end --grep = "puerto"

Ahora, si busca una palabra como CPU, solo buscará CPU con todas las letras en mayúscula, no buscará cpu.

# journalctl --catalog --lines = 3000 --pager-end --grep = "CPU"

Recuerda el mensaje de error del sistema externo? Generalmente, estos mensajes contienen una marca de tiempo. Para filtrar el mensaje de registro, es posible que desee utilizar esa marca de tiempo. journalctl puede enumerar todos los mensajes de registro desde una fecha y hora específicas con el argumento -since:

# journalctl --catalog --since = "2018-07-30 09:30:00"

Si ese sistema externo es remoto o está usando marcas de tiempo UTC, querrá filtrar en función de una fecha y hora UTC y mostrar en el terminal las marcas de tiempo UTC para que no necesite convertirlo en su cabeza, que tiende a ser realmente confuso. Para hacerlo, deberá agregar UTC después de la cadena de tiempo en el argumento -since. Luego deberá agregar la marca -utc. Así por ejemplo:

# journalctl --catalog --since = "2018-07-30 10:45:00 UTC" --utc

Tenga en cuenta que puede usar el indicador -utc solo, en este caso, básicamente mostrará todas las fechas y horas en la zona horaria UTC.

# journalctl --catalog --lines = 3000 --pager-end --utc

Los registros se administran mejor con journalctl

Como puede ver con todos los comandos anteriores, systemd journaling facilita el filtrado y la depuración, ya que puede seleccionar todas las líneas de registro con un solo comando, journalctl. Algunos de ustedes probablemente conocían tiempos antiguos en los que tenían que abrir manualmente todos los archivos en / var / log para tener una idea general del problema y de lo que sucedió. Con todos los consejos que aprendió aquí, tendrá herramientas sólidas para ver sus mensajes de registro de la manera que USTED quiera.

Tutorial de Battle for Wesnoth
The Battle for Wesnoth es uno de los juegos de estrategia de código abierto más populares que puedes jugar en este momento. Este juego no solo ha esta...
0 A.D. Tutorial
De los muchos juegos de estrategia que existen, 0 A.D. logra destacarse como un título completo y un juego táctico muy profundo a pesar de ser de códi...
Tutorial de Unity3D
Introducción a Unity 3D Unity 3D es un potente motor de desarrollo de juegos. Es multiplataforma, es decir, te permite crear juegos para dispositivos ...