Install Grafana Dashboard Charts
PaletteAI publishes various Grafana dashboard Helm charts to Amazon ECR. Each chart creates a ConfigMap labeled for the Grafana dashboard sidecar. Install them on the cluster where Grafana runs and where its sidecar watches for dashboard ConfigMaps—not on spoke Compute Pools.
These charts are not embedded in Profile Bundle YAML today. They are optional, hub-side (or Grafana-side) add-ons you install with Helm after metrics collection is working.
How metrics and dashboards connect
Spoke Compute Pools that use a GPU inference Profile Bundle (vllm-prod-stack, nims-stack 3.1.0+, or triton 25.08) deploy a slim kube-prometheus-stack Infrastructure Workload Profile. That stack scrapes workload metrics on the spoke, and remote-writes them to central Prometheus with cluster and paletteai_instance labels.
Central Prometheus and Grafana (where you install the dashboard charts) aggregate series from every spoke that remote-writes to the same endpoint.
Where to install the charts
Install dashboard charts on the cluster whose Grafana instance should load them.
| Deployment | Where Grafana runs | Where to install charts |
|---|---|---|
| All-In-One (AIO) appliance (default) | Hub cluster. The installer sets global.metrics.grafanaUrl to http://<root-domain>/grafana and provisions Prometheus on the hub. | Hub cluster context (same kubeconfig you use for hub operations) |
| Hub + dedicated spokes with central Prometheus | Wherever you operate Grafana that queries the central Prometheus receiving spoke remote_write traffic | Usually the hub; install elsewhere only if Grafana is not on the hub |
| External observability | A separate monitoring cluster or vendor-managed Grafana | The cluster (or namespace) whose Grafana sidecar watches dashboard ConfigMaps |
PaletteAI only links to Grafana through global.metrics.grafanaUrl. It does not install these dashboard charts for you. If Grafana runs outside the hub, set global.metrics.grafanaUrl to that URL and install the charts where that Grafana's sidecar can discover them.
Grafana sidecar expectations
Each chart creates a ConfigMap in the monitoring namespace with:
- Label
grafana_dashboard: "1"(configurable through chart values) - Dashboard JSON embedded in the ConfigMap data
Grafana must run a dashboard sidecar that watches that namespace and label. The default chart values match Grafana deployed through the Spectro Cloud Prometheus Operator / kube-prometheus-stack pattern used on PaletteAI hub and appliance clusters.
If your Grafana sidecar uses a different namespace or label, override chart values at install time:
namespace: your-grafana-namespace
sidecarLabel: grafana_dashboard
sidecarLabelValue: '1'
Prerequisites
Before installing dashboard charts, confirm the following.
-
Central Prometheus is receiving metrics. Spoke Profile Bundles with
kube-prometheus-stackremote-write toglobal.metrics.prometheusBaseUrl. On an AIO appliance, Prometheus is provisioned on the hub automatically. Refer to Configure Prometheus Agent Monitoring. -
Spoke Profile Bundles ship the metrics your dashboards need. The inference bundle on each Compute Pool determines which workload metrics exist in Prometheus—not which dashboard charts you install on Grafana.
Profile bundle ( baseName)Includes kube-prometheus-stackWLPNotes vllm-prod-stackYes (0.1.8, 0.1.10, 0.1.11, airgap variants) Scrapes vLLM /metrics; exportsvllm:*seriesnims-stack3.1.0+ only 3.0.2 does not include kube-prom; enable metricsEnabledfor NIM ServiceMonitor metricstritonYes (25.08, airgap) Uses Triton 25.08 with vLLM backend; scrapes OpenAI port /metrics(vLLM-style metrics, not nativenv_*)Companion bundle
prometheus-adapteris not a dashboard target. Install it once per cluster when NIM GPU HPA ongpu_cache_usage_percis required. -
Prometheus agent mode matches dashboard scope. PaletteAI spoke agents default to
prometheus-agent-minimal, which ships only autoscaling metrics (node_cpu_seconds_total{mode="idle"},DCGM_FI_DEV_GPU_UTIL). That is enough for basic GPU autoscaling but not for fleet compute or full DCGM fleet views.Dashboard need Recommended global.metrics.agentTypeInference-only dashboards ( vllm:*, NIM metrics scraped by spoke kube-prom)prometheus-agent-minimalis sufficientgpu-fleet-utilization,fleet-compute-overview, or full node/cAdvisor panelsSet prometheus-agenton spokes -
Helm 3 with OCI support and network access to
public.ecr.aws(or your air-gapped mirror of the same charts). -
kubectlaccess to the target cluster with permission to create ConfigMaps in the Grafana sidecar namespace (defaultmonitoring).
Which charts to install
There is no 1:1 packaging between Profile Bundles and dashboard charts. Install charts on the Grafana cluster based on which workload types run in your fleet, plus any fleet-wide ops views you want.
Per workload type (pick one inference dashboard)
| Dashboard chart | Install when you run | Key metrics |
|---|---|---|
vllm-prod-stack | vllm-prod-stack Compute Pools | vllm:* (TTFT, ITL, KV cache, queue, request preemption) |
llm-inference-metrics | vllm-prod-stack or triton 25.08 (vLLM backend) | Same vllm:* metrics; generic multi-cluster vLLM view |
llm-inference-nim-single-instance | nims-stack 3.1.0+ with metrics enabled | NIM metrics without a prefix: time_to_first_token_seconds, gpu_cache_usage_perc, num_requests_running, … |
triton-inference-metrics | Native Triton (tritonserver, metrics on :8002/metrics) | nv_inference_*, nv_gpu_* |
triton Profile BundleThe triton Profile Bundle deploys Triton 25.08 with the vLLM backend behind an OpenAI-compatible frontend. Its ServiceMonitor scrapes :9000/metrics and exports vLLM-style metrics, not Triton-native nv_* series.
- For
tritonProfile Bundle Compute Pools → installllm-inference-metricsorvllm-prod-stack, nottriton-inference-metrics. - Install
triton-inference-metricsonly when you operate classictritonserverwith standard Triton Prometheus metrics.
Fleet and ops views (install regardless of inference mix)
| Dashboard chart | Purpose |
|---|---|
gpu-fleet-utilization | DCGM plus node CPU, memory, disk, and network—fleet-wide GPU hardware |
gpu-fleet-llm-unified | DCGM plus both NIM and vllm:* inference metrics in one dashboard |
fleet-compute-overview | Kubelet/cAdvisor pod, node, and namespace metrics—general compute health |
Install a chart from ECR
Charts publish to oci://public.ecr.aws/mural/grafana/<chart-name>. Chart source lives under observability/dashboards/helm-charts/ in the paletteai-profilebundles repository.
Published chart versions
The table lists all dashboard charts and their latest published versions.
-
Install on the Grafana cluster (hub cluster for default All-In-One (AIO) appliance installs):
The snippets below use the same chart versions as the Published chart versions table (regenerated from the
profile-bundlessubmodule on each docs build):VLLM_STACK_VERSION=0.1.0
helm install vllm-prod-stack-dashboard oci://public.ecr.aws/mural/grafana/vllm-prod-stack \
--version "${VLLM_STACK_VERSION}" \
--namespace monitoring \
--create-namespaceUse a distinct Helm release name per chart (
vllm-prod-stack-dashboard,gpu-fleet-utilization-dashboard, …). To install several charts at once:for chart in \
fleet-compute-overview \
gpu-fleet-llm-unified \
gpu-fleet-utilization \
llm-inference-metrics \
llm-inference-nim-single-instance \
triton-inference-metrics \
vllm-prod-stack
do
case "${chart}" in
fleet-compute-overview) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/fleet-compute-overview" ;;
gpu-fleet-llm-unified) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/gpu-fleet-llm-unified" ;;
gpu-fleet-utilization) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/gpu-fleet-utilization" ;;
llm-inference-metrics) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/llm-inference-metrics" ;;
llm-inference-nim-single-instance) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/llm-inference-nim-single-instance" ;;
triton-inference-metrics) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/triton-inference-metrics" ;;
vllm-prod-stack) version=0.1.0; oci="oci://public.ecr.aws/mural/grafana/vllm-prod-stack" ;;
esac
helm install "${chart}-dashboard" "${oci}" \
--version "${version}" \
--namespace monitoring \
--create-namespace
done -
Upgrade after publishing a newer chart version:
VLLM_STACK_VERSION=0.1.0
helm upgrade vllm-prod-stack-dashboard oci://public.ecr.aws/mural/grafana/vllm-prod-stack \
--version "${VLLM_STACK_VERSION}" \
--namespace monitoring -
Uninstall:
helm uninstall vllm-prod-stack-dashboard --namespace monitoring
Air-gapped environments
Mirror the chart OCI artifacts and container images your Grafana/Prometheus stack needs into your private registry, then point helm install at the mirrored OCI URL. Profile Bundle airgap variants follow the same pattern for workload charts; dashboard charts are installed separately with Helm on the Grafana cluster.
Custom sidecar namespace or labels
When your Grafana sidecar watches a namespace other than monitoring, install the release into that namespace and set the chart value to match:
GPU_FLEET_VERSION=0.1.0
helm install gpu-fleet-dashboard oci://public.ecr.aws/mural/grafana/gpu-fleet-utilization \
--version "${GPU_FLEET_VERSION}" \
--namespace observability \
--create-namespace \
--set namespace=observability --set sidecarLabel=grafana_dashboard --set sidecarLabelValue=1
Use the same namespace in the validation commands below when you override the default.
Practical selection guide
Example fleet mixes:
| Fleet composition | Suggested dashboard charts |
|---|---|
Only vllm-prod-stack | vllm-prod-stack or llm-inference-metrics + gpu-fleet-utilization |
Only nims-stack 3.1.0+ | llm-inference-nim-single-instance + gpu-fleet-utilization |
| Mixed vLLM and NIM | gpu-fleet-llm-unified (or separate inference charts) + gpu-fleet-utilization |
triton 25.08 (vLLM backend) | llm-inference-metrics or vllm-prod-stack—not triton-inference-metrics |
| Ops / platform team (any GPU bundles) | Add fleet-compute-overview |
Install fleet-compute-overview and gpu-fleet-utilization on the Grafana cluster when you want fleet-wide views, even if you already installed a workload-specific inference dashboard.
Validate
-
Confirm each Helm release is deployed:
helm list --namespace monitoring -
Confirm dashboard ConfigMaps exist with the sidecar label:
kubectl get configmap --namespace monitoring --selector grafana_dashboard=1 -
Open Grafana (
global.metrics.grafanaUrlor your appliance URL athttp://<root-domain>/grafana). Within one or two sidecar sync intervals, new dashboards appear in the Grafana folder list. -
Run a PromQL smoke test in Grafana Explore against metrics your dashboards expect—for example
vllm:time_to_first_token_secondsfor vLLM pools, orDCGM_FI_DEV_GPU_UTILfor GPU fleet charts. Empty results usually mean spoke remote-write or agent configuration—not the dashboard install—is misaligned. -
For multi-cluster dashboards, confirm template variables such as
clusterandpaletteai_instancematch labels on series in Prometheus. Spoke kube-prom stacks label remote-written metrics withcluster(spoke cluster name) andpaletteai_instance(hubglobal.instanceName).
Next Steps
-
Refer to View Metrics in Grafana to link Grafana in the PaletteAI UI and understand default metric sources.
-
Refer to Configure Prometheus Agent Monitoring for
global.metrics, authentication, and agent type settings. -
Refer to Profile Bundles for which infrastructure Workload Profiles each bundle deploys on Compute Pools.