Code : MO-PLT-024 | Version : 1.1 | Date : 26 juin 2026 | Auteur : C. Legrand
v1.0 — 13 juin 2026 : création initiale — méthode de vérification de compatibilité des métriques avant import, retour d'expérience sur les panneaux « N/A ».
Ce mode opératoire décrit l'ajout et la maintenance des dashboards Grafana : choisir un dashboard communautaire sur grafana.com, vérifier sa compatibilité avant import, l'importer hors-ligne par l'API, corriger une requête cassée et organiser l'ensemble (dossier, page d'accueil).
L'étape de vérification est le cœur du document. Un dashboard référence des noms de métriques figés au moment de sa publication ; or les exporteurs renomment des métriques au fil de leurs versions majeures. Le symptôme est trompeur : la collecte fonctionne, la cible est UP, mais les panneaux affichent « N/A ». Le cas s'est présenté sur cette infrastructure : le dashboard Windows historique (ID 14694) interrogeait les métriques windows_cs_*, supprimées par windows_exporter 0.31 — près de la moitié de ses requêtes ne correspondait plus à rien.
| Public concerné | Administrateurs de l'infrastructure BTS SIO |
| Application | Grafana OSS 13.0.1 — CT 200 docker-srv, https://grafana.docker.bts.sio |
| Source de données | Prometheus (datasource par défaut) |
| Compte | admin (coffre Vaultwarden, item « Grafana ») |
| Outils | navigateur, curl, grep, Python 3 |
| Durée | 20 à 30 minutes pour un import vérifié |
| Dashboard | Usage | Origine |
|---|---|---|
| Vue d'ensemble — Infrastructure BTS SIO | Page d'accueil : état des cibles, jauges CPU/RAM/disque par hôte, tendances, conteneurs, alertes | local (bts-overview) |
| Windows Exporter Dashboard 2025 | Détail DC1/DC2 (compatible windows_exporter 0.31+) | grafana.com #23942 |
| cAdvisor exporter — Docker containers Overview | Détail des conteneurs Docker du CT 200 | grafana.com #21743 |
| Node Exporter Full | Détail des serveurs Linux supervisés | grafana.com #1860 |
Tous sont rangés dans le dossier Infrastructure BTS SIO ; la vue d'ensemble est le tableau de bord d'accueil de l'organisation.
Un dashboard communautaire ne connaît pas la source de données locale : son JSON contient une variable d'entrée (DS_PROMETHEUS) à lier au moment de l'import — avec l'UID de la datasource par l'API, ou via le menu déroulant en passant par l'interface.
label_values() portant sur une métrique absente — tout le dashboard paraît vide.Contrainte hors-ligne : le CT 200 n'a pas d'accès Internet, le bouton « Import via grafana.com » ne fonctionne pas. Le JSON est téléchargé sur le poste d'administration, puis poussé par l'API ou collé dans l'interface.
admin de Grafana (coffre Vaultwarden, item « Grafana »)curl -su admin:*** http://127.0.0.1:3000/api/datasources (champ uid)Filtrer par source de données Prometheus et rechercher le nom de l'exporteur. Trois critères : date de mise à jour (un dashboard maintenu suit les renommages), version d'exporteur annoncée (« v0.31+ compatible »), et popularité — en gardant à l'esprit qu'un grand nombre de téléchargements ne garantit pas la compatibilité : les plus téléchargés sont souvent les plus anciens.
curl -sL -o dashboard.json \
"https://grafana.com/api/dashboards/23942/revisions/latest/download"
Extraire les noms de métriques référencés par le dashboard, puis les confronter aux métriques réellement présentes dans Prometheus. Depuis le CT 200 :
# 1. Métriques disponibles dans Prometheus
curl -s "http://127.0.0.1:9090/api/v1/label/__name__/values" \
| python3 -c "import json,sys; print('\n'.join(json.load(sys.stdin)['data']))" \
> metriques_disponibles.txt
# 2. Métriques référencées par le dashboard
grep -oE '(windows|node|container)_[a-z0-9_]+' dashboard.json \
| sort -u > metriques_dashboard.txt
# 3. Croisement : ce qui manque
comm -23 metriques_dashboard.txt <(sort metriques_disponibles.txt)

Interpréter le résultat : liste vide ou presque → compatible. Une ou deux manquantes → importable puis corriger les panneaux concernés. Une longue liste (des familles entières comme
windows_cs_*) → chercher un dashboard plus récent plutôt que rapiécer.
import json, urllib.request, base64
dash = json.load(open("/tmp/dashboard.json"))
payload = {
"dashboard": dash, "overwrite": True, "folderUid": "infra-bts",
"inputs": [{"name": "DS_PROMETHEUS", "type": "datasource",
"pluginId": "prometheus", "value": "cfiayvlqqhwcgc"}]
}
req = urllib.request.Request(
"http://127.0.0.1:3000/api/dashboards/import",
data=json.dumps(payload).encode(),
headers={"Content-Type": "application/json",
"Authorization": "Basic " + base64.b64encode(b"admin:***").decode()})
print(json.load(urllib.request.urlopen(req)))
La réponse contient importedUrl, le chemin du dashboard créé.

Variante graphique : menu Dashboards → New → Import, coller le JSON, choisir dossier et datasource, puis Import. L'API reste préférable pour la reproductibilité.
Pour une métrique manquante isolée, ouvrir le panneau (Edit), remplacer l'ancien nom par l'équivalent actuel, puis Save dashboard. Exemple réel rencontré sur le dashboard Windows 2025 :
# Panneau « Uptime » — métrique supprimée en 0.31 :
time() - windows_system_system_up_time{...}
# Équivalent actuel (même sémantique, timestamp de boot) :
time() - windows_system_boot_time_timestamp{...}
La correspondance ancien → nouveau nom se trouve dans le CHANGELOG de l'exporteur. Pour corriger avant import, le remplacement peut aussi se faire dans le JSON (sed).

Conserver les dashboards d'infrastructure dans le dossier Infrastructure BTS SIO. Pour le tableau de bord d'accueil : Administration → Default preferences → Home Dashboard, ou par l'API :
curl -X PUT http://127.0.0.1:3000/api/org/preferences \
-H "Content-Type: application/json" -u admin:*** \
-d '{"homeDashboardUID": "bts-overview"}'

Depuis le dashboard : Dashboard settings → Delete dashboard. Par l'API :
curl -X DELETE -u admin:*** http://127.0.0.1:3000/api/dashboards/uid/<uid>
La suppression n'affecte ni la collecte ni les autres dashboards. En cas de remplacement, supprimer l'ancien après avoir validé le nouveau.
| Problème | Solution |
|---|---|
| Tous les panneaux sont vides | Datasource non liée, ou variables de gabarit vides. Contrôler Dashboard settings → Variables. |
| Quelques panneaux « N/A », le reste fonctionne | Métriques renommées/supprimées. Rejouer le croisement de l'étape 2, corriger les requêtes. |
| « A dashboard with the same UID already exists » | Réimport : ajouter "overwrite": true, ou supprimer l'ancien. |
| Panneaux d'E/S disque des conteneurs vides | Limite connue : avec le pilote containerd snapshotter du CT 200, cAdvisor n'expose pas container_fs_*. CPU, mémoire et réseau ne sont pas affectés. |
| « Import via grafana.com » échoue | Comportement attendu (pas d'accès Internet). Suivre la voie hors-ligne. |