RousselTMLEARNING

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

Les variables : guide complet

1. Introduction aux Variables Grafana #

Comprendre pourquoi les variables sont le cœur des tableaux de bord industriels.

Le principe du Templating #

Une variable dans Grafana agit comme un paramètre dynamique ou un 'placeholder'. Au lieu de figer une valeur (comme un nom de serveur spécifique) dans vos requêtes, vous utilisez une variable (ex: $server). Cela permet de créer un seul tableau de bord capable d'afficher les données de centaines de ressources différentes simplement en changeant la sélection dans un menu déroulant en haut de la page.

Les avantages pour l'observabilité #

  • Industrialisation : Un seul dashboard pour tous vos environnements (Prod, Dev, Recette).
  • Expérience Utilisateur : Permet aux utilisateurs de filtrer les données sans modifier le dashboard.
  • Maintenance simplifiée : Une modification sur le dashboard 'template' s'applique instantanément à toutes les vues filtrées.

2. Variables Globales vs Variables Personnalisées #

Distinguer les outils natifs de Grafana des configurations sur mesure.

Les Variables Globales (Built-in) #

Grafana propose des variables intégrées (built-in) qui sont automatiquement disponibles et utilisables partout sans configuration préalable. Elles fournissent des informations contextuelles sur le tableau de bord, l'utilisateur ou la plage horaire.

  • ${__from} / ${__to} : Représentent le début et la fin de la plage horaire sélectionnée dans le tableau de bord, exprimés en millisecondes Unix. Utiles pour passer la plage horaire à des liens externes ou des requêtes d'API.
  • ${__interval} : L'intervalle de temps calculé par Grafana pour regrouper les données (par exemple, '5m' pour 5 minutes). Cet intervalle est optimisé pour la résolution de votre graphique.
  • ${__interval_ms} : L'intervalle de temps en millisecondes.
  • ${__user.id} : L'identifiant unique de l'utilisateur actuellement connecté.
  • ${__user.login} : Le nom d'utilisateur (login) de l'utilisateur connecté.
  • ${__user.email} : L'adresse e-mail de l'utilisateur connecté.
  • ${__dashboard.name} : Le nom du tableau de bord actuel.
  • ${__dashboard.uid} : L'identifiant unique (UID) du tableau de bord actuel.
  • ${__panel.id} : L'identifiant unique du panel actuel.
  • ${__panel.name} : Le nom du panel actuel.
  • ${__org.id} : L'identifiant unique de l'organisation Grafana actuelle.
  • ${__org.name} : Le nom de l'organisation Grafana actuelle.
  • ${__url_time_range} : La plage horaire formatée pour être utilisée dans une URL (par exemple, from=1678886400000&to=1678972800000).
  • ${__url_variables} : Toutes les variables du tableau de bord formatées pour être utilisées dans une URL.

Les Variables Personnalisées (Custom & Query) #

Ce sont les variables que vous définissez et configurez spécifiquement pour vos tableaux de bord, offrant une flexibilité maximale pour interagir avec vos données :

  • Query : Le type de variable le plus puissant. Elle exécute une requête sur une source de données (par exemple, 'Lister tous les noms de serveurs depuis Prometheus' ou 'Récupérer tous les noms de pods Kubernetes') pour générer dynamiquement une liste de valeurs sélectionnables.
  • Custom : Permet de définir une liste de valeurs fixes, séparées par des virgules (ex: 'production, staging, development' ou 'true, false'). Utile pour des options prédéfinies qui ne changent pas fréquemment.
  • Datasource : Permet à l'utilisateur de changer dynamiquement la source de données utilisée par les panels du tableau de bord. Par exemple, basculer entre deux clusters Prometheus différents ou deux instances Elasticsearch.
  • Constant : Une variable cachée qui stocke une valeur fixe. Utile pour des paramètres qui ne doivent pas être modifiés par l'utilisateur mais qui sont utilisés dans les requêtes (ex: un préfixe de nom d'index).
  • Text box : Une zone de texte libre où l'utilisateur peut saisir n'importe quelle valeur.

3. Utilisation dans les Dashlets et les Titres #

Comment injecter la dynamique dans vos visualisations.

Syntaxe dans les requêtes #

Pour utiliser une variable dans une requête (PromQL, SQL, Lucene, etc.), Grafana supporte plusieurs syntaxes :

  • Syntaxe actuelle (recommandée) : Utilise le préfixe $ (ex: $varname) ou les accolades ${varname}. La syntaxe avec accolades est préférable car elle permet d'utiliser des modificateurs de formatage (voir section suivante).
    Exemple en PromQL : node_cpu_seconds_total{instance="$instance"}.
  • Syntaxe dépréciée : L'ancienne syntaxe [[varname]] est toujours fonctionnelle mais est considérée comme dépréciée et ne devrait plus être utilisée dans les nouveaux tableaux de bord.

Grafana remplace la variable par la valeur sélectionnée par l'utilisateur avant d'envoyer la requête à la source de données.

Titres et Textes dynamiques #

Il est recommandé d'inclure les variables dans les titres de vos panels pour savoir ce que l'on regarde. Si votre variable $app est sur 'EasyTrade', un titre configuré comme Erreurs sur $app s'affichera Erreurs sur EasyTrade. Vous pouvez aussi utiliser ${app:text} pour afficher le label lisible ou ${app:value} pour la valeur technique.

Formats de variables pour les requêtes #

Grafana offre plusieurs options de formatage pour les variables, permettant d'adapter leur sortie au contexte de la requête de la source de données. Ces formats sont spécifiés après le nom de la variable, précédés d'un deux-points (:).

  • ${varname:csv} : Formate la variable en une chaîne de caractères séparée par des virgules. Utile pour les clauses IN en SQL (ex: host IN ('server1', 'server2')).
  • ${varname:doublequote} : Entoure chaque valeur d'une liste de guillemets doubles (ex: "value1","value2").
  • ${varname:singlequote} : Entoure chaque valeur d'une liste de guillemets simples (ex: 'value1','value2').
  • ${varname:raw} : Retourne la valeur brute de la variable, sans échappement ni formatage.
  • ${varname:regex} : Formate la variable pour être utilisée dans une expression régulière (ex: (value1|value2)).
  • ${varname:lucene} : Formate la variable pour les requêtes Lucene (ex: (value1 OR value2)).
  • ${varname:percentencode} : Encode la valeur pour une utilisation dans une URL (ex: les espaces deviennent %20).
  • ${varname:glob} : Formate la variable pour les requêtes de type glob (ex: {value1,value2}).
  • ${varname:pipe} : Sépare les valeurs par un pipe (|).
  • ${varname:distributed} : Formate pour les requêtes distribuées (par exemple, pour InfluxDB).

4. Interactivité Avancée : Liens et URLs #

Passer d'un tableau de bord à un autre en conservant le contexte.

Data Links et Drill-down #

Les Data Links permettent de cliquer sur un point d'un graphique ou une ligne d'un tableau pour naviguer vers un autre dashboard. En incluant les variables dans l'URL du lien (ex: /d/my-db?var-server=$server), vous transmettez le contexte. L'utilisateur 'zoom' ainsi sur un problème sans perdre son filtrage initial.

Variables et partage d'URL #

Toute sélection de variable est reflétée dans l'URL du navigateur. Cela signifie que vous pouvez copier-coller l'URL à un collègue pour qu'il voie exactement la même vue filtrée que vous. C'est essentiel pour la collaboration lors de la gestion d'incidents (Incident Response).

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

Mon suivi

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

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

✉️ Poser une question

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

Comprendre la notion de score

Le concept de score va permettre à Elasticsearch de classer vos documents par pertinence lors d u...

Comprendre Elastic Common Schema(ECS)

Comme toujours dans nos missions de conseil, nous recommandons aux entreprises d'uniformiser, de ...

Grail : Dynatrace Data Lakehouse

Désormais vous disposez dans Dynatrace (SaaS) d'un Data Lakehouse nommé Grail dont vous pouvez co...

C'est quoi l'observabilité

La capacité à connaître l'état interne d'un système à partir des données que cette dernière émet...

Les types de transactions dans les base de données

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Différences entre Technologies et Services dans Dynatrace

Dans Dynatrace, les concepts de 'Technologie' et de 'Services' aident à organiser et surveiller l...

Dynatrace : Différences entre SQL Modifications, SQL Queries or Procedures, et SQL Transactions

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Types de consommation de licence

Comprendre l'évolution de la facturation dans Dynatrace : la différence entre l'ancien modèle de ...

Les Types de Services Dynatrace : Comprendre et Optimiser Votre Surveillance Applicative

Découvrez les différents types de services que Dynatrace peut surveiller, leur rôle, et comment l...