Cómo supervisar en tiempo real los cambios de un archivo de registro de Linux con «tail»

LinuxBeginner
Practicar Ahora

Introducción

Los registros de Linux son fundamentales para supervisar el sistema y resolver problemas, ya que proporcionan información muy valiosa sobre su funcionamiento interno. En este tutorial, conocerás los conceptos básicos de los registros de Linux y aprenderás a supervisarlos eficazmente mediante el versátil comando «tail».

Aprenderás dónde se almacenan los archivos de registro, cómo consultar su contenido, seguir 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 permiten diagnosticar problemas, supervisar el estado del sistema y comprender qué ocurre en segundo plano.

Comprender los archivos de registro de Linux y sus ubicaciones

En este paso, explorarás /var/log y examinarás la estructura de una entrada típica del registro del sistema. Los sistemas Linux registran actividades, errores y eventos en archivos de registro, que constituyen una fuente principal de información para resolver problemas y supervisar el sistema.

¿Dónde se almacenan los registros de Linux?

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

Abre la terminal e introduce el siguiente comando:

ls -l /var/log

Deberías ver un resultado similar a este:

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 varían según la imagen y el software instalado. La configuración de este laboratorio crea /var/log/syslog, /var/log/auth.log y /var/log/kern.log con entradas de ejemplo realistas, para que puedas practicar todos los comandos de forma coherente.

Archivos de registro habituales y su contenido

Estos son algunos de los archivos de registro más importantes que encontrarás:

  • /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 núcleo
  • /var/log/apt: directorio que contiene los registros de gestión de paquetes

Examinemos el contenido de uno de estos archivos. Como estamos aprendiendo a supervisar 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ías ver un resultado similar a este:

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.
...

Observa el formato de cada entrada del registro:

  • Fecha y hora
  • Nombre del equipo (ubuntu en este ejemplo)
  • Programa o servicio que genera el registro
  • Mensaje del registro

Comprender la estructura de una entrada de registro

La mayoría de las entradas de registro siguen un formato estándar, lo que facilita su lectura y procesamiento. El formato habitual incluye:

  • Marca de tiempo: cuándo ocurrió el evento
  • Nombre del equipo: nombre de la máquina
  • Servicio/aplicación: qué generó el registro
  • Mensaje: información concreta sobre lo sucedido

Ahora que sabes dónde se encuentran los registros y cómo están estructurados, pasemos a consultar las entradas más recientes de un archivo de registro mediante el comando tail.

Usar el comando básico «tail» para consultar archivos de registro

En este paso, usarás tail para examinar las entradas recientes de varios archivos de registro de práctica. Mientras que head muestra el principio de un archivo, tail muestra el final, donde normalmente aparecen las entradas más recientes.

Uso básico del comando «tail»

La sintaxis básica del comando tail es:

tail [options] [file]

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

sudo tail /var/log/syslog

Deberías 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

Consultar un número personalizado de líneas

A veces, 10 líneas no bastan para obtener el contexto necesario. Puedes especificar cuántas líneas mostrar mediante la opción -n:

sudo tail -n 5 /var/log/syslog

Esto mostrará únicamente 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

Consultar los registros de autenticación

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

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

Podrías ver un resultado similar a este:

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 intentos de inicio de sesión, aperturas y cierres de sesiones, y el uso de comandos sudo. Es esencial para supervisar la seguridad y resolver problemas relacionados con el acceso de los usuarios.

Consultar los registros del núcleo

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

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

El resultado podría tener este aspecto:

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 sabes consultar las entradas más recientes de los archivos de registro, pasemos a supervisarlos en tiempo real, una de las funciones más potentes del comando tail.

Supervisar registros en tiempo real con «tail -f»

En este paso, seguirás archivos de registro y generarás nuevas entradas para observarlas de inmediato. La opción -f (abreviatura de «follow») mantiene abierto el archivo y muestra las nuevas líneas a medida que se añaden, algo muy útil para resolver problemas y supervisar el sistema.

Comprender «tail -f»

La opción -f indica a tail que mantenga abierto el archivo y muestre continuamente las nuevas líneas que se incorporen. De este modo, se obtiene una vista en tiempo real del archivo de registro y es posible ver los eventos en el momento en que ocurren.

Supervisar los registros del sistema en tiempo real

Usaremos la opción -f para supervisar el registro del sistema en tiempo real:

sudo tail -f /var/log/syslog

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

Para generar una entrada de registro, abre otra ventana de terminal (pulsa Ctrl+Alt+T) y añade un mensaje de prueba:

echo "$(date '+%b %e %T') ubuntu $(whoami): This is a test message from user $(whoami)" | sudo tee -a /var/log/syslog

tee -a añade el mensaje al registro del sistema utilizado en la práctica. Vuelve ahora a la primera terminal, donde se está ejecutando tail -f, y deberías ver aparecer el mensaje de prueba:

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

Añade algunos mensajes más para ver cómo aparecen en tiempo real:

echo "$(date '+%b %e %T') ubuntu labex: System test number 2" | sudo tee -a /var/log/syslog
echo "$(date '+%b %e %T') ubuntu labex: Monitoring logs is fun!" | sudo tee -a /var/log/syslog

Cada uno de estos mensajes debería aparecer en la ventana donde se muestra la salida de tail -f.

Cuando termines de observar el registro, pulsa Ctrl+C para detener el comando tail -f y volver al símbolo del sistema.

Supervisar la actividad de autenticación

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

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

Esto mostrará en tiempo real actividades de autenticación, como inicios de sesión de usuarios, uso de comandos sudo y fallos de autenticación.

Para generar una entrada con formato de autenticación, abre otra terminal y añade un evento de ejemplo:

echo "$(date '+%b %e %T') ubuntu sudo: labex ran /usr/bin/ls /root" | sudo tee -a /var/log/auth.log

Deberías ver aparecer la nueva entrada en la ventana de tail -f:

May  2 10:38:23 ubuntu sudo: labex ran /usr/bin/ls /root

De nuevo, pulsa Ctrl+C para detener el comando tail -f cuando termines de observarlo.

Casos prácticos de la supervisión de registros en tiempo real

La supervisión de registros en tiempo real resulta especialmente útil en varias situaciones:

  • Resolución de problemas: cuando algo no funciona, observar los registros en tiempo real puede ayudar a identificar la causa.
  • Supervisión de la seguridad: consultar los registros de autenticación permite detectar intentos de acceso no autorizados.
  • Depuración de aplicaciones: los desarrolladores pueden observar los registros de una aplicación para entender qué ocurre durante las pruebas.
  • Administración del sistema: los administradores pueden supervisar los registros durante tareas de mantenimiento o cambios de configuración.

Por ejemplo, si estuvieras investigando un problema de red, podrías supervisar el registro del sistema mientras intentas conectarte para comprobar si aparecen mensajes de error.

Al dominar la supervisión de registros en tiempo real con tail -f, obtienes una herramienta muy potente para comprender el comportamiento del sistema mientras sucede.

Filtrar información de los registros para analizarlos mejor

En este paso, combinarás tail con grep y awk para centrarte en las entradas de registro relevantes. Estos filtros facilitan el trabajo con archivos de registro grandes, ya que permiten seleccionar o dar formato únicamente a la información que necesitas.

Usar «grep» con «tail»

El comando grep busca patrones en textos. Al combinarlo con tail, puedes filtrar las entradas de registro según palabras clave o patrones específicos. La sintaxis básica es:

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

Veamos algunos ejemplos prácticos:

Buscar mensajes de error

Para buscar mensajes de error en el registro del sistema, puedes filtrar la palabra "error":

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

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

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 aparece ningún resultado, significa que no hay mensajes de error en las últimas 100 líneas del registro.

Supervisar servicios específicos

También puedes filtrar los registros para supervisar un servicio o programa concreto. Por ejemplo, para supervisar la actividad relacionada con SSH:

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

Esto mostrará únicamente 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

Supervisión filtrada en tiempo real

También puedes combinar la supervisión en tiempo real con filtros para observar eventos específicos a medida que ocurren:

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

La opción --line-buffered garantiza que grep muestre cada línea coincidente de inmediato, en lugar de almacenarla temporalmente, algo importante al utilizar tail -f.

Ahora, en otra terminal, añade un mensaje de prueba que coincida con el filtro:

echo "$(date '+%b %e %T') ubuntu labex: This is a test message for grep filtering" | sudo tee -a /var/log/syslog

En la primera terminal, solo deberías ver aparecer este mensaje, y no los demás, debido al filtro de grep para "test".

Filtrado avanzado con varios patrones

También puedes buscar varios patrones mediante el operador OR (|) de grep:

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

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

Extraer información específica con «awk»

Para realizar filtrados y dar formato más avanzados, puedes utilizar el comando awk. Por ejemplo, para extraer únicamente 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 concretos de cada entrada del registro, lo que facilita centrarse en la información más relevante.

Al dominar estas técnicas de filtrado, podrás analizar eficazmente archivos de registro grandes y extraer exactamente la información que necesitas para resolver problemas y supervisar el sistema.

Resumen

Enhorabuena por completar este laboratorio sobre la supervisión en tiempo real de los cambios en archivos de registro de Linux mediante el comando «tail». Has aprendido varias habilidades importantes:

  1. Comprender los archivos de registro de Linux: ahora sabes dónde se almacenan, qué contienen y cómo están estructuradas sus entradas.

  2. Consulta básica de registros: puedes utilizar el comando tail para consultar las entradas más recientes de los archivos de registro y especificar cuántas líneas mostrar.

  3. Supervisión en tiempo real: con tail -f, puedes observar cómo se actualizan los registros, seguir las actividades del sistema y resolver problemas mientras ocurren.

  4. Filtrado de información de los registros: al combinar tail con herramientas como grep y awk, puedes extraer información específica de los registros y hacer 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 resolución de problemas y la supervisión de la seguridad.

A medida que avances en tu aprendizaje de Linux, descubrirás que estas técnicas de supervisión de registros te ayudarán a comprender mejor el sistema, diagnosticar problemas con mayor rapidez y mantener un entorno más seguro y fiable.