Skip to content

Configuration

The chart wraps upstream Grafana Labs charts, so most of its surface is pass-through. This page covers the values this chart owns; anything under a subchart key belongs to that subchart’s own documentation.

KeyChartVersionUpstream values
grafana.*grafana10.5.15values
loki.*loki6.53.0values
tempo.*tempo1.24.4values
mimir-distributed.*mimir-distributed6.0.5values
promtail.*promtail6.17.1values
kube-state-metrics.*kube-state-metrics7.1.0values
prometheus-node-exporter.*prometheus-node-exporter4.51.1values
mimir.*this chartmonolithic mode, below

Rendered by this chart, not a subchart. Ignored entirely when mimir-distributed.enabled is true.

ValueDefaultPurpose
mimir.enabledtrueRender the single-binary StatefulSet.
mimir.image.repositorygrafana/mimirImage.
mimir.image.tag3.0.1Kept in lockstep with the mimir-distributed appVersion so both modes run the same release.
mimir.retention30dCompactor block retention. Unset would mean keep-forever and unbounded disk growth.
mimir.persistence.size20GiThe single data PVC.
mimir.resources{}Container resources.
mimir.extraConfig{}Deep-merged over the rendered Mimir config.

See Mimir deployment modes for the trade-offs.

ValueDefaultPurpose
nebariapp.enabledtrueRender the NebariApp. Set false outside Nebari.
nebariapp.hostnameRequired when enabled. Grafana’s external hostname.
nebariapp.keycloakHostnameRequired when auth is enabled.
nebariapp.keycloakBasePath""/auth for legacy Keycloak (< v17).
nebariapp.keycloakRealmnebariRealm name.
nebariapp.service.name<release>-grafanaBackend service.
nebariapp.service.port80Backend port.
nebariapp.routing.routes[{pathPrefix: /}]Route table.
nebariapp.auth.*see belowKeycloak client and Grafana OAuth.
nebariapp.landingPage.*disabledNebari landing-page tile.
nebariapp.additionalServicesunsetExpose Loki/Tempo/Mimir push endpoints through the same host.

Auth defaults: enabled: true, provider: keycloak, provisionClient: true, enforceAtGateway: false, redirectURI: /login/generic_oauth, scopes openid profile email groups, groups admin and viewer.

Full detail, including why gateway enforcement is off and how group membership maps to Grafana roles, is in Nebari integration.

otelCollectorOverrides — telemetry routing

Section titled “otelCollectorOverrides — telemetry routing”
ValueDefaultPurpose
otelCollectorOverrides.enabledtrueRender the override ConfigMap and rollout hook.
otelCollectorOverrides.namespacemonitoringWhere NIC’s collector DaemonSet lives.
otelCollectorOverrides.daemonSetNameopentelemetry-collector-agentDaemonSet rolled post-install/upgrade.
otelCollectorOverrides.rolloutImagealpine/k8s:1.30.4Needs kubectl. Community image — override if you require a vetted registry.
otelCollectorOverrides.imagePullPolicyIfNotPresentPull policy for the rollout Job.

See OpenTelemetry collector wiring.

These are chart defaults you may want to know about before overriding them.

ValueDefault hereWhy
grafana.adminUser / adminPasswordadmin / adminDevelopment convenience. Override for any shared cluster.
grafana.sidecar.datasources.enabledtruePicks up the chart’s datasource ConfigMap.
grafana.sidecar.dashboards.searchNamespaceALLLets other packs contribute dashboards from their own namespaces.
grafana.sidecar.dashboards.folderAnnotationgrafana_folderHonors the folder annotation; required with foldersFromFilesStructure.
grafana.sidecar.dashboards.provider.foldersFromFilesStructuretrueWithout it every dashboard lands in General.
grafana.service.typeClusterIPRouting is the NebariApp’s job.
grafana.envFromConfigMapsgrafana-oauth-config (optional)Injects the OAuth environment when Keycloak is configured.

SingleBinary mode, one replica, auth_enabled: false, replication factor 1, TSDB schema v13 on filesystem storage, 10Gi PVC. The read, write, backend, gateway, chunks-cache, and results-cache components are all disabled — they belong to the scalable deployment modes.

Local trace storage at /var/tempo/traces with a WAL at /var/tempo/wal, 10Gi PVC, OTLP receivers on 0.0.0.0:4317 (gRPC) and 0.0.0.0:4318 (HTTP).

Client URL templated to http://{{ .Release.Name }}-loki:3100/loki/api/v1/push. The default scrape config handles the CRI log format and enriches with pod, namespace, and container labels.

kube-state-metrics and prometheus-node-exporter

Section titled “kube-state-metrics and prometheus-node-exporter”

Both carry prometheus.io/scrape: "true" pod annotations (ports 8080 and 9100 respectively) so the role: pod discovery in NIC’s OTel collector finds them. This chart deploys the exporters but no scraper, so without that collector nothing pulls them into Mimir. The Kubernetes Views dashboards additionally need the collector’s cAdvisor and kubelet scrape jobs — see Dashboards.

# Production-ish install
grafana:
adminPassword: <from a secret, not here>
persistence:
enabled: true
size: 10Gi
loki:
singleBinary:
persistence:
size: 100Gi
tempo:
persistence:
size: 50Gi
mimir:
retention: 90d
persistence:
size: 200Gi
resources:
requests: { cpu: 500m, memory: 2Gi }
nebariapp:
hostname: grafana.example.com
keycloakHostname: keycloak.example.com
landingPage:
enabled: true
Terminal window
helm template lgtm-pack chart --set nebariapp.enabled=false | less
helm get values lgtm-pack -n monitoring # what you overrode
helm get values lgtm-pack -n monitoring --all # everything, defaults included