Skip to content
🐋Cetacean

Recommendations

Cetacean watches your cluster and lists what looks wrong at /recommendations in the dashboard—services with no health check, replicas that keep dying, containers sized far above what they use. Findings refresh on their own; you never trigger a scan.

It’s on by default. Turn it off with server.recommendations.

What gets flagged

Each finding names a service, a node or the cluster, and carries a severity of info, warning or critical.

FindingMeaning
no-healthcheck
The service defines no health check, so Swarm can’t tell a hung container from a working one
no-restart-policy
Restart policy is none, so a failed task is never replaced
single-replica
One replica, so any node problem is an outage
manager-has-workloads
A manager node is active, so Swarm may schedule ordinary tasks on it alongside cluster management. Not raised unless a ready, active worker could take those tasks
uneven-distribution
The busiest node runs more than three times the tasks of the quietest
flaky-service
More than 5 involuntary task failures within the lookback window
node-disk-full
Node disk above 90%
node-memory-pressure
Node memory above 90%
over-provisioned
Reserved far more CPU or memory than it uses
approaching-limit
Usage climbing towards its limit
at-limit
Usage at its limit, so it’s being throttled or is at risk of being killed
no-limits, no-reservations
No limit or reservation set, so Swarm can’t schedule it well

Act on a finding

Findings that have an obvious fix get an Apply suggested value button:

over-provisioned
Raises or lowers the reservation to match real usage
approaching-limit, at-limit
Adjusts the limit
single-replica
Scales the service to 2 replicas

All three also need write permission on the service—the button only appears for callers who have it. Everything else is reported for you to act on yourself.

Without Prometheus

Cetacean still flags configuration and topology problems, and still catches flaky services, using Docker state alone. What disappears is everything measured: the whole sizing group, plus node-disk-full and node-memory-pressure. Nothing errors—you simply see fewer findings.

Sizing needs cAdvisor and the node checks need node-exporter. See Monitoring for the setup.

Tune the sizing thresholds

Sizing is the only group you can tune, through sizing.thresholds.over_provisioned, sizing.thresholds.approaching_limit and sizing.thresholds.at_limit—the fractions of the reservation or limit at which each finding appears. sizing.headroom_multiplier sets how much room the suggested value leaves above observed usage, and sizing.thresholds.lookback how far back Cetacean looks, which is also the window flaky-service counts failures in.

API

GET /recommendations returns the current findings and a severity summary; the MCP get_recommendations tool serves the same data. See the API reference for the response schema.