1. Introduction au Provisioning Grafana
Comprendre le concept et les avantages de la gestion de configuration 'as Code' pour Grafana.
Le principe du Provisioning
Le provisioning Grafana est une fonctionnalité qui permet de gérer la configuration de votre instance Grafana (sources de données, tableaux de bord, notificateurs, etc.) via des fichiers de configuration externes, généralement au format YAML. Au lieu de créer et de modifier ces éléments manuellement via l'interface utilisateur de Grafana, vous définissez leur état souhaité dans des fichiers qui sont ensuite lus et appliqués par Grafana au démarrage ou à intervalles réguliers.
Cela transforme la gestion de votre Grafana en une approche Infrastructure as Code (IaC), où l'état de votre plateforme est décrit dans des fichiers versionnés, auditables et reproductibles.
Pourquoi l'utiliser ? Les avantages clés
- Automatisation et CI/CD : Intégrez la création et la mise à jour de vos configurations Grafana directement dans vos pipelines de livraison continue (CI/CD).
- Reproductibilité : Assurez-vous que tous vos environnements Grafana (développement, test, production) sont configurés de manière identique et cohérente.
- Versionnement : Suivez les modifications de vos configurations dans un système de contrôle de version (Git), permettant un audit facile et un retour arrière si nécessaire.
- Collaboration : Facilitez la collaboration entre les équipes en permettant aux développeurs et aux opérateurs de contribuer aux configurations Grafana via du code.
- Réduction des erreurs : Minimisez les erreurs manuelles et les dérives de configuration (configuration drift) en automatisant le processus.
2. Provisioning des Sources de Données (Data Sources)
Automatisez la déclaration et la configuration de vos sources de données externes.
Utilité et structure du fichier de configuration
Le provisioning des sources de données est essentiel pour garantir que votre instance Grafana puisse se connecter aux systèmes de monitoring (Prometheus, Elasticsearch, InfluxDB, etc.) dès son démarrage, sans intervention manuelle. Le fichier de configuration des sources de données est généralement placé dans le répertoire /etc/grafana/provisioning/datasources (ou un chemin similaire selon votre installation).
Chaque source de données est définie par un type, un nom, une URL, et des options spécifiques (authentification, version, etc.).
Exemples de configuration YAML
Voici des exemples de fichiers YAML pour provisionner des sources de données courantes :
# /etc/grafana/provisioning/datasources/datasources.yaml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
uid: prometheus_ds
access: proxy
url: http://prometheus:9090
isDefault: true
version: 1
editable: false
basicAuth: false
- name: Elasticsearch
type: elasticsearch
uid: elasticsearch_ds
access: proxy
url: http://elasticsearch:9200
version: 7.10.0
editable: false
basicAuth: true
basicAuthUser: grafana_user
secureJsonData:
basicAuthPassword: "${ES_PASSWORD}" # Utilisation d'une variable d'environnement
jsonData:
esVersion: 70
timeField: "@timestamp"
maxConcurrentShardRequests: 5
Notez l'utilisation de editable: false pour empêcher les modifications via l'interface utilisateur, et secureJsonData avec une variable d'environnement pour les informations sensibles.
3. Provisioning des Tableaux de Bord (Dashboards)
Gérez vos visualisations et tableaux de bord de manière automatisée et versionnée.
Utilité et structure du fichier de configuration
Le provisioning des tableaux de bord permet de déployer automatiquement vos visualisations et de les maintenir à jour. Les fichiers de configuration sont généralement placés dans /etc/grafana/provisioning/dashboards. Vous pouvez définir des dossiers pour organiser vos dashboards et spécifier comment Grafana doit les charger.
Grafana peut charger des dashboards à partir de fichiers JSON locaux ou les importer depuis des sources externes (comme Grafana.com) en spécifiant leur ID.
Exemples de configuration YAML
Voici un exemple de fichier YAML pour provisionner un dossier de tableaux de bord :
# /etc/grafana/provisioning/dashboards/dashboards.yaml
apiVersion: 1
dashboards:
- name: 'Mon Dossier de Dashboards'
orgId: 1
folder: 'Mes Applications'
type: file
options:
path: /var/lib/grafana/dashboards/mes-applications # Chemin vers les fichiers JSON des dashboards
intervalSeconds: 10 # Vérifie les changements toutes les 10 secondes
allowUiUpdates: true # Permet les modifications via l'UI (sera écrasé au prochain redémarrage si non sauvegardé)
editable: true
- name: 'Dashboards Système'
orgId: 1
folder: 'Infrastructure'
type: file
options:
path: /var/lib/grafana/dashboards/systeme
intervalSeconds: 60
allowUiUpdates: false # Empêche les modifications via l'UI
editable: false
Les fichiers JSON des dashboards eux-mêmes sont généralement exportés depuis Grafana (via l'option 'Share' > 'Export' > 'Save to file') et placés dans les répertoires spécifiés (ex: /var/lib/grafana/dashboards/mes-applications).
4. Provisioning des Notificateurs (Alert Notifiers)
Automatisez la configuration de vos canaux d'alerte pour une gestion centralisée.
Utilité et structure du fichier de configuration
Le provisioning des notificateurs permet de définir vos canaux d'alerte (Slack, Email, PagerDuty, Webhook, etc.) via des fichiers YAML, situés généralement dans /etc/grafana/provisioning/notifiers. Cela garantit que vos alertes sont toujours envoyées aux bonnes destinations, même après un redéploiement de Grafana.
Chaque notificateur est configuré avec un type, un nom, et des paramètres spécifiques (URL de webhook, adresses email, tokens d'API).
Exemples de configuration YAML
Voici un exemple pour un notificateur Slack et un notificateur Email :
# /etc/grafana/provisioning/notifiers/notifiers.yaml
apiVersion: 1
notifiers:
- name: 'Slack Alerts'
type: slack
uid: slack_notifier
orgId: 1
isDefault: false
settings:
url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
recipient: '#general-alerts'
uploadImage: true
- name: 'Email Alerts'
type: email
uid: email_notifier
orgId: 1
isDefault: false
settings:
addresses: 'admin@example.com;ops@example.com'
singleEmail: false
Comme pour les sources de données, les informations sensibles (comme les URLs de webhook) peuvent être gérées via des variables d'environnement ou des secrets pour une meilleure sécurité.
5. Autres types de Provisioning et Bonnes Pratiques
Élargir le champ d'application du provisioning et adopter les meilleures pratiques.
Provisioning des Plugins et Utilisateurs/Équipes
Grafana permet également de provisionner d'autres types de ressources :
- Plugins : Bien que la plupart des plugins soient installés via la CLI de Grafana ou Docker, leur configuration peut parfois être gérée via des fichiers.
- Utilisateurs et Équipes : Pour les installations non intégrées à un LDAP ou OAuth, il est possible de provisionner des utilisateurs et des équipes, ainsi que leurs rôles et permissions, via des fichiers YAML. Cela est particulièrement utile pour les environnements de petite taille ou pour des utilisateurs de service.
Ces options étendent encore la capacité de gérer l'intégralité de votre instance Grafana de manière déclarative.
Bonnes pratiques pour un Provisioning efficace
- Versionnez tout : Stockez tous vos fichiers de provisioning dans un dépôt Git.
- Utilisez des secrets : Ne mettez jamais d'informations sensibles (mots de passe, clés API) directement dans les fichiers de configuration. Utilisez des variables d'environnement, des secrets Kubernetes, ou un coffre-fort de secrets (Vault).
- Intégrez au CI/CD : Automatisez le déploiement de vos configurations Grafana à chaque changement de code ou de déploiement d'application.
- Testez vos configurations : Validez vos fichiers YAML avant de les déployer en production.
- Documentation : Documentez clairement la structure de vos fichiers de provisioning et les conventions de nommage utilisées.