Master JournalCtl Comprender los registros de Systemd

Master JournalCtl Comprender los registros de Systemd
Systemd es los nuevos servicios de gestión de herramientas. Creado inicialmente por Red Hat, permite administrar mejor los servicios a través de un proceso centralizado que monitorea y lanza los servicios según sea necesario. Pero Systemd también incluye un sistema de contenedores, un sistema cron, una forma de proporcionar directorios temporales a los servicios de manera segura y también un sistema de registro, ahí es donde nos vamos a enfocar aquí.

Comprender los registros es importante: si alguna vez cae en un servidor que tiene un error o que sea pirateado, generalmente su única forma de entender lo que sucedió es a través de registros. La aplicación principal que vamos a usar es JournalCtl de ahí el nombre del artículo. Así que escuche atentamente como en el día correcto, puede estar feliz de saber cómo funciona.

¿Dónde están los registros de Systemd Standing Systemd?? Y que formato se almacena en?

Asumiremos 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 Desactivado Registro persistente de forma predeterminada, lo que evita que Systemd haga su trabajo correctamente. Si tiene dicha distribución, edición/etc/systemd/Journald.File conf, cambiar almacenamiento = automático a almacenamiento = persistente y finalmente, reiniciar.

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:
[email protected] ~
sistema@62AC1299826D036CB043D6C06A9493B7-000000000000000001-00067D6410099A19.diario
[email protected] ~
user-1000@2123bc076b58569fe1fb13e9dbc1b0e0-000000000000000001-0007FE36AC2810E0.diario
Usuario-1000.diario
[Muchos otros archivos como los anteriores ...]

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

# Head--Bytes = 512/var/log/Journal/15e43c1734090ac7fbea6b40fcd99d31/user-1000@2123bc076
B58569FE1FB13E9DBC1B0E0-000000000000000001-0007FE36AC2810E0.diario
?S, Q?N/FLZ???Ulz?l?]????
?_?b???z????O?Y1knkn ?i?EO??W?u? ?=?x0?L?d?7??X4n#?mi? D3L?
pag??O | MFO:?!QS?.TK??Riñonal?\??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?|??u??W: #12?Y??
3 Tu;???'?jx??2?X'?=??[Q???@Z
T_???3EHMD?@?_?>??3S???,LR?.?ps?gramo?L???s?/MI??M1??Q???

Oye, mira, eso realmente no se parece a los archivos de registro habituales que ves bien? No se preocupe, este archivo no está dañado, usted acaba de descubrir un aspecto de los archivos de Systemd: Systemd almacena en un formato binario. Es por eso que es lo más pequeño posible: los datos estructurados como el tiempo o la ubicación se almacenan directamente en binario, que generalmente toma 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 los 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 -todo
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 --eserialize 76
_Systemd_cgroup =/init.alcance
_Systemd_unit = init.alcance
_Systemd_slice =-.rebanada
_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 = iniciado dnf makecache.
# JournalCtl--Catalog --lines = 3000--Pager-end "_transport = kernel" resultado = hecho
_Source_realtime_timestamp = 1532886335471422

Te he dicho que hay muchos campos (aquí hay 25 campos, o 29 marcas de tiempo de conteo), todo el fragmento de arriba es solo para un solo mensaje de registro! El gran beneficio es que puede ejecutar una búsqueda filtrándose en cualquier campo en este mensaje de registro. Esto realmente le permite el filtrado avanzado.

Uno de los filtros más obvios que desea es filtrar por el servicio. Como puede ver anteriormente, hay un campo unitario 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á en la carpeta/var/log/Journal. Usará JournalCTL para cualquier tarea relacionada con el registro. No hay tal cosa de rotación de registro, todo se administra por tiempo de mensaje de registro.

Además, el número de campos dependerá de qué tan buena sea la integración de Systemd en su aplicación. Cuantos más campos contiene 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 acostumbra a Systemd.

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

Comandos más usados ​​para JournalCtl

El primer comando en el que quizás desee echar un vistazo 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 botas 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 3.000 líneas usando teclas de flecha (↑ / ↓) o página hacia arriba / página hacia abajo. La bandera -Catalog indica a JournalCTL que muestre contexto en torno a líneas de registro, al igual que los reinicios de la computadora o, en otros contextos, un servicio de detención / inicio. Siempre pongo esta bandera como el contexto siempre importa, es útil saber en qué situación apareció la línea de registro, por lo que puede adivinar por qué obtuvo esta línea de registro.

Ahora, tal vez solo desee ver las líneas de registro desde el arranque actual:

# JournalCtl--Catalog --lines = 35000--Pager-end --Boot "_transport = kernel"

Tenga en cuenta que el argumento de la línea de comandos de Boot funciona en todas las situaciones, no solo con los registros de Kernel. Si prefiere comenzar desde el principio:

# JournalCtl - -Catalog --Boot "_transport = kernel"

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

# JournalCtl-Catalog --lines = 3000--Pager-End

Wow, hay muchas cosas que suceden en tu sistema! Un poco de filtrado sería útil aquí. Uno de los filtros más utilizados es coincidir con 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?? Bueno, solo se puede usar si conoce el nombre del servicio, pero en muchos casos, no sabe el nombre de ese servicio. Si está en tal situación, es posible que desee una lista de los servicios, sus descripciones y su estado:

# SystemCTL List-Units --Type = Service

Bien, este problema ahora se resuelve. 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 o oración específica en el mensaje de registro. Desde Systemd V237, ahora es posible.

En JournalCtl, la búsqueda no es insensible en el caso si la palabra que busca está en minúscula. Entonces, si busca el puerto de la palabra, también buscará en el puerto de palabras con letras capitalizadas. Un ejemplo:

# JournalCtl--Catalog --lines = 3000--Pager-end --grep = "puerto"

Ahora, si busca una palabra como CPU, solo buscará CPU con todas las letras capitalizadas, no buscará CPU.

# JournalCtl--Catalog --lines = 3000--Pager-end --grep = "CPU"

Recuerda el mensaje de error del sistema externo? En general, estos mensajes contienen una marca de tiempo. Para filtrar el mensaje de registro, es posible que desee usar esa marca de tiempo. JournalCTL puede enumerar sus mensajes de registro, ya que 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á utilizando marcas de tiempo UTC, querrá filtrar en función de una fecha y hora de 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. Luego necesitará agregar la bandera -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 horarios en la zona horaria de UTC.

# JournalCtl--Catalog --lines = 3000--Pager-end --UTC

Los registros se gestionan mejor con JournalCtl

Como puede ver con todos los comandos anteriores, Systemd Journaling facilita el filtrado y, por lo tanto, la depuración es más fácil, ya que puede seleccionar a través de todas las líneas de registro utilizando un solo comando, JournalCtl. Algunos de ustedes probablemente conocían a tiempos antiguos en los que tenía que abrir manualmente cada archivo en /var /registro para tener una idea general del problema y de lo que sucedió. Con todos los consejos que aprendió aquí, poseerá herramientas sólidas para ver sus mensajes de registro de la forma en que lo desea.