Skip to content

What's monitored, and what isn't

What Cleat reads

Every poll, from a manager:

  • Cluster — identity, raft quorum, whether there is a leader
  • Services — desired and running replicas, update state, image
  • Nodes — availability, reachability, role, engine version
  • Tasks — state, the node each is on, Status.Err when one is rejected

The task list is a bigger payload and polls on a slower cadence than the rest. Both speed up automatically while a change you made is converging.

What Cleat does not collect

Per-container CPU and memory are not collected. This is deliberate, and worth understanding before you go looking for the setting.

Swarm's manager API does not expose per-container resource usage. docker stats reports only the containers on the node you run it on, so collecting it for a cluster would mean an SSH session to every node, on every poll, forever — a monitoring tool with a footprint proportional to your fleet, competing with the workload it is watching.

That is a metrics system's job. If you have one, it is already doing this better.

What you get instead

Committed capacity. Cleat compares the CPU and memory reservations in your service specs against the capacity the nodes report. That ratio is what predicts scheduling failures — a task that cannot be placed fails because reservations do not fit, not because something is using a lot of CPU right now.

ClusterCapacityCommitted alerts on it, seeded at 90%.

For the same reason, Cleat tells you a task is stuck pending and shows you Status.Err, which is where Docker puts the actual reason: an unsatisfiable constraint, or an image that could not be pulled.