Introducción
Monitorizar contenedores Docker de forma sencilla significa saber si los servicios están disponibles, si permanecen estables, si se reinician inesperadamente, si sus comprobaciones de salud funcionan y si su consumo de recursos se mantiene dentro de un comportamiento razonable. No hace falta empezar instalando una plataforma compleja de observabilidad. En muchos entornos pequeños, unas pocas señales bien elegidas permiten detectar la mayoría de los problemas operativos antes de que se conviertan en una interrupción seria.
Docker facilita crear, detener y sustituir contenedores, pero esa facilidad también puede ocultar problemas. Un servicio puede reiniciarse varias veces y volver a quedar activo. Otro puede aparecer como Up aunque la aplicación interna no responda correctamente. Una base de datos puede seguir ejecutándose mientras acumula errores en sus logs. Un contenedor puede consumir cada vez más memoria sin llegar todavía a detenerse.
La monitorización útil no consiste en observar cientos de métricas. Consiste en responder de forma rápida a unas pocas preguntas: ¿está el contenedor ejecutándose?, ¿la aplicación que contiene funciona?, ¿se ha reiniciado?, ¿está generando errores?, ¿consume recursos de forma anormal?, ¿sigue siendo accesible desde donde debe estarlo?
Este artículo presenta un enfoque progresivo para aprender a supervisar Docker con herramientas que ya incorpora el propio entorno y con comprobaciones externas sencillas. El objetivo es construir una monitorización comprensible, proporcionada y mantenible, especialmente útil para quienes están aprendiendo administración de sistemas, Docker y operación técnica.
El diagnóstico detallado de cuellos de botella de CPU, memoria, disco y red merece un tratamiento separado. Aquí el foco es la supervisión operativa básica: detectar que algo no está bien y reunir señales suficientes para decidir cuándo investigar más.
Índice
- Qué significa monitorizar Docker
- Qué objetivos debe tener una monitorización sencilla
- Las cuatro capas que conviene observar
- Comprobar el estado de los contenedores
- Detectar reinicios inesperados
- Entender y utilizar healthchecks
- Revisar logs sin convertirlos en ruido
- Vigilar CPU, memoria, red y almacenamiento
- Usar docker stats correctamente
- Monitorizar proyectos Docker Compose
- Comprobar disponibilidad desde fuera del contenedor
- No olvidar el servidor anfitrión
- Controlar el crecimiento del almacenamiento
- Observar eventos de Docker
- Cuándo merece la pena crear alertas
- Por qué conviene guardar algo de histórico
- Definir frecuencias de revisión
- Diferenciar servicios críticos y auxiliares
- Procedimiento práctico de monitorización
- Cuándo pasar a herramientas más avanzadas
- Errores frecuentes
- Lista de comprobación
- Preguntas frecuentes
- Conclusión
Qué significa monitorizar Docker
Monitorizar Docker no equivale a mirar de vez en cuando una lista de contenedores. La monitorización consiste en observar señales relevantes de forma suficientemente regular como para detectar cambios, fallos o tendencias antes de que el problema sea evidente para el usuario.
En un entorno Docker pequeño, las señales más útiles suelen agruparse en cinco preguntas:
- ¿el contenedor está ejecutándose?
- ¿la aplicación contenida está realmente sana?
- ¿el servicio se ha reiniciado o cambiado de estado?
- ¿los logs muestran errores repetitivos?
- ¿el consumo de recursos se mantiene dentro de lo esperado?
Estas preguntas parecen simples, pero cubren una parte muy importante de la operación diaria. Muchos incidentes empiezan con una señal pequeña: un reinicio aislado, una caída de healthcheck, un crecimiento rápido de logs o una aplicación que responde cada vez más despacio.
La monitorización debe ayudar a ver esas señales sin exigir que una persona permanezca observando la consola continuamente.
Qué objetivos debe tener una monitorización sencilla
Antes de elegir herramientas conviene definir qué se quiere conseguir. Una monitorización útil para una plataforma pequeña debería permitir al menos:
- detectar contenedores detenidos;
- identificar reinicios no previstos;
- distinguir entre contenedor activo y aplicación saludable;
- consultar errores recientes;
- ver consumos anormales de recursos;
- detectar crecimiento peligroso del disco;
- confirmar que los servicios importantes responden;
- conservar suficiente información para investigar un incidente;
- generar alertas solo cuando exista una condición útil.
El objetivo no es acumular métricas porque Docker permita obtenerlas. Cada señal debería responder a una decisión concreta. Si una alerta no provoca ninguna acción, probablemente solo añade ruido.
Una buena monitorización reduce incertidumbre. Permite distinguir rápidamente entre un servicio caído, un problema de aplicación, un host saturado o una dependencia externa que ha dejado de responder.
Las cuatro capas que conviene observar
Una plataforma Docker puede analizarse mediante cuatro capas sencillas.
1. Host
Es el servidor que ejecuta Docker. Deben vigilarse aspectos básicos como CPU, memoria, espacio disponible, estado del almacenamiento y conectividad.
2. Motor Docker
Docker Engine debe estar activo y ser capaz de crear, detener y consultar contenedores. Un problema del motor afecta a toda la plataforma.
3. Contenedores
Aquí interesa el estado, reinicios, healthchecks, consumo y logs de cada servicio.
4. Aplicaciones
Es la capa más importante desde el punto de vista funcional. Una aplicación web, una API o una base de datos deben responder correctamente, no solo aparecer como procesos activos.
Separar estas capas evita conclusiones precipitadas. Por ejemplo, si una web no responde pero el contenedor está activo, el problema puede estar dentro de la aplicación. Si varios contenedores fallan simultáneamente, quizá el origen esté en el host o en un recurso compartido.
Comprobar el estado de los contenedores
El punto de partida más sencillo es revisar qué contenedores están activos.
docker ps
Para incluir también los detenidos:
docker ps -a
La columna STATUS permite detectar varios estados útiles:
Up: el contenedor está ejecutándose;Exited: el proceso principal terminó;Restarting: Docker intenta reiniciarlo repetidamente;Created: fue creado pero todavía no se ha iniciado;Paused: su ejecución está pausada;Up ... (healthy): el healthcheck informa de estado correcto;Up ... (unhealthy): el proceso sigue activo, pero la comprobación de salud está fallando.
Filtrar contenedores problemáticos
En lugar de revisar visualmente una lista larga, pueden aplicarse filtros:
docker ps -a --filter status=exited
docker ps -a --filter status=restarting
También puede personalizarse la salida:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"
Una salida compacta y previsible facilita revisiones rutinarias y scripts sencillos.
La organización de nombres y proyectos ayuda mucho a interpretar estas listas. Si los contenedores tienen nombres arbitrarios, la monitorización empieza ya con una dificultad innecesaria. Ese aspecto se relaciona con cómo organizar correctamente los proyectos Docker.
Detectar reinicios inesperados
Un contenedor puede parecer sano en el momento de consultarlo y haber fallado varias veces durante las horas anteriores. Por eso el número de reinicios es una señal importante.
Puede consultarse mediante:
docker inspect -f '{{.Name}} {{.RestartCount}}' nombre_contenedor
Un contador de reinicios creciente merece atención. No siempre significa un problema grave: puede haber existido un reinicio planificado del host o una actualización controlada. Lo importante es distinguir los reinicios esperados de los inesperados.
Las políticas de reinicio pueden ocultar fallos
Una política como:
restart: unless-stopped
es útil para recuperar automáticamente un servicio después de un reinicio del host o una salida puntual. Sin embargo, también puede hacer que un contenedor que falla vuelva a levantarse y parezca estable cuando alguien lo revisa más tarde.
Por eso una política de reinicio no sustituye a la monitorización. Automatizar la recuperación inmediata es compatible con investigar por qué se produjo el fallo.
Qué revisar cuando aumenta RestartCount
- logs del contenedor;
- código de salida anterior;
- eventos del motor Docker;
- consumo de memoria;
- dependencias que podían no estar disponibles;
- cambios recientes de imagen o configuración.
El objetivo de este artículo es detectar la señal. El análisis detallado de consumo y rendimiento se desarrolla de forma separada para evitar convertir la monitorización básica en una auditoría completa.
Entender y utilizar healthchecks
El estado Up solo indica que el proceso principal del contenedor continúa ejecutándose. No demuestra que la aplicación funcione correctamente.
Un healthcheck permite ejecutar una comprobación periódica dentro del contenedor y clasificarlo como saludable o no saludable.
Por ejemplo, una aplicación web podría comprobar si un endpoint interno responde:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 20s
El ejemplo debe adaptarse a cada imagen y aplicación. No todos los contenedores incluyen curl, ni todos los servicios disponen de un endpoint de salud.
Qué debería comprobar un healthcheck
Una comprobación útil debe ser:
- rápida;
- repetible;
- barata en recursos;
- relevante para el funcionamiento real;
- lo bastante estable como para no generar falsos fallos.
No hacer healthchecks excesivamente complejos
Si la comprobación intenta recorrer toda la aplicación, llamar a cinco sistemas externos y procesar datos reales, puede generar más problemas de los que resuelve. El healthcheck debe detectar si el servicio básico está operativo.
Consultar el detalle
Docker permite inspeccionar el estado de salud:
docker inspect --format='{{json .State.Health}}' nombre_contenedor
Esto ayuda a ver los últimos intentos y mensajes devueltos por la comprobación.
Healthy no significa perfecto
Un servicio puede superar su healthcheck y seguir teniendo un problema funcional que la prueba no cubre. Por eso los healthchecks deben combinarse con comprobaciones externas y revisión de logs.
Revisar logs sin convertirlos en ruido
Los logs son una de las fuentes más valiosas para entender qué ocurre dentro de un contenedor. También pueden convertirse en una cantidad inmanejable de texto si se consultan sin criterio.
Para revisar las últimas líneas:
docker logs --tail 100 nombre_contenedor
Para seguir nuevos mensajes:
docker logs -f nombre_contenedor
Para limitar la consulta a un periodo reciente:
docker logs --since 30m nombre_contenedor
Qué señales buscar
- errores repetidos;
- excepciones;
- timeouts;
- fallos de conexión;
- problemas de autenticación;
- mensajes de falta de espacio;
- errores de permisos;
- reinicios o cierres inesperados;
- migraciones que fallan;
- advertencias que aumentan con el tiempo.
Una advertencia aislada no siempre es un incidente
El contexto importa. Algunos servicios generan mensajes de advertencia durante el arranque que no vuelven a aparecer. Lo preocupante suele ser la repetición, el cambio respecto al comportamiento habitual o la coincidencia con un fallo funcional.
Evitar logs infinitos
La monitorización también debe vigilar el propio crecimiento de los logs. Si Docker utiliza el driver de logging predeterminado sin límites adecuados, los archivos pueden crecer durante meses y ocupar una parte significativa del disco.
Un ejemplo de configuración de rotación puede definir tamaño y número de archivos, siempre adaptándolo al entorno:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
La retención debe equilibrar dos necesidades: conservar información suficiente para investigar y evitar que el sistema de logs se convierta en el problema.
Vigilar CPU, memoria, red y almacenamiento
La monitorización básica de recursos no busca explicar todavía por qué una aplicación consume demasiado. Busca detectar que el comportamiento ha cambiado o que un límite se aproxima.
CPU
Un consumo alto durante unos segundos puede ser normal. Una utilización elevada durante largos periodos, especialmente si antes no ocurría, merece revisión.
Memoria
La memoria es especialmente importante porque un contenedor que supera el recurso disponible puede terminar detenido por el sistema. También puede existir crecimiento gradual por cachés, cargas crecientes o problemas de la aplicación.
Red
El tráfico permite identificar cambios de actividad. Un servicio que normalmente mueve poco volumen y de repente transmite grandes cantidades puede estar procesando una tarea legítima o mostrar un comportamiento inesperado.
Almacenamiento
Docker utiliza espacio para imágenes, capas, contenedores, volúmenes y logs. El disco debe vigilarse tanto desde el host como desde la perspectiva de los datos persistentes.
La gestión de volúmenes y persistencia se desarrolla en cómo gestionar correctamente los volúmenes Docker.
Usar docker stats correctamente
Docker incluye una herramienta inmediata para observar consumo de recursos:
docker stats
La salida muestra, entre otros datos:
- uso de CPU;
- memoria utilizada;
- porcentaje de memoria;
- tráfico de red;
- entrada y salida de bloques;
- número de procesos.
Para obtener una fotografía puntual en lugar de una pantalla actualizada continuamente:
docker stats --no-stream
Comparar con el comportamiento habitual
La cifra aislada tiene menos valor que la comparación. Un contenedor que utiliza 600 MB puede estar perfectamente dimensionado, mientras que otro que pasa de 100 MB a 600 MB sin explicación puede requerir investigación.
No confundir monitorización con diagnóstico
docker stats permite descubrir que existe una anomalía. Determinar si se debe a una consulta pesada, un leak de memoria, almacenamiento lento o competencia entre procesos exige un análisis más profundo.
Por eso resulta útil separar ambos niveles: primero detectar, después diagnosticar.
Monitorizar proyectos Docker Compose
Cuando varios contenedores forman una misma aplicación, tiene sentido observarlos como un proyecto.
Dentro del directorio correspondiente:
docker compose ps
Para revisar logs del conjunto:
docker compose logs --tail=100
O seguir un servicio concreto:
docker compose logs -f nombre_servicio
La ventaja del contexto de proyecto
Supongamos que una aplicación está formada por:
- servidor web;
- base de datos;
- caché;
- worker;
- tarea programada.
Mirar únicamente el contenedor web puede ocultar que el verdadero problema se encuentra en el worker o en la base de datos. Docker Compose ayuda a mantener juntos los componentes relacionados.
Servicios que terminan correctamente
No todos los contenedores deben permanecer activos. Algunos pueden ejecutar una tarea y terminar. En esos casos un estado Exited (0) puede ser correcto.
La monitorización debe conocer la función del servicio. Aplicar la regla “todo contenedor detenido es un fallo” genera falsas alarmas.
Comprobar disponibilidad desde fuera del contenedor
Una de las comprobaciones más importantes consiste en verificar el servicio desde el mismo punto de vista que tendría un usuario o sistema consumidor.
Una aplicación web puede comprobarse con:
curl -I https://ejemplo.com
Una API puede disponer de un endpoint específico:
curl -f https://ejemplo.com/health
Por qué esta comprobación aporta información distinta
Desde fuera del contenedor se ponen a prueba más capas:
- contenedor;
- puerto;
- red Docker;
- proxy inverso;
- firewall;
- DNS;
- TLS;
- aplicación.
Por eso un servicio puede superar un healthcheck interno y, sin embargo, no estar disponible para sus usuarios.
Monitorización externa e interna se complementan
La comprobación interna ayuda a saber si la aplicación está viva. La externa confirma que el camino completo funciona. Utilizar ambas reduce el tiempo necesario para localizar la capa donde se encuentra el problema.
No olvidar el servidor anfitrión
Docker no elimina la necesidad de monitorizar Linux. Todos los contenedores dependen del mismo kernel, almacenamiento, memoria y red del host.
Una revisión básica debería incluir:
uptime
free -h
df -h
systemctl status docker
También puede ser útil comprobar carga general, procesos y mensajes del sistema cuando aparecen anomalías.
Un problema común puede afectar a muchos contenedores
Si varios servicios fallan simultáneamente, conviene mirar primero componentes compartidos:
- disco lleno;
- memoria agotada;
- Docker Engine;
- red del host;
- proxy inverso común;
- almacenamiento externo;
- DNS.
El enfoque general de supervisión del sistema puede ampliarse en cómo monitorizar un servidor Linux sin complicar la infraestructura. Este artículo mantiene el foco en las señales propias de Docker.
Controlar el crecimiento del almacenamiento
El disco es uno de los recursos que más fácilmente causa incidentes silenciosos en Docker. Imágenes antiguas, capas, cachés de construcción, logs y volúmenes pueden acumularse durante meses.
Docker permite obtener un resumen con:
docker system df
Para más detalle:
docker system df -v
No limpiar automáticamente sin entender el contenido
Detectar crecimiento no significa ejecutar inmediatamente comandos de limpieza. Antes de eliminar recursos hay que saber si siguen siendo necesarios.
Especialmente delicados son los volúmenes. Un volumen sin contenedor activo puede contener información que todavía debe conservarse.
Vigilar dos niveles
Conviene observar:
- espacio global del sistema de archivos;
- distribución del uso dentro de Docker.
Si el sistema pasa del 60 % al 85 % de ocupación en pocos días, la tendencia importa más que la fotografía actual.
Observar eventos de Docker
Docker genera eventos cuando ocurren cambios en contenedores, imágenes, redes y volúmenes.
docker events
Esta herramienta resulta especialmente útil durante una incidencia porque permite observar:
- arranques;
- paradas;
- reinicios;
- muertes de procesos;
- creación o eliminación de recursos;
- healthchecks que cambian de estado.
También pueden utilizarse filtros. Por ejemplo:
docker events --filter type=container
Eventos no equivale a histórico permanente
docker events es muy útil para observar actividad, pero una estrategia de monitorización más madura puede necesitar almacenar determinados eventos o convertirlos en alertas.
La idea importante es entender que Docker ya expone señales de cambio que pueden aprovecharse antes de instalar plataformas adicionales.
Cuándo merece la pena crear alertas
Una alerta tiene sentido cuando existe una condición suficientemente importante como para justificar una intervención.
Algunos ejemplos razonables son:
- servicio crítico no disponible;
- contenedor en reinicio continuo;
- healthcheck fallando durante varios intentos;
- disco próximo a un umbral peligroso;
- memoria del host persistentemente agotada;
- copia de seguridad que deja de ejecutarse;
- certificado próximo a caducar;
- servicio externo esencial que deja de responder.
Evitar alertas por cualquier fluctuación
Una CPU al 90 % durante diez segundos no necesita necesariamente una alerta. Tampoco un healthcheck fallido una sola vez si el siguiente funciona.
Las alertas suelen mejorar cuando incorporan:
- persistencia de la condición;
- varios intentos;
- umbrales razonables;
- criticidad del servicio;
- horarios o contextos cuando sean relevantes.
Una alerta debe indicar qué revisar
“Docker tiene un problema” es poco útil. “El contenedor base-datos ha reiniciado 4 veces en 10 minutos” aporta una señal concreta y accionable.
Por qué conviene guardar algo de histórico
La observación puntual permite saber qué ocurre ahora. El histórico permite responder a otra pregunta: ¿esto es normal?
Guardar datos durante un periodo razonable permite detectar:
- crecimiento de memoria;
- aumento gradual de CPU;
- disco que se llena cada semana;
- reinicios nocturnos;
- picos coincidentes con tareas programadas;
- degradación progresiva de tiempos de respuesta.
No es necesario conservar años de métricas para una plataforma pequeña. Un periodo suficiente para comparar días y semanas puede aportar mucho valor.
La tendencia supera a la cifra aislada
Si un servicio usa habitualmente el 70 % de una CPU durante una tarea nocturna, ese dato puede ser normal. Si antes utilizaba el 20 % y durante las últimas semanas ha subido progresivamente, la tendencia merece análisis.
Definir frecuencias de revisión
No todas las señales necesitan observarse con la misma frecuencia.
| Señal | Frecuencia orientativa |
|---|---|
| Disponibilidad de servicio crítico | Frecuente y automatizada |
| Healthcheck | Frecuente, gestionado por el propio servicio |
| Reinicios | Alertar cuando aparezcan o revisar diariamente |
| Logs de error | Ante alertas y revisión periódica |
| CPU y memoria | Continua si existe herramienta, puntual en entornos muy simples |
| Espacio en disco | Diario o mediante umbrales |
| Crecimiento de volúmenes | Semanal o según criticidad |
| Revisión de tendencias | Semanal o mensual |
Estas frecuencias no son reglas universales. Un servicio crítico puede requerir comprobaciones cada minuto, mientras que una herramienta interna utilizada una vez por semana puede tolerar una vigilancia mucho más sencilla.
Diferenciar servicios críticos y auxiliares
Uno de los errores más frecuentes es monitorizar todos los contenedores de la misma forma.
Conviene clasificarlos, por ejemplo:
Críticos
Servicios cuya caída interrumpe una función importante. Pueden requerir comprobación externa, alertas inmediatas e histórico.
Importantes
Servicios necesarios para la operación, pero cuya caída durante un periodo corto es tolerable. Pueden revisarse con menor frecuencia.
Auxiliares
Herramientas de pruebas, tareas ocasionales o componentes no esenciales. Una revisión periódica puede ser suficiente.
Trabajos programados
Contenedores que deben ejecutarse y terminar correctamente. En ellos interesa monitorizar el resultado de la ejecución, no que permanezcan activos.
Esta clasificación reduce ruido y ayuda a concentrar esfuerzo donde el impacto es mayor.
Procedimiento práctico de monitorización
Un procedimiento sencillo puede estructurarse en varias capas.
Paso 1: inventariar los contenedores importantes
Antes de monitorizar hay que saber qué existe y qué función cumple. Registra al menos nombre, proyecto, criticidad y forma de comprobar su funcionamiento.
El inventario general de servicios y dependencias es también una pieza importante de cómo documentar una infraestructura basada en Docker.
Paso 2: revisar estado
docker ps -a
Busca contenedores detenidos, reiniciándose o con healthcheck incorrecto.
Paso 3: revisar reinicios
Comprueba si los servicios críticos han aumentado su contador de reinicios desde la última revisión.
Paso 4: consultar recursos
docker stats --no-stream
Busca cambios llamativos respecto al comportamiento normal.
Paso 5: revisar logs cuando exista una señal
docker logs --since 1h --tail 200 nombre_contenedor
No es necesario leer todos los logs de todos los servicios cada día. Prioriza los contenedores que muestran cambios.
Paso 6: comprobar disponibilidad real
Para servicios importantes, realiza una prueba desde fuera del contenedor.
Paso 7: revisar host y disco
df -h
free -h
docker system df
Paso 8: registrar anomalías
Anota fecha, servicio, síntoma, acción realizada y resultado. Esto permite reconocer patrones y evita investigar desde cero cada vez.
Paso 9: automatizar solo lo repetitivo
Cuando el procedimiento manual esté claro, pueden automatizarse comprobaciones y avisos. Primero conviene entender qué significa cada condición.
Cuándo pasar a herramientas más avanzadas
Las herramientas básicas de Docker son suficientes para aprender y para operar entornos pequeños, pero tienen límites. A medida que crece la plataforma puede resultar útil incorporar una solución que centralice métricas, logs, paneles y alertas.
La necesidad suele aparecer cuando existen:
- muchos contenedores;
- varios hosts;
- servicios críticos que requieren alertas automáticas;
- necesidad de conservar históricos;
- correlación entre métricas;
- equipos que necesitan un panel común;
- investigaciones frecuentes de rendimiento;
- requisitos de auditoría o trazabilidad.
No empezar por la herramienta
Instalar una plataforma de monitorización sin haber decidido qué señales importan produce paneles llenos de datos pero poca información útil.
El orden más sano es:
- identificar servicios importantes;
- definir qué significa que funcionen;
- elegir señales relevantes;
- establecer umbrales;
- después automatizar la recogida y visualización.
Crecer sin sobreingeniería
La infraestructura puede evolucionar por etapas. El artículo cómo planificar el crecimiento de una infraestructura Docker desarrolla cómo aumentar capacidad y complejidad sin introducir herramientas avanzadas antes de necesitarlas.
Errores frecuentes
Mirar solo docker ps
Un contenedor activo puede contener una aplicación averiada. Combina estado con healthchecks y pruebas funcionales.
Confiar en las políticas de reinicio
Que Docker consiga levantar de nuevo un servicio no explica por qué cayó ni cuántas veces lo ha hecho.
Configurar alertas para todo
Demasiadas alertas terminan siendo ignoradas. Prioriza condiciones persistentes y servicios relevantes.
Tratar cualquier pico de CPU como un incidente
Las aplicaciones pueden tener cargas normales. Observa duración, tendencia y contexto.
No limitar el crecimiento de logs
Los propios logs pueden llenar el almacenamiento del host.
Limpiar recursos al detectar poco espacio
La monitorización debe advertir del problema. La eliminación de imágenes o volúmenes necesita una decisión separada y consciente.
Olvidar el host
Todos los contenedores dependen del mismo servidor. Un disco lleno o falta de memoria puede afectar a varios servicios simultáneamente.
No guardar ningún histórico
Sin histórico es difícil distinguir una anomalía de un comportamiento habitual.
Guardar demasiado histórico sin necesidad
La monitorización también consume almacenamiento. Retén lo que ayude a operar y diagnosticar.
Confundir monitorización con diagnóstico de rendimiento
Detectar que un contenedor consume mucha memoria es monitorización. Explicar exactamente por qué ocurre requiere un análisis posterior.
No probar las alertas
Una alerta configurada pero nunca probada puede fallar precisamente cuando se necesita.
Monitorizar componentes y no servicios
El objetivo final es saber si la función que presta la aplicación está disponible. Las métricas técnicas son medios para responder a esa pregunta.
Lista de comprobación
| Área | Comprobación |
|---|---|
| Inventario | Se conocen los contenedores importantes y su función |
| Estado | Los servicios esperados están activos |
| Reinicios | No existen reinicios inesperados crecientes |
| Healthchecks | Los servicios que lo necesitan tienen una comprobación útil |
| Logs | No aparecen errores repetidos sin investigar |
| Rotación | Los logs no pueden crecer indefinidamente |
| CPU | No hay consumos persistentemente anormales |
| Memoria | No existe crecimiento inesperado o agotamiento |
| Disco | Existe margen suficiente y se observa la tendencia |
| Docker | Se conoce cuánto ocupan imágenes, contenedores y volúmenes |
| Disponibilidad | Los servicios críticos se prueban desde fuera |
| Host | Docker Engine, memoria y almacenamiento están controlados |
| Alertas | Solo existen alertas accionables |
| Histórico | Se conserva información suficiente para comparar tendencias |
| Criticidad | No todos los contenedores se monitorizan igual |
| Procedimiento | Existe una rutina clara de revisión |
| Documentación | Las anomalías relevantes quedan registradas |
Preguntas frecuentes
¿Necesito instalar software adicional para monitorizar Docker?
No necesariamente. Docker ya ofrece comandos para consultar estado, logs, eventos y consumo de recursos. Para una plataforma pequeña o para aprender, estas herramientas permiten cubrir muchas necesidades básicas antes de incorporar una solución de monitorización dedicada.
¿Un contenedor que aparece como Up está funcionando correctamente?
No siempre. Up indica que su proceso principal continúa ejecutándose. La aplicación interna puede estar bloqueada, no alcanzar su base de datos o responder incorrectamente. Los healthchecks y las comprobaciones externas aportan una visión más completa.
¿Para qué sirve un healthcheck?
Permite ejecutar periódicamente una prueba dentro del contenedor y clasificarlo como saludable o no saludable. Es útil para detectar aplicaciones que siguen ejecutándose como proceso pero han dejado de prestar correctamente su función básica.
¿docker stats sustituye a una plataforma de monitorización?
No. Es una herramienta excelente para observar el consumo actual de los contenedores, pero no conserva por sí sola históricos amplios, paneles ni alertas. Puede ser suficiente para revisiones puntuales y aprendizaje.
¿Es malo que un contenedor se reinicie?
No necesariamente. Puede reiniciarse durante una actualización o tras un reinicio planificado del host. Lo importante es detectar reinicios inesperados, repetitivos o que aumenten sin una causa conocida.
¿Debo revisar todos los logs cada día?
No. En una plataforma pequeña suele ser más eficaz revisar primero estado, reinicios, healthchecks y alertas, y consultar logs cuando exista una señal concreta. También conviene establecer rotación para evitar crecimiento indefinido.
¿Qué recurso debo vigilar primero?
No existe uno único. Disponibilidad, memoria y espacio en disco suelen ser especialmente importantes, pero la prioridad depende del servicio. Lo útil es conocer el comportamiento normal y detectar cambios.
¿Cómo puedo saber si Docker está llenando el disco?
docker system df muestra un resumen del espacio utilizado por imágenes, contenedores, volúmenes y caché de construcción. Debe combinarse con herramientas del host como df -h para conocer la ocupación global.
¿Cuándo necesito alertas automáticas?
Cuando un fallo relevante debe detectarse sin depender de que alguien consulte manualmente el servidor. Las alertas son especialmente útiles para servicios críticos, reinicios continuos, falta de espacio y comprobaciones de disponibilidad.
¿Monitorizar Docker es lo mismo que analizar rendimiento?
No. La monitorización identifica estados y anomalías: un servicio cae, aumenta su memoria o se llena el disco. El análisis de rendimiento investiga las causas de esas anomalías y determina dónde está el cuello de botella.
¿Tengo que monitorizar también Linux?
Sí. Docker depende del host. Memoria, CPU, disco, red y estado del motor Docker pueden afectar simultáneamente a muchos contenedores, por lo que una supervisión completa debe incluir señales básicas del servidor anfitrión.
¿Qué es mejor: muchas métricas o pocas señales bien elegidas?
Para empezar, pocas señales bien elegidas. Disponibilidad, estado, reinicios, salud, errores, memoria y disco suelen aportar más valor operativo que cientos de métricas que nadie revisa ni sabe interpretar.
Conclusión
Monitorizar contenedores Docker de forma sencilla no requiere empezar con una infraestructura compleja. Docker ya ofrece información suficiente para construir una primera capa de supervisión basada en estado, reinicios, healthchecks, logs, eventos y consumo de recursos.
La clave consiste en distinguir varias capas. El host puede estar sano mientras una aplicación falla; un contenedor puede estar activo mientras su servicio interno no responde; una aplicación puede funcionar hoy mientras el disco se aproxima lentamente a su límite.
La monitorización útil combina tres ideas: comprobar que el servicio existe, comprobar que funciona y observar si su comportamiento está cambiando.
Comandos como docker ps, docker inspect, docker logs, docker stats, docker system df y docker events permiten aprender esas señales directamente. Los healthchecks añaden una comprobación interna y las pruebas externas confirman que el servicio es accesible desde el punto de vista real del usuario.
A medida que crece la plataforma, puede incorporarse histórico, paneles y alertas automáticas. Pero esas herramientas aportan valor solo cuando ya se sabe qué observar y qué acción debe provocar cada alerta.
Una monitorización sencilla, constante y comprensible suele ser más útil que una plataforma sofisticada que nadie mantiene. El objetivo final no es coleccionar métricas, sino detectar problemas con suficiente antelación para actuar antes de que una anomalía pequeña se convierta en una interrupción.
