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. Two things must both be true: the UI can reach a Prometheus, and the engine’s metrics are arriving in it. 1. Point the UI at your Prometheus. Find its service with kubectl get svc -A | grep -i prometheus — the name varies by install:
2. Get the engine metrics into that Prometheus. The engine doesn’t expose metrics for scraping by default. Turn its metrics endpoint on — this goes in the operator chart’s values (it configures the LMCacheEngine), not the UI’s:
then give Prometheus a ServiceMonitor to scrape it — the operator already creates the <engine>-metrics Service it selects:
observability.enabled=true on the operator chart is a different pipeline — it pushes metrics out through an OTel Collector (for example to a managed metrics service). That only feeds the UI if your collector happens to deliver into the same Prometheus the UI reads. The endpoint + ServiceMonitor wiring above is self-contained and works on any cluster.
Install the community kube-prometheus-stack — it includes the Prometheus Operator that makes ServiceMonitors work:
Then prometheus.url is http://kube-prometheus-stack-prometheus.monitoring.svc:9090, and the ServiceMonitor label above is release: kube-prometheus-stack.
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. Find your exporter’s service and point dcgmService at it (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. If your GPU cluster doesn’t have the exporter at all, it ships with the NVIDIA GPU Operator — install that per NVIDIA’s docs and the exporter service appears with it.
GPU trend charts need Prometheus to scrape DCGM (the live per-GPU cards fall back to dcgmService directly, but the over-time charts read history from Prometheus). Confirm it’s being scraped — query DCGM_FI_DEV_GPU_UTIL in Prometheus and expect series back. On some managed clusters the exporter ships a ServiceMonitor labelled for a different Prometheus (e.g. CoreWeave labels theirs environment: grafana-monitoring, while kube-prometheus-stack selects release: <your-release>), so it returns zero series and the GPU trend charts stay empty. Fix it by adding a ServiceMonitor for the DCGM exporter’s service with the label your Prometheus selects.

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.