Aller au contenu
Outils medium

Grafana : provisionner datasources et dashboards as-code (GitOps)

6 min de lecture

Le provisioning déclare les datasources et dashboards de Grafana en fichiers YAML/JSON, chargés automatiquement au démarrage. Fini le clic-à-clic non reproductible : la configuration devient versionnée, rejouable et déployable à l'identique sur plusieurs environnements. C'est la base d'une gestion GitOps de Grafana.

Ce guide de référence complète le guide Grafana. Il s'adresse aux profils intermédiaires et avancés. Vous allez provisionner une datasource, provisionner un dashboard via un fournisseur de fichiers, comprendre les ressources en lecture seule, et connaître les options editable et disableDeletion.

  • Comprendre pourquoi provisionner plutôt que cliquer.
  • Provisionner une datasource Prometheus en YAML.
  • Provisionner un dashboard via un provider de fichiers + JSON.
  • Vérifier qu'une ressource est bien gérée par le code (readOnly).
  • Verrouiller avec editable: false et disableDeletion.

Configurer Grafana à la souris ne se reproduit pas. À la recréation du conteneur, tout est perdu ; rien n'est versionné ; et déployer la même configuration sur staging et production relève du copier-coller manuel. Trois questions restent sans réponse : que se passe-t-il si quelqu'un supprime un dashboard par accident, comment tracer un changement, comment garantir la cohérence entre environnements.

Le provisioning répond à tout cela. Des fichiers déposés dans /etc/grafana/provisioning/ (sous-dossiers datasources/, dashboards/, alerting/) sont lus au démarrage. La configuration vit alors dans Git, revue et historisée comme du code.

Une datasource se déclare dans provisioning/datasources/. Ce fichier crée la datasource Prometheus au démarrage, avec un uid stable pour la référencer depuis les dashboards :

apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false

L'option editable: false empêche toute modification depuis l'interface : la datasource devient lecture seule, ce qui force les changements à passer par le code. On vérifie le résultat par l'API, qui renvoie la datasource avec "readOnly": true :

Fenêtre de terminal
curl -s "http://admin:MDP@localhost:3000/api/datasources"

Datasource Prometheus provisionnée dans Grafana : bandeau indiquant qu'elle est gérée par la configuration et non modifiable dans l'interface

Provisionner un dashboard demande deux éléments : un fournisseur (provider) qui indique à Grafana où chercher les fichiers JSON, et le JSON du dashboard lui-même.

Le provider se place dans provisioning/dashboards/provider.yaml :

apiVersion: 1
providers:
- name: default
orgId: 1
folder: Provisioned
type: file
disableDeletion: true
updateIntervalSeconds: 30
options:
path: /var/lib/grafana/dashboards

Chaque fichier .json du dossier path devient un dashboard, rangé dans le dossier Provisioned. Un dashboard minimal contient un uid, un title, un schemaVersion et des panels :

{
"uid": "prom-self",
"title": "Prometheus - Self-monitoring",
"schemaVersion": 39,
"panels": [
{
"type": "stat",
"title": "Targets UP",
"datasource": {"type": "prometheus", "uid": "prometheus"},
"targets": [{"expr": "count(up == 1)"}]
}
]
}

Au démarrage, Grafana lit le fichier et affiche le dashboard. On le confirme par l'API de recherche, qui le renvoie avec son URL :

Fenêtre de terminal
curl -s "http://admin:MDP@localhost:3000/api/search?query=Self"

Liste des dashboards Grafana montrant le dossier Provisioned et le dashboard Prometheus - Self-monitoring

Un dashboard provisionné ne peut pas être modifié durablement via l'interface : toute édition est perdue au prochain rechargement. C'est intentionnel et force le bon workflow.

  • disableDeletion: true empêche la suppression depuis l'UI.
  • updateIntervalSeconds définit la fréquence de rechargement des fichiers (ici 30 s), utile pour voir un changement de JSON pris en compte sans redémarrer.

Pour modifier un dashboard provisionné, on suit la boucle GitOps : éditer le JSON, le committer, le redéployer ; Grafana recharge automatiquement. Pour partir d'une base existante, on exporte un dashboard construit à la main (menu Share → Export → Save to file) puis on le range dans le dépôt.

  1. Le provisioning rend Grafana reproductible : datasources et dashboards en fichiers, chargés au démarrage.
  2. Une datasource se déclare en YAML dans provisioning/datasources/, avec un uid stable.
  3. Un dashboard demande un provider de fichiers plus le JSON du dashboard.
  4. editable: false et disableDeletion verrouillent les ressources : elles passent en lecture seule.
  5. Modifier = éditer le JSON et redéployer : c'est la boucle GitOps, tracée et rejouable.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn