Docker and Compose

What to monitor in a Docker Compose stack

Build a small monitoring set around user outcomes, container lifecycle, saturation and disk instead of collecting every metric.

By AppLaunch Editorial · Reviewed 2026-08-25

Direct answer

Start with availability and latency at the real service boundary, then container restarts, health state, CPU/memory saturation, disk capacity and backup success. An alert needs an owner and action; a dashboard without response thresholds is decoration.

What this means in plain English

Start monitoring with what a user needs: can the service answer correctly, and how long does it take? Then add the information that explains failures, such as container restarts, health state, memory, CPU, disk space and database availability.

Every alert needs an owner and an action. A warning that nobody understands or responds to becomes background noise. Brief harmless spikes may belong on a graph, while continued user failures or a rapidly filling disk should alert somebody.

Which alerts justify waking someone?

User outcomeSuccess rate and latency
RuntimeHealth, restarts and resource pressure
DurabilityDisk, database and backup/restore status

A simple example

An external check sees that checkout fails even though every container is still running. The dashboard shows the database is healthy but the payment API calls are timing out. User-outcome monitoring found a problem that a simple “container up” check missed.

What to do, step by step

  1. 1. Define one service-level symptom per public endpoint.

    Start here before buying anything or changing several settings at once. It gives you a clear starting point based on user outcome: success rate and latency. Write the result down so you can compare it later.

  2. 2. Add resource and lifecycle context.

    Use the same files, versions and settings that the real project will use. A quick test with an empty or different setup can look successful while completely missing the problem you are trying to solve.

  3. 3. Set actionable thresholds with time windows.

    Try the busiest realistic situation, not the easiest one. Include the people, data, traffic or background work you genuinely expect, then watch for slowdowns and errors rather than relying on a single headline number.

  4. 4. Test alerts by forcing safe failures.

    Finish by checking the result against durability: disk, database and backup/restore status. Keep the old setting or release available until you know the change works and can be reversed safely.

One more useful tip

Create a safe failure on purpose. Stop a test service, fill a test threshold or return an error and confirm the right person receives a useful alert with enough context to act.

Common mistakes and how to avoid them

Alerting on every brief CPU spike.

This gives a misleading or unsafe result because it leaves out user outcome. A better approach is to define one service-level symptom per public endpoint, then check the result before making the change permanent.

Monitoring containers but not the public endpoint.

This gives a misleading or unsafe result because it leaves out runtime. A better approach is to add resource and lifecycle context, then check the result before making the change permanent.

Ignoring backup job failure.

This gives a misleading or unsafe result because it leaves out durability. A better approach is to set actionable thresholds with time windows, then check the result before making the change permanent.

Words explained

container
A packaged, isolated way to run an application with the files and software it needs.
Compose
Docker Compose is a file-based way to describe several containers, their settings, storage and networks as one application.

Quick checklist

  • Define one service-level symptom per public endpoint.
  • Add resource and lifecycle context.
  • Set actionable thresholds with time windows.
  • Test alerts by forcing safe failures.

Common questions

What is the simple answer?

Start with availability and latency at the real service boundary, then container restarts, health state, CPU/memory saturation, disk capacity and backup success. An alert needs an owner and action; a dashboard without response thresholds is decoration.

What should I check first?

Start with user outcome: success rate and latency. That is usually more useful than choosing from a marketing label or copying somebody else’s setting.

How can I make the change safely?

Define one service-level symptom per public endpoint. Then change one thing at a time, keep a backup or old version, and use the same real-world test after each change.

What is the easiest mistake to avoid?

Alerting on every brief CPU spike. Avoiding that one mistake makes the rest of the comparison much more trustworthy.

Primary sources

  1. Use Docker Compose in production — Docker