Skip to main content
Version: v1.1.x

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.

DeploymentWhere Grafana runsWhere 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 PrometheusWherever you operate Grafana that queries the central Prometheus receiving spoke remote_write trafficUsually the hub; install elsewhere only if Grafana is not on the hub
External observabilityA separate monitoring cluster or vendor-managed GrafanaThe cluster (or namespace) whose Grafana sidecar watches dashboard ConfigMaps
info

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.

  1. Central Prometheus is receiving metrics. Spoke Profile Bundles with kube-prometheus-stack remote-write to global.metrics.prometheusBaseUrl. On an AIO appliance, Prometheus is provisioned on the hub automatically. Refer to Configure Prometheus Agent Monitoring.

  2. 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-stack WLPNotes
    vllm-prod-stackYes (0.1.8, 0.1.10, 0.1.11, airgap variants)Scrapes vLLM /metrics; exports vllm:* series
    nims-stack3.1.0+ only3.0.2 does not include kube-prom; enable metricsEnabled for NIM ServiceMonitor metrics
    tritonYes (25.08, airgap)Uses Triton 25.08 with vLLM backend; scrapes OpenAI port /metrics (vLLM-style metrics, not native nv_*)

    Companion bundle prometheus-adapter is not a dashboard target. Install it once per cluster when NIM GPU HPA on gpu_cache_usage_perc is required.

  3. 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 needRecommended global.metrics.agentType
    Inference-only dashboards (vllm:*, NIM metrics scraped by spoke kube-prom)prometheus-agent-minimal is sufficient
    gpu-fleet-utilization, fleet-compute-overview, or full node/cAdvisor panelsSet prometheus-agent on spokes
  4. Helm 3 with OCI support and network access to public.ecr.aws (or your air-gapped mirror of the same charts).

  5. kubectl access to the target cluster with permission to create ConfigMaps in the Grafana sidecar namespace (default monitoring).

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 chartInstall when you runKey metrics
vllm-prod-stackvllm-prod-stack Compute Poolsvllm:* (TTFT, ITL, KV cache, queue, request preemption)
llm-inference-metricsvllm-prod-stack or triton 25.08 (vLLM backend)Same vllm:* metrics; generic multi-cluster vLLM view
llm-inference-nim-single-instancenims-stack 3.1.0+ with metrics enabledNIM metrics without a prefix: time_to_first_token_seconds, gpu_cache_usage_perc, num_requests_running, …
triton-inference-metricsNative Triton (tritonserver, metrics on :8002/metrics)nv_inference_*, nv_gpu_*
Native Triton vs the triton Profile Bundle

The 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 triton Profile Bundle Compute Pools → install llm-inference-metrics or vllm-prod-stack, not triton-inference-metrics.
  • Install triton-inference-metrics only when you operate classic tritonserver with standard Triton Prometheus metrics.

Fleet and ops views (install regardless of inference mix)

Dashboard chartPurpose
gpu-fleet-utilizationDCGM plus node CPU, memory, disk, and network—fleet-wide GPU hardware
gpu-fleet-llm-unifiedDCGM plus both NIM and vllm:* inference metrics in one dashboard
fleet-compute-overviewKubelet/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.

  1. 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-bundles submodule 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-namespace

    Use 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
  2. 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
  3. 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 compositionSuggested dashboard charts
Only vllm-prod-stackvllm-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 NIMgpu-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

  1. Confirm each Helm release is deployed:

    helm list --namespace monitoring
  2. Confirm dashboard ConfigMaps exist with the sidecar label:

    kubectl get configmap --namespace monitoring --selector grafana_dashboard=1
  3. Open Grafana (global.metrics.grafanaUrl or your appliance URL at http://<root-domain>/grafana). Within one or two sidecar sync intervals, new dashboards appear in the Grafana folder list.

  4. Run a PromQL smoke test in Grafana Explore against metrics your dashboards expect—for example vllm:time_to_first_token_seconds for vLLM pools, or DCGM_FI_DEV_GPU_UTIL for GPU fleet charts. Empty results usually mean spoke remote-write or agent configuration—not the dashboard install—is misaligned.

  5. For multi-cluster dashboards, confirm template variables such as cluster and paletteai_instance match labels on series in Prometheus. Spoke kube-prom stacks label remote-written metrics with cluster (spoke cluster name) and paletteai_instance (hub global.instanceName).

Next Steps