RousselTMLEARNING

Article · Grafana : de la découverte à l'expertise

Cross-dashboard variables : partager des variables entre dashboards

1. Pourquoi partager des variables entre dashboards ? #

Le problème résolu, les deux portées et ce qui change par rapport aux variables locales.

Le problème #

Disponible dans : ✓ OSS ✓ Enterprise ✓ Cloud Fonction en public preview, sur activation

Une variable classique n'existe que dans le dashboard où vous l'avez créée. Avec trente dashboards filtrés par environnement, vous recréez trente fois la variable env. Ajouter une valeur comme recette impose trente modifications, et les écarts s'installent : env ici, environment là, prod d'un côté et production de l'autre.

Les cross-dashboard variables résolvent ce problème : vous définissez la variable une seule fois, puis plusieurs dashboards la réutilisent. Vous la modifiez à un seul endroit et tous les dashboards qui l'utilisent suivent.

Ne confondez pas. Les variables « globales » vues plus tôt dans ce chapitre sont les variables intégrées de Grafana, comme $__from ou $__interval. Ici, « global » désigne la portée d'une variable que vous créez vous-même.

Deux portées #

  • Globale : proposée à tous les dashboards de l'organisation.
  • Par dossier : proposée uniquement aux dashboards placés dans le même dossier.

Une variable globale est proposée à tous les dashboards de l'organisation. Une variable de dossier est proposée uniquement aux dashboards placés directement dans ce dossier, pas à ceux d'un sous-dossier.

Un sous-dossier n'hérite pas. Lors de nos tests, un dashboard placé dans un sous-dossier de Core metrics ne voyait aucune variable de ce dossier : seules les variables globales lui étaient proposées.

Locale ou partagée ? #

Variable localeCross-dashboard variable
Où la définirDans les paramètres du dashboardDashboards > Variables
Où la modifierDans chaque dashboardÀ un seul endroit
DisponibilitéCe dashboard uniquementToute l'organisation ou un dossier, après rattachement
Syntaxe dans les requêtes$env$env (identique)
StatutFonction stablePublic preview (sur activation)

Gardez une variable locale quand elle n'a de sens que pour un seul dashboard, par exemple le choix d'un seuil d'affichage. Partagez ce qui décrit votre organisation : environnement, région, équipe, client.

2. Activer la fonctionnalité #

Feature toggle, Docker, vérification et statut de la fonctionnalité.

Un statut à connaître #

Fonctionnalité en public preview. Grafana Labs indique un support limité et de possibles ruptures de compatibilité avant la disponibilité générale. Testez-la d'abord hors production. La documentation ne précise pas de version minimale : cet article a été vérifié sur Grafana OSS 13.3.0.

La documentation la présente comme disponible sur Grafana Cloud, Enterprise et Open source. Sur Grafana Cloud, où vous n'avez pas accès au fichier de configuration, contactez le support.

Activer le feature toggle, créer la variable dans Dashboards > Variables, la rattacher à chaque dashboard, puis l'utiliser dans les requêtes. Sans le rattachement, $env reste affiché tel quel.

Activer le toggle #

Dans le fichier de configuration, puis redémarrez Grafana :

# /etc/grafana/grafana.ini (ou custom.ini)
[feature_toggles]
grafana.dashboardGlobalVariables = true

Ou avec une variable d'environnement, pratique avec Docker :

docker run -d --name grafana -p 3000:3000 \
  -e GF_FEATURE_TOGGLES_ENABLE=grafana.dashboardGlobalVariables \
  grafana/grafana:13.3.0

Vérifiez ensuite que le toggle est actif (admin:admin est le compte par défaut d'une installation neuve : adaptez-le) :

curl -s -u admin:admin http://localhost:3000/api/frontend/settings \
  | jq '.featureToggles["grafana.dashboardGlobalVariables"]'
# true

Une entrée Variables apparaît alors dans le menu Dashboards.

3. Créer une variable partagée #

Le formulaire de Dashboards > Variables, champ par champ.

Pas à pas #

  1. Ouvrez Dashboards > Variables.
  2. Cliquez sur New variable.
  3. Choisissez la portée dans Folder, puis le Variable type.
  4. Renseignez le nom, puis les options du type choisi.
  5. Cliquez sur Save.

Formulaire New variable de Grafana : dossier Dashboards, type Custom, nom env, libellé Env, valeurs prod, preprod et dev

Le piège du champ Folder. Le champ s'appelle « Folder » même pour une variable globale : c'est le dossier racine Dashboards, sélectionné par défaut, qui rend la variable globale. Choisissez un autre dossier pour limiter sa portée.

Les champs #

ChampRôle
FolderPortée : Dashboards pour une variable globale, sinon le dossier visé.
Variable typeLe type de variable (voir ci-dessous).
NameLe nom utilisé dans les requêtes ($env), 50 caractères au maximum.
LabelFacultatif : le nom affiché devant la liste déroulante. À défaut, Grafana affiche le nom.
DescriptionFacultatif : affichée par une icône d'information. Les liens Markdown et les URL sont acceptés, seuls http et https sont cliquables.
DisplayAbove dashboard (par défaut), Above dashboard, label hidden, Controls menu ou Hidden.

Les types disponibles #

TypeExemple d’usage
QueryValeurs issues de la source de données : label_values(up, env)
CustomListe fixe : prod,preprod,dev
TextboxSaisie libre, par exemple un identifiant de commande
ConstantValeur cachée, par exemple un préfixe de métrique
Data sourceChanger de source de données sur plusieurs panneaux
IntervalPas de temps : 1m,5m,1h
SwitchBascule activée ou désactivée

Le formulaire de Grafana 13.3.0 propose aussi Filter and Group by, que la page de documentation ne cite pas.

Valeurs libres activées par défaut. Sur une variable Custom, Allow custom values est coché par défaut : un utilisateur peut donc saisir une valeur hors liste. Décochez-le si la variable sert à imposer une nomenclature.

La liste des variables #

La page Dashboards > Variables regroupe les variables : celles d'un dossier apparaissent sous celui-ci, les globales à la racine de la liste.

Page Variables de Grafana : service dans le dossier Core metrics, env et region à la racine, donc globales

4. Rattacher la variable à un dashboard #

L'étape indispensable, souvent oubliée.

Créer ne suffit pas #

Une variable créée n'apparaît pas toute seule dans vos dashboards. Tant qu'elle n'est pas rattachée, le sélecteur est absent et $env reste affiché tel quel, sans être remplacé :

Dashboard Grafana sans variable rattachée : le panneau affiche littéralement env = $env et service = $service

Pas à pas #

  1. Ouvrez le dashboard et cliquez sur Edit.
  2. Cliquez sur le bouton + en haut du dashboard, puis sur Variable. L'icône Add new element de la barre latérale donne le même résultat.

Menu du bouton plus en mode édition : Variable, Filter and Group by, Annotation query, Link

  1. Choisissez Global or folder variable.

Panneau de choix du type : Global or folder variable apparaît en premier, avant Query, Custom, Textbox et Constant

  1. Cochez les variables voulues, ou All global et All folder pour prendre toutes celles de chaque portée.
  2. Cliquez sur Save, ajoutez éventuellement une description, confirmez avec Save, puis cliquez sur Exit edit.

Panneau Global or folder variable : env et service cochés, les sélecteurs Env et Service apparaissent et le panneau affiche env = prod et service = api

Le panneau affiche maintenant les valeurs sélectionnées :

Dashboard enregistré avec les sélecteurs Env et Service et le panneau qui affiche env = prod et service = api

Pour retirer une variable, repassez par la barre latérale du dashboard. Pour la modifier, passez par Dashboards > Variables.

Liste explicite ou « All » ? #

ChoixEffet observéQuand l’utiliser
Variables cochées une à uneSeules ces variables arrivent dans le dashboard.Par défaut : le dashboard reste maîtrisé.
All global / All folderUne variable ajoutée plus tard apparaît aussi dans le dashboard, sans le modifier.Quand toutes les variables de la portée concernent le dashboard.
Attention à « All ». Avec All global, toute nouvelle variable globale ajoute un sélecteur à ces dashboards dès leur prochaine ouverture.

5. Utiliser la variable au quotidien #

Requêtes, titres, URL et modification centralisée.

Dans les requêtes et les titres #

Une fois rattachée, la variable s'utilise comme n'importe quelle autre.

# Prometheus : une valeur
rate(http_requests_total{env="$env", service="$service"}[5m])

# Prometheus : variable multi-valeur (env=~ et le format regex)
sum by (service) (rate(http_requests_total{env=~"${env:regex}"}[5m]))

Avec Loki :

{env="$env", service="$service"} |= "error"

Dans un titre de panneau :

Erreurs de ${service} en ${env}

Dans l'URL #

Le préfixe var- fonctionne aussi : un lien présélectionne les valeurs, ce qui est utile dans une alerte ou un runbook.

https://grafana.example.com/d/core1?var-env=dev&var-service=batch

Modifier une seule fois #

Nous avons ajouté la valeur recette et changé le libellé dans Dashboards > Variables : les deux changements sont apparus dans le dashboard au rechargement, sans le modifier ni l'enregistrer.

La contrepartie. Une erreur se propage aussi partout. Avant de renommer ou de supprimer une variable partagée, repérez les dashboards qui l'utilisent : renommer revient à casser le $env de leurs requêtes.

6. Conflits, déplacements et droits #

Ce que la documentation ne précise pas, testé sur Grafana 13.3.0.

Conflits de noms #

La documentation ne dit rien des conflits. Voici ce que nous avons observé. Deux variables d'une même portée ne peuvent pas avoir le même nom : le formulaire le refuse (A variable with this name already exists in the selected folder) et l'API répond 409. Une variable de dossier peut en revanche porter le nom d'une variable globale.

Dans un dashboard, une variable locale l'emporte sur une variable de dossier, qui masque une variable globale de même nom.

  • Dans le dossier concerné, la variable globale env disparaît de la liste au profit de celle du dossier.
  • Si le dashboard définit aussi une variable locale env, c'est la locale qui s'applique : la valeur partagée est ignorée.
Conseil. Évitez ces homonymes. Un même nom qui donne des valeurs différentes selon le dossier rend les dashboards difficiles à comprendre.

Déplacer ou supprimer #

ActionRésultat observé
Déplacer un dashboard vers un autre dossierIl perd les variables de son ancien dossier : le sélecteur disparaît et $service s'affiche tel quel. Les variables globales restent.
Supprimer une variable utiliséeLe sélecteur disparaît à la prochaine ouverture, sans message d'erreur.
Supprimer une variable de dossier qui masquait une globaleLe dashboard utilise alors la variable globale de même nom, avec ses valeurs.
Pas d'avertissement. Ces cas ne produisent aucune alerte dans Grafana : vérifiez vos dashboards après un déplacement de dossier ou une suppression.

Qui peut faire quoi ? #

Rôle de baseLire la listeCréer dans un dossierCréer ou modifier une globale
ViewerOuiNon (403)Non (403)
EditorOuiOuiNon (403)
AdminOuiOuiOui

Résultats obtenus avec l'API et les rôles d'organisation par défaut, sans permission de dossier particulière. Vérifiez-les sur votre instance si vous avez personnalisé les droits.

7. Automatiser avec l'API #

Lister et créer des variables, et lire le rattachement d'un dashboard.

Avant de commencer #

API en bêta. La page de documentation ne décrit ni API ni provisioning. Les appels ci-dessous sont ceux que nous avons validés sur Grafana 13.3.0, avec la version v2beta1 : ils peuvent changer avant la disponibilité générale. Ne les intégrez pas à une automatisation critique sans test à chaque montée de version.

Lister #

curl -s -u admin:admin \
  http://localhost:3000/apis/dashboard.grafana.app/v2beta1/namespaces/default/variables \
  | jq -r '.items[] | [.metadata.name, .spec.kind, (.metadata.annotations["grafana.app/folder"] // "global")] | @tsv'
# env                     CustomVariable    global
# region                  ConstantVariable  global
# service--core-metrics   CustomVariable    core-metrics

Créer une variable globale #

curl -s -u admin:admin -H 'Content-Type: application/json' \
  http://localhost:3000/apis/dashboard.grafana.app/v2beta1/namespaces/default/variables -d '{
  "apiVersion": "dashboard.grafana.app/v2beta1",
  "kind": "Variable",
  "metadata": {"name": "region"},
  "spec": {"kind": "ConstantVariable", "spec": {
    "name": "region",
    "query": "eu-west-3",
    "current": {"text": "eu-west-3", "value": "eu-west-3"},
    "hide": "hideVariable",
    "skipUrlSync": true
  }}
}'

Créer une variable de dossier #

Le nom technique suit la forme <nom>--<uid du dossier> : tout autre nom est refusé avec une erreur 400. Le nom à utiliser dans les requêtes reste spec.spec.name.

curl -s -u admin:admin -H 'Content-Type: application/json' \
  http://localhost:3000/apis/dashboard.grafana.app/v2beta1/namespaces/default/variables -d '{
  "apiVersion": "dashboard.grafana.app/v2beta1",
  "kind": "Variable",
  "metadata": {
    "name": "service--core-metrics",
    "annotations": {"grafana.app/folder": "core-metrics"},
    "labels": {"grafana.app/folder": "core-metrics"}
  },
  "spec": {"kind": "CustomVariable", "spec": {
    "name": "service",
    "query": "api,front,batch",
    "current": {"text": "api", "value": "api"},
    "options": [],
    "multi": false,
    "includeAll": false,
    "label": "Service",
    "hide": "dontHide",
    "skipUrlSync": false,
    "allowCustomValue": false
  }}
}'

Où est stocké le rattachement ? #

Le rattachement ne figure pas dans la liste variables du dashboard, qui reste vide : il est stocké dans une annotation. Si vous versionnez vos dashboards, vérifiez que votre outil conserve cette annotation.

curl -s -u admin:admin \
  http://localhost:3000/apis/dashboard.grafana.app/v2beta1/namespaces/default/dashboards/core1 \
  | jq -r '.metadata.annotations["grafana.app/useCrossDashboardVariables"]'
# {"global":["env"],"folder":["service"]}

La valeur vaut "all" avec All global ou All folder, et "none" si rien n'est rattaché.

8. Bonnes pratiques et dépannage #

Les réflexes à adopter, les erreurs fréquentes et un exercice.

Bonnes pratiques #

  • Fixez une convention de nommage avant de créer la première variable : env, region, team.
  • Réservez la portée globale à ce qui concerne vraiment toute l'organisation, et préférez le dossier pour le reste.
  • Limitez le nombre de variables rattachées à un dashboard : trop de sélecteurs nuisent à la lecture.
  • Décrivez chaque variable : le champ Description aide ceux qui ne l'ont pas créée.
  • Testez sur une instance hors production : la fonctionnalité peut encore changer.

Dépannage #

SymptômeCause probableSolution
Pas d’entrée Variables dans le menuToggle inactifActivez le toggle, redémarrez et vérifiez avec /api/frontend/settings.
$env s’affiche tel quelVariable non rattachéeRattachez-la via Global or folder variable.
Variable absente de la liste au rattachementElle appartient à un autre dossier, ou le dashboard est dans un sous-dossierRendez-la globale ou placez le dashboard directement dans le bon dossier.
La variable globale a disparu de la listeUne variable du dossier porte le même nomRenommez l’une des deux.
Valeur partagée ignoréeUne variable locale porte le même nomSupprimez la variable locale.
Erreur 403 à la créationDroits insuffisantsUne variable globale demande le rôle Admin dans nos tests.

À vous de jouer #

  1. Lancez Grafana avec la commande Docker de la partie 2 et vérifiez le toggle.
  2. Créez les dossiers Core metrics et Finance, avec un dashboard dans chacun et un panneau Text qui affiche env = $env.
  3. Créez la variable globale env (type Custom, valeurs prod,preprod,dev).
  4. Constatez que $env s'affiche tel quel, puis rattachez la variable aux deux dashboards.
  5. Ajoutez la valeur recette dans Dashboards > Variables et vérifiez qu'elle apparaît dans les deux dashboards.
  6. Créez dans Finance une variable env de valeurs x,y et observez ce qui change dans la liste de rattachement de chaque dossier.

Sources #

Documentation consultée et comportements testés en novembre 2026 sur Grafana OSS 13.3.0.

📄 Cross-dashboard variables Grafana : partager des variables entre dashboards →

Mon suivi

  • ⏱ Durée estimée : ≈ 22 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Discussions récentes de la formation

Poser une question sur cette leçon →Voir toutes les discussions de la formation

Glossaire de la formation

Observabilité

La capacité à connaître l'état interne d'un système à partir des données qu'il émet.Ces données sont classées en 3 piliers : logsmétriquestracesprofil...

Grafana

Plateforme open source de visualisation de données et d'analyse de métriques interactives.

Prometheus

Système open source de surveillance et d'alerte, particulièrement adapté pour la collecte de métriques dans des environnements dynamiques (comme Kuber...

APM (Application Performance Monitoring)

Surveillance des performances applicatives pour identifier, diagnostiquer et résoudre les problèmes complexes liés aux performances et à la disponibil...

k6

Outil open source de test de charge (load testing) conçu pour l'ingénierie de performance, permettant d'évaluer la fiabilité et la scalabilité des sys...

Traces distribuées

Technique (issue du pilier des Traces) permettant de suivre le cheminement complet d'une requête à travers de multiples micro-services pour identifier...

Métriques

Mesures numériques collectées à intervalles réguliers (ex: CPU, RAM, temps de réponse) utilisées pour évaluer l'état de santé global d'un système au f...

Alerting

Processus consistant à notifier les équipes (via email, Slack, Teams) lorsqu'un événement spécifique, un dépassement de seuil ou une anomalie est déte...

HTTP Code

Codes de statut HTTP standardisés indiquant le résultat du traitement d'une requête.1xx (Information) : 100 Continue, 101 Switching Protocols.2xx (Suc...

Access Log

Fichier de journalisation enregistrant les requêtes traitées par un serveur web (Apache, Nginx, Lighttpd, etc.). Il permet de tracer l'activité du ser...

Client IP

L'adresse IP de l'utilisateur effectuant la requête vers le serveur web. Lorsqu'un utilisateur passe par un Load Balancer ou un proxy (ex: Cloudflare)...

Timestamp

La date et l'heure exactes auxquelles la requête a été reçue par le serveur.Configuration : %t dans Apache, $time_local ou $time_iso8601 dans Nginx.

Request

La ligne de requête initiale du client. Elle comprend généralement la méthode HTTP (ex: GET), l'URL demandée et la version du protocole HTTP.Configura...

Status Code

Le code de statut HTTP final renvoyé par le serveur au client (ex : 200 pour un succès, 404 pour ressource non trouvée).Configuration : %>s dans Apach...

Size

Le volume des données renvoyées au client, mesuré en octets (généralement sans les en-têtes HTTP).Configuration : %b ou %O dans Apache, $body_bytes_se...

Referrer

L'URL de la page web depuis laquelle le client a cliqué ou suivi un lien pour accéder à la ressource actuelle.Configuration : %{Referer}i dans Apache,...

User-Agent

Les informations d'identification fournies par le client concernant son navigateur, son système d'exploitation et son appareil. Sa structure standard ...

Response Time

La durée totale prise par le serveur pour traiter la requête et renvoyer la réponse au client.Configuration : %D (microsecondes) ou %T (secondes) dans...

Grafana Loki

Système de journalisation (logs) multi-tenant, hautement disponible et inspiré de Prometheus. Il est conçu pour être très économe en ressources en n'i...

Articles recommandés

Maîtriser les Variables dans Grafana : Dynamisez vos Tableaux de Bord

Apprenez à utiliser les variables pour créer des tableaux de bord interactifs et réutilisables. D...

Créer des tableaux de bord dans Zabbix : dashboards, widgets et pages

Construire des dashboards Zabbix utiles : pages, widgets (Graph, Problems, Top hosts, Honeycomb, ...

Bonnes pratiques Grafana : dashboards, provisioning, performances et sécurité

Bonnes pratiques Grafana : conception de dashboards lisibles, variables, dashboards as code, prov...

Prometheus : visualiser ses métriques (UI, Grafana et dashboards)

Visualiser les données Prometheus : interface web, graphes PromQL, connexion à Grafana, dashboard...

Tableaux de bord Grafana avec la source de données Zabbix

Afficher Zabbix dans Grafana : installer le plugin, créer un utilisateur et un jeton d'API, confi...

Grafana Provisioning : Automatisez la gestion de vos tableaux de bord et sources de données

Découvrez comment utiliser le provisioning de Grafana pour gérer vos configurations (dashboards, ...

Dashboards et notebooks Datadog : widgets, template variables et bonnes pratiques

Concevoir des dashboards Datadog utiles : types de widgets, template variables, groupes, Powerpac...

Visualiser et automatiser Zabbix : dashboards, Grafana et API

Construire des dashboards et cartes dans Zabbix, utiliser le plugin Zabbix de Grafana, et automat...

L'API de Traefik : inspecter la configuration et sécuriser le tableau de bord

Utiliser l'API REST de Traefik pour inspecter routeurs, services, middlewares et entrypoints, l'e...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !