Skip to main content
Most of the dashboard works the moment it’s installed. Two things need connecting: your Prometheus (for the trend charts), and — on GPU clusters — GPU telemetry (for per-GPU detail): Everything is set through Helm values: Cluster access itself needs no configuration — the UI picks it up automatically when running in-cluster.

Trend Charts: Connect Your Prometheus

Live numbers come straight from the engines; history comes from your Prometheus. Point prometheus.url at the Prometheus your engine metrics land in (or use prometheus.service if you’d rather not open a direct path):
Engine metrics get into Prometheus through the operator’s observability stack — a ServiceMonitor or OTel Collector, turned on with observability.enabled=true on the operator chart (see Operator Observability). The UI simply reads whichever Prometheus those metrics reach. Charts fill once both halves are in place; if they stay empty while everything else works, see Troubleshooting.

Per-GPU Detail: Connect GPU Telemetry (GPU clusters)

Per-GPU utilization, memory fill, and hardware-fault detail come from NVIDIA’s DCGM exporter — standard on GPU clusters (it ships with the NVIDIA GPU Operator), but not part of Tensormesh. Point dcgmService at its service (service.namespace:port):
If it’s unset or unreachable, the Fleet Map simply shows one row per node instead of per-GPU cards; everything else is unaffected.

Multiple Clusters

One dashboard can watch several clusters — the fleet-wide pages merge every cluster’s engines (labeled · prod / · staging), and per-engine pages scope to the right one. The cluster the UI runs in is automatic. Each additional cluster needs just two things: its apiUrl and a read-only token. It’s two steps: 1. Put your clusters (with tokens) in a Secret:
2. Point your values file at it:
Reinstall, and every cluster shows up. Each entry can also set its own namespace, prometheusUrl, or dcgmService — and "insecure": true if that cluster’s API uses a self-signed certificate.
Run this in that cluster — it creates a read-only service account (the same access the UI uses) and prints a token:
One token for every cluster? Skip the per-cluster tokens — list the clusters in your values file and put a single TMO_KUBE_TOKEN in the Secret; every cluster inherits it.