¿Cómo monitorizar cambios en tiempo real en un archivo de registro de Linux con 'tail'?

LinuxBeginner
Practicar Ahora

Introducción

Los registros de Linux (Linux logs) son la piedra angular de la monitorización y la resolución de problemas del sistema, proporcionando información invaluable sobre el funcionamiento interno de su sistema. En este tutorial, exploraremos los conceptos fundamentales de los registros de Linux y cómo monitorizarlos eficazmente utilizando el versátil comando 'tail'.

Aprenderá dónde se almacenan los archivos de registro, cómo ver su contenido, rastrear los cambios en tiempo real y extraer información específica. Estas habilidades son esenciales para cualquier persona que trabaje con sistemas Linux, ya que le permiten diagnosticar problemas, monitorizar el estado del sistema y comprender lo que su sistema está haciendo en segundo plano.

Comprensión de los Archivos de Registro de Linux y sus Ubicaciones

Los sistemas Linux mantienen registros detallados de diversas actividades, errores y eventos en archivos de texto especializados llamados archivos de registro (log files). Estos registros sirven como la principal fuente de información al solucionar problemas o monitorizar el estado del sistema.

¿Dónde se almacenan los registros de Linux?

La mayoría de las distribuciones de Linux, incluyendo Ubuntu 22.04, almacenan los archivos de registro en el directorio /var/log. Exploremos este directorio para ver qué archivos de registro están disponibles en su sistema.

Abra su terminal e ingrese el siguiente comando:

ls -l /var/log

Debería ver una salida similar a esta:

total 1048
drwxr-x---  2 root   adm      4096 May  2 09:52 apache2
drwxr-xr-x  2 root   root     4096 Apr 30 15:27 apt
-rw-r-----  1 syslog adm    183867 May  2 10:18 auth.log
-rw-r--r--  1 root   root     1112 Nov 17  2022 alternatives.log
drwxr-xr-x  2 root   root     4096 Apr 20  2022 cups
-rw-r-----  1 syslog adm    308342 May  2 10:18 kern.log
-rw-rw-r--  1 root   utmp        0 Apr 20  2022 lastlog
drwxr-xr-x  2 root   root     4096 Nov  8  2022 nginx
-rw-r-----  1 syslog adm    473079 May  2 10:18 syslog

Los archivos y directorios exactos variarán dependiendo del software instalado en su sistema.

Archivos de Registro Comunes y su Contenido

Aquí hay algunos de los archivos de registro más importantes que encontrará:

  • /var/log/syslog: Contiene mensajes generales del sistema
  • /var/log/auth.log: Registra los intentos de autenticación y la gestión de usuarios
  • /var/log/kern.log: Contiene mensajes y errores del kernel
  • /var/log/apt: Directorio que contiene los registros de gestión de paquetes

Examinemos el contenido de uno de estos archivos. Dado que estamos aprendiendo sobre la monitorización de registros, comenzaremos con una vista básica del registro del sistema:

sudo head -n 20 /var/log/syslog

El comando head muestra las primeras líneas de un archivo (20 en este caso). Usamos sudo porque algunos archivos de registro solo pueden ser leídos por usuarios con privilegios administrativos.

Debería ver una salida similar a:

May  2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May  2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May  2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May  2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May  2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May  2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May  2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...

Observe el formato de cada entrada de registro:

  • Fecha y hora
  • Nombre de host (ubuntu en este ejemplo)
  • Programa o servicio que genera el registro
  • El mensaje de registro real

Comprensión de la Estructura de la Entrada de Registro

La mayoría de las entradas de registro siguen un formato estándar, lo que las hace más fáciles de leer y procesar. El formato típico incluye:

  1. Timestamp (Marca de tiempo): Cuándo ocurrió el evento
  2. Hostname (Nombre de host): El nombre de la máquina
  3. Service/Application (Servicio/Aplicación): Qué generó el registro
  4. Message (Mensaje): La información real sobre lo que sucedió

Ahora que comprende dónde se encuentran los registros y cómo están estructurados, pasemos a ver las últimas entradas en un archivo de registro utilizando el comando tail.

Uso del comando básico 'tail' para ver archivos de registro

Mientras que el comando head muestra el principio de un archivo, el comando tail muestra el final de un archivo. Esto es particularmente útil para los archivos de registro, ya que las entradas más recientes suelen estar al final.

Uso básico del comando 'tail'

La sintaxis básica del comando tail es:

tail [options] [file]

Por defecto, tail muestra las últimas 10 líneas de un archivo. Probémoslo con el registro del sistema:

sudo tail /var/log/syslog

Debería ver las 10 entradas de registro más recientes:

May  2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May  2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May  2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May  2 10:17:01 ubuntu CRON[8752]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Visualización de un número personalizado de líneas

A veces, 10 líneas no son suficientes para obtener el contexto que necesita. Puede especificar cuántas líneas mostrar utilizando la opción -n:

sudo tail -n 5 /var/log/syslog

Esto mostrará solo las últimas 5 líneas del archivo:

May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Visualización de registros de autenticación

El archivo /var/log/auth.log contiene información sobre la autenticación de usuarios y eventos relacionados con la seguridad. Veamos las entradas más recientes:

sudo tail -n 15 /var/log/auth.log

Podría ver una salida similar a:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May  2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May  2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May  2 10:20:01 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May  2 10:21:15 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Este registro muestra los intentos de inicio de sesión de usuarios, la apertura y el cierre de sesiones, y el uso del comando sudo. Es un registro esencial para la monitorización de la seguridad y la solución de problemas de acceso de usuarios.

Visualización de registros del kernel

El kernel es el núcleo del sistema operativo Linux. El archivo /var/log/kern.log contiene mensajes generados por el kernel, que son útiles para diagnosticar problemas de hardware y controladores:

sudo tail -n 10 /var/log/kern.log

La salida podría verse así:

May  2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May  2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May  2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May  2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May  2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May  2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May  2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May  2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access     SanDisk  Ultra            1.00 PQ: 0 ANSI: 6
May  2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0

Ahora que comprende cómo ver las últimas entradas en los archivos de registro, pasemos a la monitorización de registros en tiempo real, que es una de las características más poderosas del comando tail.

Monitorización de registros en tiempo real con 'tail -f'

Una de las características más poderosas del comando tail es su capacidad para monitorizar archivos en tiempo real utilizando la opción -f (abreviatura de "follow", seguir). Esto es particularmente útil para observar los archivos de registro a medida que se añaden nuevas entradas, lo que ayuda con la solución de problemas y la monitorización.

Comprensión de 'tail -f'

La opción -f le dice a tail que mantenga el archivo abierto y muestre continuamente las nuevas líneas a medida que se añaden al archivo. Esto crea una vista en tiempo real del archivo de registro, lo que le permite ver los eventos a medida que ocurren.

Monitorización de los registros del sistema en tiempo real

Usemos la opción -f para monitorizar el registro del sistema en tiempo real:

sudo tail -f /var/log/syslog

Después de ejecutar este comando, verá las entradas más recientes en el archivo de registro, y la terminal permanecerá abierta, mostrando nuevas entradas a medida que aparecen.

Para generar algunas entradas de registro, abramos una nueva ventana de terminal (presione Ctrl+Alt+T para abrir una nueva terminal) y ejecutemos algunos comandos básicos:

logger "This is a test message from user $(whoami)"

El comando logger envía un mensaje al registro del sistema. Ahora, vuelva a su primera ventana de terminal donde está ejecutando tail -f, y debería ver que su mensaje de prueba aparece en el registro:

May  2 10:34:45 ubuntu labex: This is a test message from user labex

Intente ejecutar el comando logger algunas veces más con diferentes mensajes para verlos aparecer en tiempo real:

logger "System test number 2"
logger "Monitoring logs is fun!"

Cada uno de estos mensajes debería aparecer en su ventana de salida de tail -f a medida que se registran.

Cuando termine de ver el registro, presione Ctrl+C para detener el comando tail -f y volver al indicador de comandos.

Monitorización de la actividad de autenticación

Monitoricemos el registro de autenticación para observar los eventos relacionados con el inicio de sesión y la autenticación:

sudo tail -f /var/log/auth.log

Esto le mostrará las actividades de autenticación en tiempo real, como los inicios de sesión de usuarios, el uso del comando sudo y los fallos de autenticación.

Para generar algunas entradas de registro de autenticación, abra una nueva terminal y ejecute un comando sudo:

sudo ls /root

Debería ver nuevas entradas aparecer en su ventana de tail -f mostrando la actividad de sudo:

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

De nuevo, presione Ctrl+C para detener el comando tail -f cuando termine de observar.

Casos de uso prácticos para la monitorización de registros en tiempo real

La monitorización de registros en tiempo real es increíblemente útil en varios escenarios:

  1. Solución de problemas: Cuando algo no funciona, observar los registros en tiempo real puede ayudar a identificar el problema.
  2. Monitorización de seguridad: Observar los registros de autenticación puede ayudar a detectar intentos de acceso no autorizados.
  3. Depuración de aplicaciones: Los desarrolladores pueden observar los registros de la aplicación para comprender lo que está sucediendo durante las pruebas.
  4. Administración del sistema: Los administradores pueden monitorizar los registros del sistema durante el mantenimiento o los cambios de configuración.

Por ejemplo, si estuviera solucionando un problema de red, podría monitorizar el registro del sistema mientras intenta conectarse para ver cualquier mensaje de error que aparezca.

Al dominar la monitorización de registros en tiempo real con tail -f, obtiene una herramienta poderosa para comprender el comportamiento de su sistema a medida que ocurre.

Filtrado de información de registro para un mejor análisis

Los archivos de registro pueden ser muy grandes y contener mucha información. Para que el análisis de registros sea más manejable, puede combinar el comando tail con otras herramientas como grep para filtrar y encontrar información específica.

Uso de 'grep' con 'tail'

El comando grep busca patrones en el texto. Cuando se combina con tail, le permite filtrar las entradas de registro para palabras clave o patrones específicos. La sintaxis básica es:

tail [options] [file] | grep "pattern"

Veamos algunos ejemplos prácticos:

Búsqueda de mensajes de error

Para encontrar mensajes de error en el registro del sistema, puede filtrar por la palabra "error":

sudo tail -n 100 /var/log/syslog | grep -i "error"

La opción -i con grep hace que la búsqueda no distinga entre mayúsculas y minúsculas, por lo que coincidirá con "error", "Error", "ERROR", etc. Podría ver una salida como:

May  2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May  2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456

Si no ve ningún resultado, significa que no hay mensajes de error en las últimas 100 líneas del registro.

Monitorización de servicios específicos

También puede filtrar los registros para monitorizar un servicio o programa específico. Por ejemplo, para monitorizar la actividad relacionada con SSH:

sudo tail -n 100 /var/log/auth.log | grep "sshd"

Esto mostrará solo las entradas relacionadas con SSH en el registro de autenticación:

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex

Monitorización filtrada en tiempo real

También puede combinar la monitorización en tiempo real con el filtrado para observar eventos específicos a medida que ocurren:

sudo tail -f /var/log/syslog | grep --line-buffered "test"

La opción --line-buffered asegura que grep muestre cada línea coincidente inmediatamente, en lugar de almacenarlas en búfer, lo cual es importante cuando se usa tail -f.

Ahora, en otra terminal, genere un mensaje de registro de prueba:

logger "This is a test message for grep filtering"

En su primera terminal, solo debería ver que aparece este mensaje (y no otros mensajes de registro) debido al filtro grep para "test".

Filtrado avanzado con múltiples patrones

También puede buscar múltiples patrones utilizando el operador OR (|) en grep:

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

La opción -E habilita las expresiones regulares extendidas, lo que le permite usar el operador OR. Este comando mostrará las líneas que contengan cualquiera de las palabras "error", "warning" o "critical".

Extracción de información específica con 'awk'

Para un filtrado y formato más avanzados, puede usar el comando awk. Por ejemplo, para extraer solo la hora y el mensaje de syslog:

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

Esto extrae campos específicos de cada entrada de registro, lo que facilita la concentración en la información más relevante.

Al dominar estas técnicas de filtrado, puede analizar eficientemente archivos de registro grandes y extraer exactamente la información que necesita para la solución de problemas y la monitorización.

Resumen

Enhorabuena por completar este laboratorio sobre la monitorización de cambios en tiempo real en los archivos de registro de Linux con el comando 'tail'. Ha aprendido varias habilidades importantes:

  1. Comprensión de los archivos de registro de Linux: Ahora sabe dónde se almacenan los registros, qué contienen y cómo se estructuran las entradas de registro.

  2. Visualización básica de registros: Puede usar el comando tail para ver las entradas más recientes en los archivos de registro y especificar cuántas líneas mostrar.

  3. Monitorización en tiempo real: Con tail -f, puede observar los registros a medida que se actualizan, lo que le permite observar las actividades del sistema y solucionar problemas a medida que ocurren.

  4. Filtrado de información de registro: Al combinar tail con herramientas como grep y awk, puede extraer información específica de los registros, haciendo que el análisis sea más eficiente.

Estas habilidades son esenciales para cualquier persona que trabaje con sistemas Linux, desde principiantes hasta administradores experimentados. El análisis de registros es una parte fundamental del mantenimiento del sistema, la solución de problemas y la monitorización de la seguridad.

A medida que continúe su viaje en Linux, descubrirá que estas técnicas de monitorización de registros le ayudarán a comprender mejor su sistema, diagnosticar problemas más rápidamente y mantener un entorno más seguro y fiable.