1. ¿Por qué trabajar con logs?
Los registros (o logs) son como tu "detective" personal que anota cada operación importante en el sistema. Registran las acciones del núcleo, aplicaciones, servicios y otros componentes del sistema. Los logs son una herramienta fundamental para diagnosticar problemas y monitorear el funcionamiento del sistema.
Imagina que tu servidor de repente deja de responder. En lugar de adivinar como Sherlock Holmes qué salió mal, puedes simplemente echar un vistazo a los logs — todo está ahí claramente. Por ejemplo: "El servicio ssh se cayó", "Disco lleno", "El gato pasó por el teclado y detuvo un servicio importante". Los logs te lo cuentan todo.
Trabajar con los logs del sistema ayuda a:
- Diagnosticar problemas. Si algo va mal, en los logs puedes encontrar el error o advertencia.
- Monitorizar el funcionamiento de los servicios. Por ejemplo, descubrir por qué se detuvo la base de datos PostgreSQL o cuándo se actualizó por última vez el servidor web.
- Recopilar analíticas. Monitoreo de rendimiento y métricas de los servicios.
- Aumentar la seguridad. Los logs pueden mostrar intentos de hackeo a través de SSH o accesos no autorizados.
2. Introducción a journalctl
journalctl — es un comando poderoso para ver y filtrar los logs del sistema en Linux. Funciona con systemd-journald — el sistema de recolección y almacenamiento de logs, que es gestionado por systemd.
Acciones básicas con journalctl
Primero, veamos cómo usar esta herramienta. Abre la terminal e ingresa:
journalctl
Este comando te mostrará todos los logs del sistema, organizados en orden cronológico. Si esperas algo modesto, prepárate: usualmente los logs ocupan varias pantallas. No te preocupes, aprenderemos a filtrarlos más adelante.
Ahora, para salir de la vista de los logs, presiona q (¿ya notaste la similitud entre less y journalctl?).
Filtrar logs por tiempo
Ahora vamos a reducir mágicamente los logs a un rango más manejable.
Ver logs de la última hora
journalctl --since "1 hour ago"
Ver logs de un día específico
journalctl --since "2023-10-31"
Especificar un rango de tiempo
¿Quieres ver eventos de 8 a.m. a 9 a.m.? No hay problema:
journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"
Filtrar por tiempo es útil, por ejemplo, si sabes que el problema comenzó en un momento específico. Analogía: no lees todo un libro para saber quién es el asesino — solo miras las últimas páginas.
Trabajar con logs de un servicio específico
En lugar de analizar todo el sistema, puedes enfocarte en un solo servicio. Por ejemplo, si quieres ver cómo está trabajando el servidor web nginx:
journalctl -u nginx
Si prefieres ver registros solo de la última hora (a todos nos gustan las noticias frescas):
journalctl -u nginx --since "1 hour ago"
Lista breve de ejemplos:
-u ssh: Logs para el servicio SSH.-u cron: Logs de las tareas CRON.-u mysql: Logs de la base de datos MySQL.
Leer logs en tiempo real
Cuando estás arreglando algo en el momento, puede ser útil observar los logs en tiempo real, como si fuera un partido de fútbol. Para eso, usa el comando:
journalctl -f
La opción -f funciona similar a tail -f, mostrando nuevos registros de logs a medida que aparecen.
Por ejemplo, intenta ejecutar el comando y reinicia algún servicio al mismo tiempo:
sudo systemctl restart ssh
Verás los cambios — el registro del reinicio aparecerá en los logs.
Buscar errores en los logs
A menudo los logs son largos, y buscar algo interesante manualmente es como buscar una aguja en un pajar. Por eso puedes usar búsquedas por palabras clave.
Uso simple:
journalctl | grep "ERROR"
Este ejemplo mostrará solo las líneas que contengan la palabra ERROR. Puedes reemplazar ERROR con lo que sea, por ejemplo, WARNING, failed o panic.
3. Opciones especiales para journalctl
Ver registros solo después de un reinicio
¿Quieres saber qué sucedió después del último arranque del sistema? ¿Misterioso? Simplemente haz esto:
journalctl -b
Cada vez que el sistema se reinicia, se registra como un "bloque" separado. Si quieres ver los registros después del penúltimo arranque (sí, a veces es útil):
journalctl -b -1
Filtrar por usuario o PID
A veces es necesario rastrear las acciones de un usuario o proceso específico. Por ejemplo:
journalctl _UID=1000
Reemplaza 1000 con el ID del usuario (puedes obtener el ID usando el comando id).
Para filtrar por PID (identificador de proceso):
journalctl _PID=1234
4. Ejemplos prácticos
Búsqueda de errores del servicio SSH.
¿Quieres saber por qué SSH no quiere conectarse? Usa:
journalctl -u ssh | grep "ERROR"Análisis de logs de las últimas 24 horas para CRON.
Digamos que estás revisando por qué tu script diario no se ejecutó:
journalctl -u cron --since "yesterday"Monitoreo en tiempo real del servidor web.
¿El servidor web está bajo carga? Revisa los logs en busca de errores:
journalctl -u nginx -f
Ejercicio para práctica independiente
- Encuentra los logs de errores del servicio SSH de las últimas 24 horas.
- Usando
journalctl, muestra los logs para CRON solo de la mañana. Asegúrate de que el comando funciona con el rango de tiempo correcto. - Organiza el monitoreo de logs de
systemden tiempo real y activa varios servicios del sistema para ver su estado en los logs.
El registro no es solo sobre encontrar errores o diagnosticar problemas. Es tu agente secreto que ayuda a monitorear todo el sistema operativo. Una vez que domines el comando journalctl, tendrás una herramienta poderosa para analizar, optimizar y asegurar el funcionamiento estable del sistema Linux en cualquier condición.
GO TO FULL VERSION