Skip to content

Metrics

Metrics gives you live cluster resource usage, short-term trends, and pod network bandwidth — without standing up a separate observability stack. If you do run Prometheus or Grafana, the same tab surfaces them side by side.

The tab has three sub-tabs:

Sub-tab Source When it appears
Built-in (default) metrics-server + KubeManta's own sampler + optional kubelet cadvisor scrape Always
Prometheus Your Prometheus, via the Observability connector Always (shows setup guidance until configured)
Grafana Your Grafana dashboards, embedded Only when a Grafana source is configured

Built-in sub-tab

Everything here works with no Prometheus and no configuration beyond metrics-server:

  • Cluster Health header — a green "all pods healthy" state, or a breakdown of what's not
  • Node Utilization — per-node CPU/memory rings (live metrics-server snapshots)
  • Resource Trends — CPU (cores) and memory line charts over a 1h / 6h / 24h / 7d window. A background sampler reads pods.metrics.k8s.io every 60 seconds and retains one cluster rollup, per-namespace rollups, and the top 20 pods by CPU, pruned after 7 days (agent env: METRICS_SAMPLE_INTERVAL_SECS, METRICS_SAMPLE_MAX_PODS, METRICS_RETENTION_DAYS). Charts follow the panel's namespace scope and show a "collecting…" state until at least two samples exist.
  • Network Bandwidth — pod RX/TX rate trends from the kubelet cadvisor scrape (below)
  • API Requests — top paths hit against the KubeManta agent, with a time-series chart

Bandwidth without Prometheus (opt-in)

metrics-server exposes no network metrics — the kubelet's embedded cadvisor is the only in-cluster source of pod network bytes. When you opt in with the Helm value:

--set metrics.kubeletScrape.enabled=true

the chart grants the agent's read-only reader ClusterRole one extra permission — get on nodes/proxy — and each sampler tick also scrapes every node's kubelet cadvisor endpoint through the API-server proxy (/api/v1/nodes/<node>/proxy/metrics/cadvisor) using the agent's own ServiceAccount. Zero extra components, zero egress.

Raw byte counters are stored; rates are derived at read time with counter-reset handling (a pod or kubelet restart never produces a bogus spike) and sampler-gap handling (agent downtime never dilutes a rate).

Off by default — and what you lose without it

metrics.kubeletScrape.enabled defaults to false because nodes/proxy is a real permission (it reaches kubelet handlers), so it is only granted on explicit opt-in. Without it, CPU/memory metrics and trends still work — only the bandwidth charts stay empty, with an in-product hint explaining how to enable the scrape. The scrape is fail-soft: a 403 or an unreachable node records a reason (visible via GET /metrics/source) and never affects CPU/memory sampling.

See Install → Bandwidth trends for the full helm install / helm upgrade forms.

Metrics source (runtime picker)

Like the container-scanning source picker, the metrics source is admin-selectable at runtime — GET /metrics/source and PUT /metrics/source (admin, Free, audited), body {"source": "auto" | "self" | "prometheus"}:

Source Effect
auto (default) Self-scrape when metrics.kubeletScrape.enabled is on; else Prometheus if configured; else metrics-server only (CPU/mem, no bandwidth).
self Force the built-in cadvisor scrape. Still requires the Helm RBAC grant — without it the effective mode degrades to metrics-server.
prometheus You prefer your own Prometheus — KubeManta performs zero kubelet scrapes.

GET /metrics/source also returns live scrape health (last_ok, last_error, nodes scraped/failed) so you can see why bandwidth is blank, if it is.

CPU and memory always come from metrics-server regardless of the source setting — the self-scrape is network-only, never a second CPU/mem path.


Prometheus sub-tab

Deliberately not a re-render of the Built-in charts — it leans into what only Prometheus offers:

  • Long-retention windows — 1h through 30d / 90d, far past the built-in sampler's 7-day prune
  • CPU / memory / network charts served from your Prometheus for the selected scope
  • Ad-hoc PromQL — run any range query over the selected window (first 8 series charted)

Requires a Prometheus source in Admin → Observability and a Pro license (observability feature). The sub-tab has three distinct empty states: not configured, configured-but-unreachable, and the important one:

Prometheus reachable, but every panel is blank

If your Prometheus scrapes a standalone/Docker cadvisor, its series carry id/interface labels but no namespace/pod labels — so every pod-scoped KubeManta chart returns nothing. KubeManta detects this case and says so explicitly. Prometheus must scrape the cluster's kubelet/cadvisor (kube-prometheus-stack does this out of the box). Use Generate scrape config in Admin → Observability to emit the exact read-only RBAC + prometheus.yml job for your existing Prometheus — see Observability.

Built-in vs Prometheus — an honest comparison

With the built-in source covering live CPU/mem, 7-day trends, and bandwidth, Prometheus is not required for basic container metrics. What it uniquely adds:

Capability Built-in Prometheus
Live CPU/memory (cluster / namespace / pod)
CPU/memory trends ✅ ~7 days ✅ months/years (your retention)
Pod network bandwidth ✅ with metrics.kubeletScrape.enabled
Your application metrics (latency histograms, custom counters) ❌ never collected
kube-state-metrics / node-exporter series
Ad-hoc PromQL
PromQL for the AI copilot — the AI can query your app metrics during an investigation

Grafana sub-tab

Appears only when a Grafana source is configured in Admin → Observability. Embeds your own dashboards inside the Metrics tab (dashboard picker + kiosk-mode embed). Separate from — and in addition to — the existing option to embed one dashboard as the Overview.


How to get there

Click Metrics in the sidebar (OBSERVE group).


  • Install → Cluster metrics — metrics-server prerequisite + enabling the bandwidth scrape
  • Observability — connecting Prometheus / Grafana / Alertmanager, and the scrape-config generator
  • Network — topology-scoped bandwidth via Prometheus or cloud-provider metrics