RousselTMLEARNING

Observabilité

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

Bonnes pratiques Grafana : conception de dashboards lisibles, variables, dashboards as code, provisioning, dossiers et permissions, performances des requêtes, alerting, SSO, sauvegarde et mises à jour.

1. Concevoir des dashboards utiles #

Répondre à une question précise.

Principes #

Bonnes pratiques Grafana
Un dashboard qui n'aide à aucune décision doit être supprimé.
  • Une question par dashboard (« le service est-il en bonne santé ? »), du plus général (haut) au plus détaillé (bas).
  • Méthodes RED (services) et USE (ressources) pour structurer les panneaux.
  • Titres explicites, unités et seuils colorés, légendes lisibles ; pas plus de 20 panneaux par page.
  • Variables ($cluster, $namespace, $service) pour réutiliser un même dashboard.
# Variables chaînées (Dashboard settings > Variables)
label_values(up, cluster)                                  # $cluster
label_values(kube_pod_info{cluster="$cluster"}, namespace) # $namespace
# Requête de panneau
sum by (pod) (rate(container_cpu_usage_seconds_total{cluster="$cluster", namespace="$namespace"}[$__rate_interval]))

2. Dashboards et configuration as code #

Reproductible et versionné.

Provisioning #

# provisioning/dashboards/equipes.yml
apiVersion: 1
providers:
  - name: equipes
    orgId: 1
    folder: Équipes
    type: file
    disableDeletion: true
    allowUiUpdates: false             # l'interface ne peut plus diverger de Git
    options: { path: /var/lib/grafana/dashboards, foldersFromFilesStructure: true }
# Exporter / importer via l'API
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" https://grafana.exemple.fr/api/dashboards/uid/abc123 | jq '.dashboard' > dashboards/api.json
curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" -H 'Content-Type: application/json' \
  -d "{\"dashboard\": $(cat dashboards/api.json), \"overwrite\": true, \"folderUid\": \"equipes\"}" https://grafana.exemple.fr/api/dashboards/db
# Générer en code : grafonnet (Jsonnet), Grafana Foundation SDK ou Terraform
Bonne Pratique : Versionnez dashboards, sources de données, règles d'alerte et contact points dans Git : un déploiement de Grafana doit pouvoir être recréé de zéro.

3. Performances #

Des dashboards rapides.

Réduire la charge #

  • Rafraîchissement raisonnable (30 s – 1 min) ; évitez les plages de plusieurs mois sur des données brutes.
  • Utilisez des recording rules pour les requêtes lourdes et $__rate_interval pour les fenêtres.
  • Limitez la cardinalité affichée (topk) et le nombre de points (Max data points).
  • Mode Instant pour les panneaux Stat/Table, Range pour les séries.
# Panneaux lents : onglet Query inspector > Stats ; côté serveur
curl -s http://grafana:3000/metrics | grep -E 'grafana_api_dataproxy_request_all_milliseconds|grafana_alerting_rule_evaluation_duration'
# grafana.ini
[dashboards]
min_refresh_interval = 15s
[dataproxy]
timeout = 60
max_idle_connections = 100

4. Sécurité et exploitation #

Qui voit quoi, et comment durer.

Accès #

# grafana.ini : SSO OIDC et rôles par groupe
[auth.generic_oauth]
enabled = true
name = Entreprise
client_id = grafana
scopes = openid profile email groups
role_attribute_path = contains(groups[*], 'grafana-admins') && 'Admin' || contains(groups[*], 'sre') && 'Editor' || 'Viewer'
auto_login = false
[security]
admin_password = $__file{/run/secrets/admin_password}
disable_gravatar = true
cookie_secure = true
[users]
viewers_can_edit = false
  • Dossiers par équipe avec permissions Viewer par défaut et Editor limité.
  • Jetons de comptes de service à portée limitée et expiration, jamais de clés d'API personnelles dans la CI.
  • Désactivez l'inscription libre et l'accès anonyme en production.

Sauvegarde et mises à jour #

# Base SQLite : sauvegarde à chaud ; sinon PostgreSQL avec pg_dump
sqlite3 /var/lib/grafana/grafana.db ".backup '/backup/grafana-$(date +%F).db'"
docker run --rm grafana/grafana:11.2.0 grafana --version
# Tester la montée de version sur une copie avant la production
grafana-cli plugins ls && grafana-cli plugins update-all
Erreur Courante : Une mise à jour majeure sans test peut casser des plugins et des panneaux. Lisez les notes de version, testez sur une instance de recette avec une copie de la base.

Schéma de référence et vérification rapide #

Visualiser le principe et le contrôler en ligne de commande.

Schéma de référence #

Dashboards as code
Les modifications manuelles en production sont désactivées.
grafana-cli admin data-migration encrypt-datasource-passwords
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" https://grafana.exemple.fr/api/health

Articles liés

Grafana : maîtriser les requêtes (PromQL, LogQL, SQL et expressions)

Construire des requêtes efficaces dans Grafana : éditeur de requêtes, Query Inspector, PromQL, LogQL, SQL, Mi…

Grafana Cloud : démarrer avec la plateforme managée (Mimir, Loki, Tempo, Alloy)

Découvrir Grafana Cloud : création d'une stack, offre gratuite, envoi de métriques, logs et traces avec Alloy…

Grafana Assistant : L'IA au service de l'observabilité

Découvrez Grafana Assistant, l'intelligence artificielle intégrée à Grafana Cloud. Apprenez comment cet outil…

Pour aller plus loin