You run other people’s servers. Each stack is a little different, each client asks the same question — is it up? — and the honest answer today comes from opening five dashboards, or from a client email arriving before your alerting did.
This page is about closing that gap with one lightweight container per fleet rather than one monitoring stack per client.
What running client infrastructure actually requires
Monitoring your own homelab and monitoring infrastructure you are paid to keep alive are different jobs. The second one adds four requirements the first one never has:
- A licence that permits it. Personal is for one person on their own infrastructure, freelancers included. It does not cover third-party infrastructure or reselling monitoring as a service. Pro does, and grants the right to commercial use.
- Fleet reach. One Maintenant, many machines. Pro removes the host limit entirely.
- Alerts that reach a human. Email routing from Personal, Slack and Teams on Pro, escalation policies when the first person does not acknowledge, and maintenance windows so a planned migration does not page anyone at 02:00.
- Something to show the client. A public status page with your branding, incident history, and subscriber notifications.
How it deploys across a fleet
One server runs Maintenant. Every other machine runs a lightweight agent, enrolled with a single token, streaming its Docker, Swarm and Kubernetes state back to the central instance. There is no per-client installation to design, no exporter stack to operate, and nothing to configure per container: Maintenant reads the Docker socket read-only and discovers what is running.
Adding a client is enrolling their servers. Removing one is revoking a token.
services:
maintenant:
image: ghcr.io/kolapsis/maintenant:latest
ports:
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc:/host/proc:ro
- maintenant-data:/data
environment:
MAINTENANT_ADDR: "0.0.0.0:8080"
MAINTENANT_DB: "/data/maintenant.db"
restart: unless-stopped
volumes:
maintenant-data:
Mount the socket read-only. Maintenant observes; it never writes to the stack it watches. It ships no authentication of its own by design — put it behind the reverse proxy and auth middleware you already run, the same way you would with Dozzle or Prometheus.
What one instance watches
Across every enrolled host, in one place:
- container state, health checks, restart loops and logs;
- HTTP and TCP endpoints, with configurable thresholds;
- SSL/TLS certificate expiry, auto-detected from the endpoints you already monitor;
- cron and background job deadlines, through heartbeat URLs;
- per-container CPU, memory, network and disk metrics;
- image updates, by comparing OCI registry digests;
- network security findings — ports bound to
0.0.0.0, host-network and privileged containers, risky Kubernetes NodePorts — with CVE enrichment and a risk score from Personal upward.
The last one is the item clients rarely ask for and always want to see in a report.
The economics
Monitoring is one of the easiest lines to add to a maintenance contract, because the client already believes they are paying for uptime.
Bill monitoring and supervision at 49 €/month to ten clients and that is 490 € of recurring revenue against a software cost of 29 €/month — 290 € a year — that does not move when the eleventh client arrives. There is no per-host pricing to model, and no metered usage to reconcile at the end of the month.
What this is not
Being clear about the edges saves everyone a trial:
- Not multi-tenant. There is no per-client login separating one customer’s view from another’s. What clients see is the status page you publish for them; what you see is the whole fleet.
- Not a long-term metrics store. History runs to 30 days on Pro. If you need years of high-resolution data, export through the REST API into storage you own, or keep Prometheus for that one job.
- Not highly available. One container, one host. If that host dies, monitoring dies with it.
- Not an APM. No distributed tracing, no code-level profiling. It watches infrastructure, not application internals.
Where to start
Install Community on one machine and point it at a stack you already run. It costs nothing and takes about 30 seconds. When you enroll the second server, or the first server that belongs to a client, that is the moment Pro starts paying for itself.