Skip to content

Monitoring & metrics

MajNet’s monitoring is built in and agentless. The reconciler reads each node’s metrics over the same Docker API (mTLS over WireGuard) it already uses to deploy — there is no Prometheus, no node exporter, no sidecar to run. What the platform can deploy, it can already measure.

  • Per node / host: CPU %, memory used/total, image-disk usage, container counts, Docker/OS/kernel versions.
  • Per container: CPU % and memory used vs its limit — so a container nudging its cap is visible at a glance.

Samples are recorded every minute and kept with tiered resolution, so charts go back a month without the database growing without bound:

Age Resolution
last 24h full (per-minute)
24h–7d every 30 min
7d–30d hourly
older daily

On the Nodes page a range selector (Live · 1h · 6h · 24h · 7d · 30d) drives the CPU and memory charts, and each container gets its own CPU sparkline. “Live” keeps building a rolling window in the browser; the ranges read the persisted history.

The home page is an at-a-glance overview: fleet health (per-node CPU/memory sparklines), deployments in flight, control-plane status, recent activity, an alerts summary, and totals. It’s customizable — an edit mode lets you drag to reorder, resize, and hide widgets, and your layout is saved per user.

The reconciler checks node/host metrics and site health every minute and posts up/down and threshold transitions (CPU / memory over a configurable %) to a Discord webhook. Configure the webhook and thresholds under Settings → Alerts; the overview’s Alerts widget shows, live, how many nodes are currently over threshold.

All of this reads the reconciler’s Docker connection only — metrics never leave the control plane, and no node runs anything extra to be observed.