RousselTMLEARNING

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

Git Sync : versionner les dashboards dans GitHub

1. Qu'est-ce que Git Sync ? #

Le principe et ce qu'il change.

Le principe #

Disponible dans : ✓ OSS ✓ Enterprise ✓ Cloud Expérimental en Grafana 12, disponible en version stable à partir de Grafana 13

Git Sync relie Grafana à un dépôt Git (GitHub) : les dashboards et dossiers d'un dossier Grafana, ou de toute l'instance, sont stockés sous forme de fichiers JSON dans une branche et un chemin du dépôt. Les deux côtés restent synchronisés : une modification enregistrée dans Grafana devient un commit (ou une pull request), et un commit poussé dans le dépôt met à jour Grafana.

C'est la brique « observability as code » intégrée à l'interface : les équipes continuent de construire leurs dashboards visuellement, mais l'historique, la revue et le retour arrière passent par Git.

Grafana enregistre dans le dépôt par commit ou pull request ; le dépôt met Grafana à jour.
Le dépôt devient la source de vérité des dashboards synchronisés.

Git Sync ou provisioning par fichiers ? #

CritèreProvisioning par fichiersGit Sync
SensFichiers → Grafana (lecture seule dans l'interface)Grafana ⇄ Git (deux sens)
Modifier un dashboardÉditer le JSON puis redéployerDans l'interface, puis commit ou pull request
RevueDans votre chaîne CI/CDPull request ouverte depuis Grafana
InfrastructureAccès au système de fichiers du serveurUn dépôt GitHub et un jeton
Grafana CloudNon (pas d'accès aux fichiers)Oui
À savoir : le provisioning classique (leçon précédente) reste la bonne solution pour des sources de données ou des dashboards imposés et non modifiables ; Git Sync convient aux dashboards que les équipes font évoluer.

2. Mise en place #

Prérequis, jeton et connexion du dépôt.

Prérequis #

  • Grafana 12 (fonction expérimentale) ou Grafana 13 et plus ; sur Grafana Cloud, la fonction est proposée dans la pile.
  • En Grafana 12 auto-hébergé : activer les feature toggles provisioning et kubernetesDashboards.
  • Un dépôt GitHub dédié (ou un dossier dédié dans un dépôt) et le rôle administrateur dans Grafana.
  • Pour la synchronisation immédiate, une URL publique de Grafana joignable par les webhooks GitHub ; sinon Grafana interroge le dépôt à intervalle régulier.
# grafana.ini (Grafana 12 auto-hébergé)
[feature_toggles]
provisioning = true
kubernetesDashboards = true
docker run -d --name grafana -p 3000:3000 \
  -e GF_FEATURE_TOGGLES_ENABLE=provisioning,kubernetesDashboards \
  grafana/grafana:latest

Le jeton GitHub #

Créez un fine-grained personal access token limité au dépôt, avec les permissions : Contents (lecture et écriture), Metadata (lecture), Pull requests (lecture et écriture) et Webhooks (lecture et écriture). Donnez-lui une date d'expiration et notez-la : à son expiration, la synchronisation s'arrête.

Erreur courante : utiliser un jeton classique sur tous vos dépôts. Limitez toujours le jeton au seul dépôt synchronisé.

Connecter le dépôt #

  1. Ouvrez Administration › Provisioning (selon la version : Administration › General › Provisioning) puis Configure Git Sync.
  2. Collez le jeton, l'URL du dépôt, la branche (par exemple main) et le chemin des fichiers (par défaut grafana/).
  3. Choisissez la cible : un dossier Grafana (recommandé pour commencer) ou toute l'instance.
  4. Choisissez si les dashboards existants doivent être exportés vers le dépôt lors de la première synchronisation.
  5. Réglez la synchronisation : webhook (immédiat) et/ou intervalle d'interrogation, puis enregistrez.
Prérequis, jeton GitHub, Provisioning, dépôt, cible puis synchronisation.
L'onglet Events de la connexion affiche ensuite chaque synchronisation et ses erreurs.

3. Travailler au quotidien #

Enregistrer, relire, revenir en arrière.

Enregistrer un dashboard #

Un dashboard synchronisé porte l'étiquette Provisioned. À l'enregistrement, Grafana propose d'écrire directement sur la branche configurée ou de créer une nouvelle branche et d'ouvrir une pull request. Avec une pull request, le dashboard n'est mis à jour dans Grafana qu'une fois la branche fusionnée.

grafana/
├── equipe-web/
│   ├── apercu-service.json
│   └── latence-api.json
└── infra/
    └── noeuds-kubernetes.json

Chaque dossier du dépôt correspond à un dossier Grafana ; chaque fichier JSON est un dashboard.

Modifier depuis Git #

Un commit sur la branche (édition du JSON, renommage, suppression) est appliqué à Grafana au prochain webhook ou à la prochaine interrogation. Supprimer un fichier supprime le dashboard. Pour revenir en arrière, il suffit d'annuler le commit (git revert).

git pull
# corriger un seuil dans le JSON
git commit -am "latence-api : seuil d'alerte à 300 ms"
git push
# revenir à la version précédente
git revert HEAD && git push

4. Limites et bonnes pratiques #

Éviter les mauvaises surprises.

Limites #

  • Les ressources synchronisées sont les dashboards et les dossiers ; alertes, sources de données et utilisateurs relèvent d'autres outils (provisioning, Terraform, API).
  • GitHub est le fournisseur pris en charge ; vérifiez la prise en charge de GitHub Enterprise et des autres forges dans la documentation de votre version.
  • En Grafana 12, la fonction est expérimentale : sans support et susceptible de changer.
  • Un dashboard synchronisé ne doit pas être aussi géré par le provisioning par fichiers ou par Terraform.

Bonnes pratiques #

  • Commencer par un dossier pilote plutôt que toute l'instance.
  • Protéger la branche principale et imposer la pull request pour les dossiers critiques.
  • Ajouter une vérification en CI (JSON valide, pas d'UID en double).
  • Utiliser un compte de service ou un jeton dédié, avec rotation planifiée.
  • Documenter dans le README du dépôt quel dossier Grafana correspond à quel dossier Git.
Bonne pratique : gardez des UID de dashboard stables : ils servent de clé entre Grafana et le dépôt, et les liens entre dashboards en dépendent.

📄 Git Sync dans Grafana : versionner les dashboards dans GitHub →

Mon suivi

  • ⏱ Durée estimée : ≈ 9 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

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, ...

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

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

Cross-dashboard variables Grafana : partager des variables entre dashboards

Créez une fois vos variables Grafana et réutilisez-les partout : portée globale ou par dossier, a...

Bannière d'annonce dans Grafana : informer tous les utilisateurs

Affichez un message en haut de toutes les pages Grafana : activation, champ Message en Markdown e...

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

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

Monitors, SLO, dashboards et Datadog as code

Créer des monitors efficaces (métriques, logs, APM, composites, anomalies), des SLO, des dashboar...

Corrélations dans Grafana : passer d'une source de données à une autre

Créez des liens entre sources de données dans Explore : corrélations de type requête ou externe, ...

La stack LGTM (Loki, Grafana, Tempo, Mimir) : architecture et mise en place

Comprendre la stack LGTM de Grafana Labs : Loki pour les logs, Grafana pour la visualisation, Tem...

Application Observability dans Grafana Cloud

Superviser ses services avec les données OpenTelemetry : RED, cartes de services, traces et logs ...

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 !