Análisis de los logs, que todo sysadmin debe conocer, y para lograr hacer esto de forma simple te muestro el comando journalctl con varios ejemplos. Cómo usar Journalctl para ver y manipular los registros de Systemd
Cómo analizar los logs del sistema en Linux con journalctl
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.
Algunas de las ventajas más convincentes de systemd son
las que se relacionan con el proceso y registro del sistema. Al usar
otros sistemas, los registros suelen estar dispersos por todo el
sistema, son manejados por diferentes demonios y herramientas, y puede
ser bastante difícil de interpretar cuando abarcan varias aplicaciones. Systemd
intenta resolver estos problemas al proporcionar una solución de
administración centralizada para registrar todos los procesos del kernel
y del usuario. El sistema que recopila y administra estos registros se
conoce como diario.
El diario se implementa con el demonio journald, que gestiona todos los mensajes producidos por el kernel, initrd, servicios, etc. En esta guía, veremos cómo usar la utilidad journalctl, que puede usarse para acceder y manipular los datos que se encuentran dentro del diario.
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»)
Configurar la hora del sistema
Una de las ventajas de usar un diario binario para el registro es la
posibilidad de ver los registros en hora UTC o local libremente. systemd mostrará los resultados en hora local de manera predeterminada.
Debido a esto, antes de comenzar con el diario, nos aseguraremos de
que la zona horaria esté configurada correctamente. El paquete de systemd realmente viene con una herramienta llamada timedatectl que puede ayudar con esto.
Primero, consulte qué zonas horarias están disponibles con la opción list-timezones:
timedatectl list-timezones
Esto mostrará la lista de zonas horarias disponibles en su sistema.
Cuando encuentre la que coincida con la ubicación de su servidor, puede
configurarla usando la opción set-timezone:
sudo timedatectl set-timezone zone
Para asegurarse de que su máquina esté usando la hora correcta actual, utilice el comando timedatectl solo o con la opción status. En la pantalla, se mostrará lo mismo:
timedatectl status
Local time: Thu 2015-02-05 14:08:06 EST
Universal time: Thu 2015-02-05 19:08:06 UTC
RTC time: Thu 2015-02-05 19:08:06
Time zone: America/New_York (EST, -0500)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
La primera línea debe mostrar la hora correcta.
Ejemplos
Saber la versión
journalctl --version
Ver logs en tiempo real
journalctl -f
En tiempo real de una servicio en concreto:
journalctl -f sshd.service
Ver logs del kernel
journalctl -k
Ver logs del boot actual
journalctl -b
journalctl --list-boots
Por ejemplo, para obtener los mensajes de hace cinco arranques, puede escribir lo siguiente:
journalctl -k -b -5
Ver logs más recientes
journalctl -r
Ver logs de un servicio
journalctl -u sshd.service
Resulta extremadamente útil cuando se aprovecha la capacidad del diario para intercalar registros de varias unidades. Por ejemplo, si su proceso de Nginx está conectado a una unidad PHP-FPM para procesar contenido dinámico, puede combinar las entradas de ambos en orden cronológico especificando ambas unidades:
journalctl -u nginx.service -u php-fpm.service --since today
Ver una cantidad n de registros
Para mostrar una cantidad determinada de registros, puede usar la opción -n, que funciona exactamente igual que tail -n.
Por defecto, se mostrarán las 10 entradas más recientes:
journalctl -n
journalctl -n 50
Ver el log de un PID
systemd tiene muchos campos que pueden usarse
para filtrar. Algunos de estos son pasados desde el proceso que se está
registrando y otros son aplicados por journald usando la información que recopila del sistema en el momento del registro.journalctl _PID=3475
Ver el log de un usuario
journalctl _UID=1000
Ver el log de un programa
journalctl _COMM=vmtoolsd
Ver logs por fecha y hora
Ver los logs desde el día de ayer hasta hoy a las 10:00 horas.
journalctl --since 'yesterday' --until '10:00'
Ver logs de los últimos 30 minutos:
journalctl --since '30 min ago'
Ver registros desde hoy
journalctl --since today
Ver registros desde ayer a hoy
journalctl --since yesterday --until now
En un rango de fechas específico
journalctl --since='2021-04-01 00:01' --until='2021-04-07 00:01'
Podemos ver los logs de un servicio en particular entre fechas
journalctl -u sshd.service --since='2021-04-01 00:01' --until='2021-04-07 00:01'
- journalctl --since "1 hour ago"
- journalctl --since "30 minutes ago"
- journalctl --since "30 minutes ago"
- journalctl --since "1 day ago"
- journalctl --since "1 wheek ago"
- journalctl --since "1 week ago"
- journalctl --since "1 month ago"
- journalctl --since "1 year ago"
- journalctl --since "1 year ago"
Ver logs por prioridad que le asigna el sistema
- «emerg» (0)
- »alert» (1)
- «crit» (2)
- «err» (3)
- «warning» (4)
- «notice» (5)
- »info» (6)
- «debug» (7)
journalctl -p 1
En orden de mayor a menor prioridad, estos son, en español
- 0: emergencia
- 1: alerta
- 2: crítico
- 3: error
- 4: advertencia
- 5: aviso
- 6: información
- 7: depuración
Un filtro que suele interesar a los administradores de sistemas es el de prioridad de mensaje. Aunque a menudo es útil registrar información a un nivel muy verboso, cuando realmente se asimila la información disponible, los registros de baja prioridad pueden distraer y confundir.
Puede usar journalctl para mostrar solo mensajes de una prioridad especifica o superior usando la opción -p. Esto le permite filtrar mensajes de menor prioridad.
Por ejemplo, para mostrar solo las entradas registradas en el nivel de error o superior, puede escribir lo siguiente:
journalctl -p err -b
Ver log de los disco duro
journalctl /dev/sda
Ver el espacio que están ocupando los diferentes logs
journalctl --disk-usage
En el caso de que ese valor fuera muy grande lo podemos limitar en el archivo /etc/systemd/journald.conf.
Enviar resultado a un archivo
journalctl -f -u sshd.service > resultado.txt
Ver los registros de inicio con identificadores numéricos
journalctl --list-boots
Formatos de resultado
Si está procesando las entradas del diario, como se mencionó
anteriormente, es probable que le resulte más fácil analizar los datos
si están en un formato más fácil de usar. Afortunadamente, el diario
puede mostrarse en varios formatos según sea necesario. Puede hacerlo
usando la opción -o con un especificador de formato.
Por ejemplo, puede mostrar las entradas del diario en JSON escribiendo lo siguiente:
journalctl -b -u nginx -o json
Eso es útil para el análisis sintáctico con utilidades. Puede usar el formato json-pretty para obtener un mejor manejo de la estructura de datos antes de transmitirla al consumidor JSON:
journalctl -b -u nginx -o json-pretty
Se pueden usar los siguientes formatos para la visualización:
- cat: Muestra solo el campo de mensaje.
- export: Formato binario adecuado para transferir o hacer copias de seguridad.
- json: JSON estándar con una entrada por línea.
- json-pretty: JSON formateado para una mejor legibilidad humana
- json-sse: Resultado formateado JSON envuelto para hacer que el evento enviado por servidor sea compatible
- short: El resultado de estilo
syslogpredeterminado - short-iso: El formato predeterminado aumentado para mostrar las marcas de tiempo del reloj de pared ISO 8601.
- short-monotonic: El formato predeterminado con marcas de tiempo monotónicas.
- short-precise: El formato predeterminado con precisión de microsegundos.
- verbose: Muestra todos los campos del diario disponibles para la entrada, incluidos los que suelen estar ocultos internamente.
Eliminar registros antiguos
Si desea reducir su diario, puede hacerlo de dos distintas formas (disponibles en la versión 218 y posterior de systemd).
Si usa la opción --vacuum-size, puede reducir su diario
indicando un tamaño. Esto eliminará las entradas antiguas hasta que el
espacio total del diario ocupado en el disco sea del tamaño solicitado:
sudo journalctl --vacuum-size=1G
Otra forma de reducir el diario es proporcionar un tiempo límite con la opción --vacuum-time.
Cualquier entrada que sobrepase ese límite de tiempo será eliminada.
Esto le permite mantener las entradas que se han creado después de un
tiempo específico.
Por ejemplo, para guardar las entradas del último año, puede escribir lo siguiente:
sudo journalctl --vacuum-time=1years
Limitar tamaño
Puede configurar su servidor para que ponga límites sobre cantidad de
espacio que puede ocupar el diario. Puede hacer esto editando el
archivo /etc/systemd/journald.conf
Puede usar los siguientes elementos para limitar la expansión del diario:
SystemMaxUse=: especifica el espacio máximo de disco que puede usar el diario en el almacenamiento persistente.SystemKeepFree=: especifica la cantidad de espacio que el diario debe dejar libre al añadir entradas del diario al almacenamiento persistente.SystemMaxFileSize=: controla el tamaño que pueden alcanzar los archivos individuales del diario en el almacenamiento persistente antes de rotar.RuntimeMaxUse=: especifica el espacio máximo de disco que puede usarse en el almacenamiento volátil (dentro del sistema de archivos/run).RuntimeKeepFree=: especifica la cantidad de espacio que debe reservarse para otros usos al escribir datos en el almacenamiento volátil (dentro del sistema de archivos/run).RuntimeMaxFileSize=: especifica la cantidad de espacio que puede ocupar un archivo de diario individual en el almacenamiento volátil (dentro del sistema de archivos/run) antes de rotar.
Al establecer estos valores, puede controlar la forma en que journald utiliza y preserva el espacio en su servidor. Tenga en cuenta que SystemMaxFileSize y RuntimeMaxFileSize
orientarán los archivos para llegar a los límites indicados. Es
importante recordar esto al interpretar el recuento de archivos después
de una operación vaciado.


No hay comentarios:
Publicar un comentario