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 clausesINen 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).
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
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...