In this lesson, you will learn how to unify your health checks and container logs to gain a comprehensive, real-time view of your application's operational health.
When running multi-container applications, knowing that a service is "running" isn't enough; you need to know if it is actually functioning. You have already learned how to implement healthcheck instructions and set restart_policy rules. Now, we integrate these into a monitoring strategy.
The Feedback Loop
Monitoring is effectively the feedback loop that connects your healthcheck definition to your operational awareness. When a container fails its health check, Docker updates its status to unhealthy. To monitor this, you don't just stare at the terminal; you leverage Docker’s event system to track state transitions.
You can observe your services in real-time by using the docker events command to watch for health_status changes, or by inspecting the container metadata:
# Watch for status changes in real-time
docker events --filter 'event=health_status'
# Inspect the last health check result for a specific container
docker inspect --format='{{json .State.Health}}' <container_id>
Unifying Logs and Status
While health checks provide a binary "pass/fail" status, logs provide the context for why a failure occurred. A robust orchestration strategy involves aggregating these logs. In a local Compose environment, you can tail logs across all services simultaneously to correlate health check failures with application errors:
# Follow logs from all services to spot errors leading up to a health failure
docker compose logs -f --tail 100
By combining the State (is it healthy?) with the Logs (why is it misbehaving?), you transform your infrastructure from a "black box" into a transparent environment. This visibility ensures that when your restart policies trigger, you have the historical data necessary to troubleshoot the underlying issue before the next auto-restart cycle begins.
Key Takeaway: Monitoring orchestrated health requires correlating binary health check status transitions with aggregate service logs to achieve total visibility into operational performance.