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.ioevery 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:
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).
Related¶
- 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