Diagnóstico avanzado en Linux: journalctl, journald, dmesg y análisis de registros del sistema

jun. 1, 2026

Este artículo forma parte de una serie:

En el artículo anterior aprendimos a identificar procesos, vigilar el consumo de recursos y comprobar si un servicio está funcionando. Eso nos permite detectar cuándo algo va mal, pero todavía nos falta una pieza fundamental: entender por qué.

Cuando una aplicación no arranca, un servicio se cae, el sistema tarda demasiado en responder o un usuario no puede autenticarse, Linux suele dejar pistas muy valiosas. Esas pistas viven en los logs, registros que recogen eventos, advertencias, errores y mensajes del sistema a lo largo del tiempo.

La buena noticia es que no necesitas conocer decenas de herramientas ni memorizar todas las rutas del sistema para empezar a aprovecharlos. Si entiendes cómo consultar el journal, qué archivos importantes suelen vivir en /var/log y cómo seguir mensajes en tiempo real, ya tienes una base muy sólida para diagnosticar una gran cantidad de problemas cotidianos.

Qué son los logs y por qué son tan importantes

Un log es, en esencia, un registro cronológico de eventos. Cada vez que el sistema, un servicio o una aplicación quiere dejar constancia de algo relevante, lo escribe ahí: un arranque correcto, una advertencia, un error, un intento de acceso o un fallo de hardware.

La parte importante no es la definición, sino su valor práctico. Los logs convierten un “no funciona” en una secuencia concreta de hechos. Gracias a ellos puedes responder preguntas como estas:

  • ¿Qué servicio falló exactamente?
  • ¿Cuándo empezó el problema?
  • ¿Fue un error de permisos, de configuración o de red?
  • ¿El kernel detectó algún problema con el disco, la memoria o un driver?
  • ¿Hubo intentos fallidos de autenticación?

Sin logs, solucionar incidencias se parece demasiado a adivinar. Con logs, empiezas a reconstruir el contexto real del sistema.

También conviene asumir algo desde el principio: no todos los logs son iguales. Algunos hablan del sistema en general, otros del kernel, otros de autenticación y otros pertenecen a servicios concretos como Nginx, PostgreSQL o Docker. No necesitas dominarlos todos a la vez, pero sí tener un mapa mental claro de por dónde empezar.

El mapa mental básico del logging en Linux

Uno de los motivos por los que el logging puede confundir al principio es que no existe una única pieza universal e idéntica en todas las distribuciones. La buena noticia es que tampoco hace falta memorizar toda la arqueología del ecosistema.

Piensa en ello así:

  • En la mayoría de distribuciones modernas, systemd-journald recoge eventos del sistema y de los servicios gestionados por systemd.
  • En muchos equipos también existe rsyslog o un componente similar que escribe parte de esos eventos en archivos dentro de /var/log.
  • Algunas aplicaciones escriben sus propios logs directamente en ficheros específicos.
  • El kernel genera mensajes propios, que puedes consultar con dmesg y que a menudo también acaban reflejados en el journal.

Ese es el modelo que importa. No hace falta aprender una lista cerrada de rutas porque cambia según la distribución, la versión y los servicios instalados.

Lo que sí conviene tener claro es esto:

Los procesos y servicios te dicen qué está mal; los logs te ayudan a entender por qué.

Con esa idea, el resto empieza a encajar mucho mejor.

Dónde mirar primero: los logs más importantes

Cuando aún no sabes dónde está el problema, tener demasiadas opciones puede paralizar. Por eso merece la pena reducir el terreno de juego a unas pocas fuentes que cubren la mayoría de incidencias cotidianas.

journald y journalctl

En sistemas modernos con systemd, journalctl suele ser la herramienta principal. Es especialmente útil para:

  • ver eventos recientes del sistema;
  • inspeccionar servicios gestionados por systemd;
  • revisar mensajes del arranque actual;
  • filtrar por severidad, unidad o rango temporal.

Si un servicio falla y está bajo systemd, este suele ser el primer sitio donde mirar.

/var/log/syslog o /var/log/messages

Según la distribución, puede existir /var/log/syslog (habitual en Debian y Ubuntu), /var/log/messages (habitual en Red Hat, Fedora o AlmaLinux) o ambos. Son logs generales del sistema y sirven como panorámica amplia cuando quieres ver actividad global sin centrarte todavía en un único componente.

No te obsesiones con el nombre exacto. Lo importante es entender que suele haber algún fichero de “actividad general” mantenido por el sistema de logging clásico.

/var/log/auth.log o /var/log/secure

Aquí suelen aparecer eventos relacionados con autenticación:

  • inicios de sesión;
  • uso de sudo;
  • accesos por SSH;
  • intentos fallidos de login.

Si el problema tiene que ver con permisos, acceso remoto o credenciales, este es un sitio muy valioso. En distribuciones Debian/Ubuntu se llama auth.log; en Red Hat y derivados, secure.

dmesg y los mensajes del kernel

Los mensajes del kernel son especialmente útiles cuando sospechas de:

  • hardware (discos, memoria, red);
  • drivers;
  • problemas durante el arranque.

dmesg te da acceso rápido a esa capa del sistema. Además, en muchos entornos parte de esos mensajes también aparecen en el journal.

Logs específicos de servicios

Muchos servicios mantienen sus propios registros. Algunos ejemplos típicos:

  • Nginx: /var/log/nginx/
  • Apache: /var/log/apache2/
  • PostgreSQL: varía según distribución y configuración
  • Docker: combinado con journalctl o logs propios de contenedores

Aquí la idea importante es no buscar a ciegas. Si el servicio está gestionado por systemd, empieza por journalctl -u nombre. Si además tiene un directorio de logs propio, úsalo como segunda capa de detalle.

Un resumen mental rápido puede ahorrarte mucho tiempo:

  • ¿Falla un servicio? → journalctl -u nombre
  • ¿Falla el arranque o hay problemas de hardware? → dmesg o journalctl -k
  • ¿Problemas de acceso o autenticación? → auth.log o secure
  • ¿Necesitas visión general del sistema? → journalctl o syslog/messages

Cómo ver logs sin volverte loco

Uno de los errores más comunes es abrir un log enorme y esperar que la respuesta aparezca sola. Casi nunca funciona así. La clave está en filtrar.

Empezar por journalctl

Sin opciones, journalctl muestra una enorme cantidad de mensajes históricos:


    journalctl
    

Puede servir para una visión global, pero rara vez es la mejor forma de empezar. Normalmente tiene más sentido acotar desde el principio.

Por arranque:


    journalctl -b
    

Muestra los mensajes del arranque actual. Muy útil si el problema apareció después de reiniciar.

Por servicio o unidad:


    journalctl -u nginx
    journalctl -u ssh
    

Filtra por unidad de systemd. Si sabes qué servicio está fallando, esta opción reduce muchísimo el ruido. Es probablemente la combinación que más usarás.

En tiempo real:


    journalctl -f
    

Sigue el log en tiempo real, parecido a un tail -f. Muy útil cuando vas a reproducir un problema y quieres ver qué aparece justo en ese momento.

Por severidad:


    journalctl -p err..alert
    

Filtra por nivel de prioridad, mostrando errores y situaciones más críticas. Reduce enormemente el volumen de salida en sistemas con mucha actividad.

Por tiempo:


    journalctl --since "1 hour ago"
    journalctl --since "2026-05-31 10:00:00" --until "2026-05-31 11:00:00"
    

Limita por tiempo. Especialmente útil cuando sabes aproximadamente cuándo ocurrió la incidencia. Puedes combinar esta opción con -u para acotar todavía más.

La idea no es memorizar todas las opciones, sino acostumbrarte a pensar en filtros: por arranque, por servicio, por severidad o por tiempo.

Cuando trabajas con archivos dentro de /var/log, hay tres herramientas sencillas que resuelven casi todo:


    tail -f /var/log/syslog
    less /var/log/auth.log
    grep -i error /var/log/syslog
    
  • tail -f sirve para seguimiento en tiempo real del archivo.
  • less te deja navegar con calma sin volcarlo todo en pantalla de golpe. Puedes buscar dentro con /término y salir con q.
  • grep ayuda a localizar patrones rápidos como error, failed, denied o el nombre de un servicio.

Una combinación muy útil cuando el archivo es grande y buscas algo concreto:


    grep -i "failed\|error\|denied" /var/log/auth.log | tail -30
    

Aquí filtras por varios patrones a la vez y limitas la salida a las últimas 30 coincidencias.

Consultar mensajes del kernel

Para eventos relacionados con el kernel y hardware:


    dmesg | less
    dmesg --level=err,warn
    dmesg -T
    

--level=err,warn filtra los mensajes más relevantes y evita parte del ruido normal del sistema. -T muestra las marcas de tiempo en formato legible (fecha y hora) en lugar del tiempo transcurrido desde el arranque, lo que facilita correlacionar eventos con otros logs.

Ejemplo práctico: un 403 Forbidden por permisos en Nginx

Nginx está activo y arranca sin problemas, pero al acceder a una URL concreta los usuarios reciben un error 403 Forbidden. El archivo existe en el servidor, pero sus permisos son demasiado restrictivos:


    ls -l /usr/share/nginx/html/private.html
    -rw------- 1 root root 18 jun  2 10:00 private.html
    

El primer paso es confirmar el estado del servicio:


    systemctl status nginx
    

Aparece activo y sin errores de arranque, lo que descarta un fallo de configuración global. El problema está en cómo responde a esa petición concreta. El siguiente paso es el log de errores en tiempo real, mientras desde otra terminal se reproduce el fallo:


    tail -f /var/log/nginx/error.log
    

El log muestra la causa de inmediato:


    2026/06/01 12:30:10 [error] open() "/usr/share/nginx/html/private.html" failed (13: Permission denied), client: ...
    

El proceso de Nginx —que en Debian corre habitualmente como www-data— no tiene permisos de lectura sobre el archivo. Los permisos 600 solo permiten acceso al propietario. La corrección es directa:


    chmod 644 /usr/share/nginx/html/private.html
    

Y la petición ya funciona. El flujo completo:

  1. systemctl status nginx descartó un fallo general del servicio.
  2. tail -f /var/log/nginx/error.log capturó el error exacto en el momento de producirse.
  3. El código 13: Permission denied señaló directamente la causa.
  4. Un chmod 644 lo resolvió.

Hay un detalle importante: systemctl status nginx indica que el servicio funciona, y eso podría hacernos pensar que todo va bien. Son los logs los que revelan que el problema ocurre a nivel de petición concreta, no de servicio. Ese matiz marca la diferencia entre buscar un fallo donde no está y encontrarlo rápido donde sí está.

Lo mismo aplica al resto de herramientas del artículo anterior. Si sospechas de puertos, revisa con ss. Si sospechas de recursos, mira memoria o disco. Los logs no sustituyen esas herramientas: las hacen mucho más útiles.

Cómo gestionar el crecimiento de los logs

Los logs son valiosos, pero también crecen. Y si crecen sin control, pueden ocupar cantidades importantes de espacio en disco, especialmente en servidores con mucho tráfico o servicios muy verbosos.

Aquí conviene adoptar una idea clara desde el principio: los logs no se borran a lo loco, se gestionan. Para eso existe logrotate en la mayoría de sistemas Linux.

Qué hace logrotate

logrotate aplica políticas automáticas sobre los archivos de log:

  • rota archivos cuando alcanzan cierto tamaño o cierta antigüedad;
  • comprime logs antiguos para ahorrar espacio;
  • conserva un número limitado de copias históricas;
  • elimina el histórico más viejo según las reglas definidas.

Puedes inspeccionar la configuración general y las reglas específicas por servicio así:


    ls /etc/logrotate.d/
    cat /etc/logrotate.d/nginx
    

Y antes de lanzar ninguna limpieza, puedes hacer una prueba sin efecto real:


    logrotate --debug /etc/logrotate.conf
    

La opción --debug te muestra qué haría sin ejecutarlo realmente. Es una práctica muy recomendable antes de tocar configuraciones en producción.

Gestionar el tamaño del journal

Si el sistema usa journald, puedes revisar cuánto espacio está ocupando:


    journalctl --disk-usage
    

Y, si hace falta reducirlo, puedes limpiar con criterio:


    journalctl --vacuum-time=7d
    journalctl --vacuum-size=500M
    

--vacuum-time=7d elimina entradas con más de siete días de antigüedad. --vacuum-size=500M recorta el almacenamiento total hasta ese límite.

Aquí conviene ser especialmente cuidadoso en entornos de producción. Vaciar registros sin criterio puede dejarte sin la información que necesitas para investigar un problema grave. Antes de limpiar, vale la pena entender por qué están creciendo: mucho tráfico, errores repetidos en bucle, verbosidad excesiva en la configuración de un servicio, o simplemente una política de retención sin ajustar.

La buena práctica no es “borrar porque molesta”, sino “ajustar porque entiendes el coste y el valor de esos datos”.

Buenas prácticas para trabajar con logs

No hace falta complicarlo demasiado. Estos hábitos marcan más diferencia que aprender veinte comandos nuevos:

  • No mires solo la última línea: busca contexto antes y después del error. La causa real suele estar unos mensajes más arriba.
  • Filtra por tiempo, servicio o nivel para reducir el ruido desde el principio.
  • Si investigas algo en vivo, usa tail -f o journalctl -f.
  • Si el problema ocurrió durante el arranque, empieza por journalctl -b.
  • Si el servicio está bajo systemd, usa journalctl -u antes de rastrear archivos a ciegas.
  • No borres logs sin entender primero por qué están creciendo.
  • Combina logs con herramientas como systemctl status, ps, ss, df o free para completar el diagnóstico.

Y hay una idea especialmente valiosa para quien viene de otros entornos: un error aislado rara vez cuenta toda la historia. Muchas veces la pista útil no está en la línea exacta del fallo, sino en lo que pasó justo antes. Leer logs no es buscar la línea roja; es reconstruir una secuencia.

Conclusión

Entender logs es uno de los pasos más importantes para dejar de ir a ciegas en Linux. Procesos, servicios y consumo de recursos te ayudan a detectar que algo no va bien; los registros del sistema te ayudan a reconstruir qué ocurrió, cuándo ocurrió y qué componente estuvo implicado.

Y lo mejor es que no necesitas dominar todo el ecosistema de observabilidad para empezar a trabajar bien. Con journalctl, algunos archivos clave dentro de /var/log, dmesg y unas nociones básicas de rotación, ya puedes moverte con mucha más seguridad tanto en un escritorio como en un servidor.

Cuando entiendes lo que ocurre en un sistema, empiezas de verdad a controlarlo.

Happy Hacking!!

¿Necesitas ayuda?

En BetaZetaDev transformamos ideas en soluciones digitales reales. Más de 10 años desarrollando aplicaciones móviles, web, automatizaciones y sistemas personalizados que impactan a miles de usuarios. Desde el concepto hasta el despliegue, creamos tecnología que resuelve problemas específicos de tu negocio con código limpio, arquitecturas escalables y experiencia probada.

Hablemos de tu proyecto

Artículos relacionados

Quizá te puedan interesar