Aller au contenu

Grafana Dashboard Validator · Observability

Trouvez les pièges d’import avant la mise en ligne du dashboard.

22 règles sur une véritable analyse de votre JSON : la variable de template que rien ne déclare, le placeholder ${DS_PROMETHEUS} que le provisioning ne résoudra jamais, le panneau AngularJS que Grafana 12 a retiré, le panneau sans type qui dessine une boîte vide. Chaque résultat nomme le chemin JSON où il se trouve — et rien de ce que vous collez ne quitte l’onglet.

S’exécute dans votre navigateur — rien de ce que vous collez ne quitte cette page. Comment nous le prouvons

Tourne dans votre navigateur 22 règles grafana-12 / schemaVersion 41 Sans inscription Mis à jour le 31 juil. 2026

Playground du Grafana Dashboard Validator

Examples

The uid is the stable identifier you choose and keep in git; the id is a row number belonging to one Grafana database, and it should be null in any file you commit. schemaVersion records which of Grafana's own dashboard-format migrations have already been applied to the JSON.

Rules pinned to grafana-12 / schemaVersion 41 — every version-sensitive finding is phrased as a range, never as one exact release.

dashboard.json input

Results update as you type — press Enter to run now.

Press Esc to release keyboard focus from the editor; /Ctrl + Enter lints and leaves the editor. Dashboards are too large for a shareable link, so use Save snapshot instead — it stays in this browser. Nothing you paste is uploaded.

Findings

Paste a Grafana dashboard JSON above — or tap an example — to see every finding here, with the JSON path it lives at and the fix.

Le manque

Un dashboard qui s’importe n’est pas un dashboard qui fonctionne.

Grafana est indulgent de la pire manière possible. Une variable non déclarée n’est pas une erreur : la requête s’exécute simplement avec $env dedans, le panneau est donc vide, ou correspond à bien plus de séries que voulu et se retrouve rempli et faux. Un panneau sans type dessine une boîte blanche. Un repeat sur une variable inexistante affiche exactement un panneau et a l’air terminé. Rien dans l’interface ne s’y oppose.

Et un dashboard est le seul artefact que personne ne peut relire. Un diff JSON de quatre mille lignes où les valeurs de gridPos ont bougé, où les ids ont été renumérotés et où l’interface a réécrit fieldConfig n’est pas un diff qu’un humain lit : c’est un diff qu’un humain approuve. Les défauts qui survivent à la relecture sont ceux qui ressemblent à toutes les autres lignes du fichier.

Demandez un dashboard à un assistant et vous héritez de la même classe de bug avec plus d’assurance par-dessus. Les dashboards générés sont fluides : titres de panneaux plausibles, PromQL plausible, un bloc templating — et des requêtes qui référencent des variables que ce bloc ne déclare jamais, une schemaVersion tirée du souvenir d’un Grafana plus ancien, et des types de panneaux retirés depuis deux versions majeures. Vérifier l’affirmation prend quelques secondes. Savoir quoi vérifier est la partie difficile, et c’est celle que fait cet outil : chaque règle figure sur cette page, et tout ce qu’il refuse de signaler aussi.

Vous relisez aussi les requêtes ? PromQL Explainer décompose une requête en langage clair, et Alertmanager Route Tester prouve où atterrissent vraiment les alertes que ces panneaux surveillent.

Le pipeline

Comment ça marche.

Quatre étapes, toutes dans votre onglet, rejouées à chaque frappe.

  1. Analyser, et dire ce que cela a coûté.

    D’abord du JSON strict. Puis une marque d’ordre des octets, des `// commentaires`, des virgules finales, un wrapper d’API `{ dashboard: … }` ou un dashboard stocké comme chaîne échappée — chaque cas récupéré et chaque cas signalé, car l’API de Grafana n’est pas aussi indulgente.

  2. Aplatir toutes les mises en page de panneaux.

    Le `panels` de premier niveau, les enfants d’une ligne repliée, les frères qu’une ligne dépliée possède, et les `rows[]` d’avant schemaVersion 16 — le tout dans une seule liste où chaque panneau garde le chemin JSON dont il vient.

  3. Indexer les variables.

    Chaque chaîne du document est parcourue à la recherche de `$var`, `${var}`, `${var:format}` et `[[var]]`, puis confrontée à ce que déclare `templating.list` plus les variables intégrées de Grafana. Utilisées, inutilisées et non résolues sortent du même index.

  4. Exécuter 22 règles, puis signaler un chemin et un correctif.

    Chaque règle tourne dans son propre try/catch : une règle qui trébuche coûte une seule note au lieu des autres résultats. Chaque diagnostic nomme le chemin, la raison et la modification à faire — prêt à coller dans une relecture.

Référence

Variables, versions de schéma et les 22 règles.

Le jeu de règles est épinglé à grafana-12 / schemaVersion 41, et chaque résultat sensible à la version est formulé comme une plage plutôt que comme une version exacte. 7 règles sont des erreurs, 11 des avertissements et 4 des notes.

Les quatre syntaxes de variable

Les quatre se résolvent aujourd’hui, et deux choses qui ressemblent à des variables n’en sont pas. Le linter les lit toutes dans chaque chaîne du document : requêtes, titres, formats de légende, liens de panneau, requêtes d’annotation et requêtes d’autres variables.

Forme Depuis Ce qu’il faut savoir
$env Toujours Se termine au premier caractère qui n’est ni une lettre, ni un chiffre, ni un tiret bas : « $env-prod » est donc la variable env suivie du texte littéral « -prod ».
${env} Grafana 6 La forme actuelle. Sans ambiguïté à côté du texte qui l’entoure, et la seule qui puisse porter un format.
${env:regex} Grafana 6 Une interpolation formatée — regex, csv, json, pipe, glob et d’autres — et c’est ce qui rend sûre une variable multivaleur au sein d’une requête.
[[env]] Avant Grafana 6 Dépréciée. Se résout encore, ne peut pas porter de format. Signalée comme legacy-var-syntax.
$__rate_interval Grafana 7.2 Une variable intégrée, pas une des vôtres. Tout nom commençant par deux tirets bas est traité comme intégré et n’est jamais signalé.
${DS_PROMETHEUS} Pas une variable de template du tout : un placeholder d’import __inputs. Signalé comme unresolved-ds-input.

Jalons de schemaVersion

La colonne Grafana indique la plage de versions dans laquelle chaque migration est arrivée, pas une correspondance stricte : Grafana incrémente schemaVersion aussi au sein des versions mineures. Prenez ces lignes comme des repères, pas comme une table de correspondance.

schemaVersion Grafana Ce qui a changé
16 5.x Les panneaux sont sortis de « rows » vers un tableau « panels » de premier niveau, et gridPos a remplacé span. En dessous, tout ce qui concerne la mise en page est stocké autrement.
36 8.3–9.x La « datasource » d’un panneau est devenue une référence { type, uid } au lieu d’un nom. Cette migration est derrière la plupart des imports « ça marche sur mon instance ».
39 11.x Le schéma en vigueur sur la ligne Grafana 11, où les panneaux Angular ont été désactivés par défaut.
41 12.x Le schéma le plus récent que connaît ce linter. Toute valeur supérieure à 41 est signalée comme note, jamais comme erreur.

Le catalogue de règles

Une erreur signifie que Grafana fait autre chose que ce que dit le JSON ; un avertissement signifie qu’il charge et qu’il est faux ou non portable ; une note est bonne à savoir. Chaque résultat du playground renvoie à sa règle ici.

no-uid avertissement

Donnez un uid au dashboard

Sans uid, chaque import crée un NOUVEAU dashboard au lieu de mettre à jour celui qui existe déjà : le même fichier importé deux fois laisse donc deux copies, et tout lien enregistré pointe vers celui qui est désormais périmé. Grafana accepte jusqu’à 40 caractères parmi lettres, chiffres, tirets et tirets bas.

Fix "uid": "api-slo"

root-id-set avertissement

id doit valoir null dans un fichier committé

id est un numéro de ligne dans une seule base de données Grafana. Transporté vers une autre instance, soit l’import échoue, soit il atterrit sur un dashboard qui n’a rien à voir avec le vôtre. Grafana attribue toujours le sien.

Fix "id": null

empty-title avertissement

Donnez un titre au dashboard

Un title absent ou vide s’affiche comme « New dashboard » : introuvable dans la recherche et impossible à distinguer de tous les autres tableaux créés par accident.

Fix "title": "API SLO"

duplicate-panel-id erreur

Les ids de panneau doivent être uniques

Grafana adresse les liens de panneau, les URL « View panel » et les repeats par l’id du panneau. Deux panneaux partageant un id cassent les trois, et l’interface n’en dit rien : le second panneau cesse simplement d’être adressable.

Fix Renumérotez l’un des deux ; les ids ne doivent être uniques qu’à l’intérieur de ce dashboard

duplicate-variable erreur

Les noms de variable doivent être uniques

Deux entrées de templating.list portant le même name : Grafana garde la dernière et abandonne la première en silence. Le type, la requête et la valeur par défaut de la variable sont donc ceux que la seconde déclaration a fixés par hasard.

Fix Renommez ou supprimez l’une des deux

schema-version-old avertissement erreur en dessous de 16

Réexportez une schemaVersion ancienne

schemaVersion enregistre les migrations de format de Grafana par lesquelles le JSON est déjà passé. En dessous de 36, la datasource d’un panneau est encore un nom ; en dessous de 16, les panneaux vivent encore dans rows. Grafana migre au chargement, mais le fichier de votre dépôt ne se migre pas tout seul : relire ce fichier, c’est donc relire quelque chose que Grafana n’affichera jamais.

Fix Ouvrez-le dans Grafana 9 ou plus récent et réexportez

schema-version-unknown note

Une schemaVersion que ce linter ne connaît pas

Plus récente que la 41 épinglée, absente, ou écrite comme chaîne au lieu d’un nombre. Signalée comme note et jamais comme erreur : un schéma inconnu est une limite de ce linter, pas un défaut de votre dashboard.

Fix Rien à changer — la note marque les résultats ci-dessous comme indicatifs

undefined-variable erreur avertissement dans une regex

Toute $variable doit être déclarée

Une référence que rien ne déclare reste dans la requête sous forme de texte littéral : la requête s’exécute avec « $env » dedans et le panneau ne renvoie rien — ou, pire, renvoie quelque chose de plausible. Les variables intégrées de Grafana ($__rate_interval, $__from, $__range et les autres) sont connues et jamais signalées, ni $1, qui est une rétro-référence de regex.

Fix Ajoutez-la sous templating.list, ou corrigez l’orthographe

unused-variable note

Une variable que personne ne lit

Déclarée mais jamais référencée par un panneau, une requête, un titre, un lien ou une annotation. Inoffensive en soi — sauf qu’une variable de type « query » que personne ne lit exécute quand même sa requête à chaque chargement du dashboard.

Fix Supprimez-la, ou utilisez-la

legacy-var-syntax avertissement

[[var]] est la forme d’avant Grafana 6

Elle se résout toujours, et elle est toujours dépréciée. C’est aussi la seule forme qui ne peut pas porter de format : une valeur qui doit devenir une alternative de regex ou une liste CSV doit donc être réécrite avant de pouvoir être formatée.

Fix "${env}", ou "${env:regex}" quand la requête a besoin d’un motif

datasource-by-name avertissement

Référencez les datasources par uid, pas par nom

Un nom ne se résout que si une datasource portant exactement ce nom existe sur l’instance cible. Cette seule différence sépare un dashboard qui s’importe d’un dashboard qui affiche « Datasource not found » sur le Grafana d’un collègue. La forme { type, uid } est ce que Grafana écrit depuis schemaVersion 36.

Fix "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }

unresolved-ds-input erreur

${DS_…} exige la boîte de dialogue d’import

« Export for sharing externally » remplace chaque datasource par un placeholder __inputs que seul Dashboards → Import renseigne. Si vous provisionnez ce même fichier, Grafana signale « Datasource ${DS_PROMETHEUS} not found » — et une référence ${DS_…} sans aucun bloc __inputs échoue de la même façon, même via la boîte de dialogue.

Fix Importez via la boîte de dialogue, ou substituez d’abord la vraie { type, uid }

empty-targets avertissement

Un panneau sans requête

Aucun targets du tout : le panneau s’affiche vide. Les types de panneau qui n’interrogent jamais — row, text, dashlist, news, alertlist, annolist — ne sont pas signalés, ni les library panels, dont les requêtes vivent dans la bibliothèque et non dans ce fichier.

Fix Ajoutez un target, ou supprimez le panneau

deprecated-panel-type avertissement

graph, singlestat et table-old

Grafana 9–12 les migre au chargement du dashboard, et c’est précisément pour cela qu’ils méritent d’être signalés : ce que vous relisez dans le JSON n’est pas ce que quiconque verra à l’écran. Réenregistrer depuis Grafana 9 ou plus récent inscrit la migration dans le fichier, et la relecture et l’affichage finissent par concorder.

Fix "type": "timeseries" / "stat" / "table"

angular-panel erreur

Plugins de panneau AngularJS

Le support d’Angular a été déprécié dans Grafana 9 et retiré au fil de Grafana 11–12. Contrairement aux types du cœur ci-dessus, un plugin n’a aucune migration automatique : le panneau ne se dégrade pas, il n’affiche rien.

Fix piechart pour grafana-piechart-panel, geomap pour grafana-worldmap-panel

repeat-undefined erreur

Un repeat sur rien

Un repeat qui nomme une variable inexistante produit un seul panneau et aucun message d’erreur. Une ligne censée se déployer sur chaque cluster en montre un en silence, et le dashboard a l’air terminé.

Fix Déclarez la variable, ou retirez « repeat »

time-range-absurd avertissement

Une plage par défaut dont personne ne veut

Plages de plus d’un an, plages à l’envers, plages de longueur nulle et expressions que Grafana ne sait pas analyser. Chaque panneau exécute la plage par défaut au moment où le dashboard s’ouvre, ce qui en fait l’erreur de performance la moins coûteuse à corriger du fichier.

Fix "time": { "from": "now-6h", "to": "now" }

refresh-aggressive avertissement

Un refresh sous dix secondes

En dessous de dix secondes, les requêtes s’empilent plus vite qu’elles ne se terminent, dans chaque onglet où le dashboard est ouvert, et la datasource paie pour toutes. Le min_refresh_interval de Grafana peut de toute façon vous passer devant : le JSON dit une chose et l’instance en fait une autre.

Fix "refresh": "1m"

override-suspect note

Un override qui n’applique rien

Un matcher byName sans valeur ne correspond à aucun champ ; un override dont le tableau properties est vide ne fixe rien. Grafana garde les deux dans le JSON et n’applique ni l’un ni l’autre : ils se lisent donc comme une configuration qui fait quelque chose.

Fix Donnez-lui quelque chose à cibler et quelque chose à fixer, ou supprimez-le

empty-row note

Une ligne sans panneaux

Une ligne repliée dont le tableau panels est vide reste invisible jusqu’à ce que quelqu’un la déplie et n’y trouve rien. Une ligne DÉPLIÉE n’est pas signalée lorsque ses panneaux la suivent comme frères : c’est ainsi que Grafana les stocke réellement, et le signaler déclencherait sur tous les dashboards modernes.

Fix Supprimez la ligne, ou déplacez des panneaux dedans

panel-no-type erreur

Un panneau sans type

Rien n’indique à Grafana quoi afficher : il dessine une boîte vide à la place du panneau. Un panneau sans type a généralement été édité à la main, mal fusionné, ou produit par un générateur. Les panneaux de bibliothèque sont la seule exception légitime : Grafana les enregistre sous la forme {id, title, gridPos, libraryPanel}, et cette règle les ignore.

Fix "type": "timeseries"

panel-zero-size avertissement

Un panneau qui n’occupe aucune place

Un gridPos de largeur ou de hauteur nulle est invisible. Un gridPos absent fait retomber Grafana sur une position par défaut, où les panneaux peuvent se superposer. La grille compte 24 colonnes.

Fix "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }

La clôture

Ce qu’il ne signale pas volontairement.

Chacun de ces points a été envisagé puis écarté, et la même liste figure en commentaire en tête du moteur. Un silence que l’on peut lire vaut mieux qu’une règle que l’on apprend à ignorer.

La validation complète du schéma

Ceci est un lint structurel, pas une vérification de schéma. Le schéma de dashboard de Grafana est vaste, versionné et encore mouvant ; une vérification partielle présentée comme une vérification de schéma serait un mensonge.

PromQL, LogQL et SQL dans targets

Un langage de requête mérite son propre outil. Le PromQL Explainer fait ce travail correctement, plutôt que de laisser cet outil analyser des expressions à moitié.

Tout ce qui nécessite votre Grafana

Savoir si un uid est pris, si un plugin est installé, si un dossier existe. Il n’y a pas de réseau ici : deviner reviendrait à inventer.

Les fautes de frappe dans les noms $__

Tout ce qui commence par deux tirets bas est traité comme une variable intégrée de Grafana, parce que Grafana en ajoute sans cesse. Appeler « non définie » la variable intégrée de l’an prochain serait pire que de laisser passer une faute de frappe.

Les panneaux sans titre

Les panneaux de texte et les tuiles à valeur unique sont légitimement sans titre. Seul le titre du DASHBOARD est obligatoire.

Les chevauchements de gridPos et la géométrie de la mise en page

Grafana réagence la grille au chargement du dashboard : un chevauchement dans le JSON n’est pas un chevauchement à l’écran.

La taille des panneaux dans les rows[] héritées

Les mises en page antérieures à schemaVersion 16 utilisaient span, pas gridPos. Y signaler un gridPos absent déclencherait sur chaque panneau d’un dashboard dont le vrai problème est déjà une erreur.

Un refresh que ce linter ne sait pas analyser

Deviner ce que vaut « 1m30s » revient à deviner, et le résultat porterait sur la supposition plutôt que sur le dashboard.

Les champs dépréciés dans les options de panneau

Ils diffèrent d’un plugin à l’autre, changent à chaque version et sont migrés par Grafana au chargement. Une règle à leur sujet serait périmée en une version mineure.

Limites, énoncées plutôt que cachées : le linter lit jusqu’à 5 000 000 caractères, conserve au plus 50 résultats par règle et 400 au total, et indique le nombre réel dès qu’un plafond s’applique.

Étape suivante

Collez le rapport dans la relecture.

« Copy report » vous donne l’exécution entière en texte brut : une ligne par résultat, avec le chemin JSON, l’identifiant de la règle et le correctif, et la version épinglée des règles en tête pour que personne n’ait à deviner ce qui l’a vérifié. Puis continuez : lisez les requêtes que ces panneaux exécutent, et prouvez que les alertes qu’ils surveillent atteignent quelqu’un.

report.txt
Grafana Dashboard Validator — 7 errors, 12 warnings, 3 notes
  — variables: 2 defined, 2 unresolved, schemaVersion 27
Rules: grafana-12 / schemaVersion 41

ERRORS (7)
  error duplicate-panel-id (panels[1].id): Panel id 1 is
    already used by "Requests" (panels[0]).
  error undefined-variable (panels[2].targets[0].expr):
    "$cluster" is used here, but no template variable named
    "cluster" is defined and it is not a Grafana built-in.

FAQ

Vos questions, nos réponses.

Appuyez sur une question pour afficher la réponse.

22 règles sur une véritable analyse du dashboard : 7 erreurs, 11 avertissements et 4 notes. Les erreurs sont celles qui changent ce que fait Grafana — une variable de template que rien ne déclare, un placeholder ${DS_…} sans bloc __inputs, un panneau AngularJS qui n’affiche rien sur Grafana 11–12, deux panneaux partageant un id, un repeat sur une variable inexistante, un panneau sans type, et une schemaVersion si ancienne que le JSON et l’affichage sont deux dashboards différents. Les avertissements sont les problèmes de portabilité et de relecture : un uid absent, un id de base de données laissé dans un fichier committé, une datasource référencée par nom, un panneau graph ou singlestat déprécié, un panneau invisible de largeur nulle, une plage de temps par défaut de plus d’un an, un refresh sous dix secondes. Chaque règle a sa propre sous-section sur cette page, et les puces de règle du playground y renvoient directement.

Non. Le parseur et toutes les règles sont du JavaScript exécuté dans votre onglet — pas de serveur, pas d’appel d’API, pas de journalisation, donc 0 octet envoyé. Cela compte plus ici que pour la plupart des outils : le JSON d’un dashboard est une carte de votre parc interne. Noms de métriques, uids de datasources, noms d’hôtes dans les formats de légende, noms de service dans les requêtes de variables, parfois une URL interne dans un lien de panneau. C’est exactement le fichier qu’il ne faut pas coller dans un formateur en ligne quelconque.

Non, et l’outil le dit plutôt que de le laisser croire. Le schéma de dashboard de Grafana est vaste, versionné et encore mouvant : une vérification partielle présentée comme une vérification de schéma serait pire que pas de vérification du tout. Ce qui est fait ici est un lint structurel : il lit les formes qui cassent les imports et les relectures — variables, références de datasource, types de panneau, ids, mise en page, temps et refresh — et nomme le chemin JSON de chaque résultat. Il n’analyse pas PromQL, ne connaît pas vos plugins et ne parle à aucun Grafana. La liste complète de ce qu’il passe volontairement sous silence est plus haut, dans « Ce qu’il ne signale pas volontairement ».

Parce que le fichier a été produit par « Export for sharing externally ». Cet export remplace chaque référence de datasource par un placeholder — ${DS_PROMETHEUS} — et ajoute un bloc « __inputs » décrivant ce dont chaque placeholder a besoin. Seule la boîte de dialogue Dashboards → Import lit ce bloc et vous demande de choisir une vraie datasource. Provisionner le même fichier, le POSTer à l’API ou le déposer dans un dossier synchronisé par Git contourne complètement la boîte de dialogue : le placeholder survit dans le dashboard enregistré et tous les panneaux échouent à le résoudre. Soit vous importez via la boîte de dialogue, soit vous substituez la vraie { type, uid } avant de provisionner. Ce linter signale le placeholder comme une erreur dans les deux cas, parce que le fichier n’est pas provisionnable en l’état.

Le uid est l’identifiant que vous choisissez. Il fait partie de l’URL du dashboard, c’est lui que le provisioning et l’API adressent, et il doit vivre dans le contrôle de version à côté du JSON. Le id est un numéro de ligne dans la base de données d’une seule instance Grafana : ailleurs, il ne signifie rien. Un fichier avec uid met à jour le même dashboard à chaque import ; un fichier sans uid crée une nouvelle copie à chaque fois. Un fichier avec un id périmé échoue à l’import ou cible un dashboard qui n’a rien à voir avec le vôtre : c’est pourquoi un export devrait porter « id » : null.

Les panneaux du cœur graph, singlestat et table-old sont migrés automatiquement au chargement du dashboard : ils continuent donc de fonctionner — mais le JSON de votre dépôt n’est pas migré, ce qui veut dire que le fichier que vous relisez et le panneau que Grafana affiche sont deux choses différentes. Réenregistrez le dashboard depuis Grafana 9 ou plus récent pour inscrire la migration dans le fichier. Les PLUGINS de panneau AngularJS sont une autre histoire : grafana-piechart-panel, grafana-worldmap-panel et les autres n’ont aucune migration automatique, et le support d’Angular a été déprécié dans Grafana 9 puis retiré au fil de Grafana 11–12. Ces panneaux n’affichent rien et doivent être remplacés à la main.

Le jeu de règles est épinglé à grafana-12 / schemaVersion 41, imprimé sur cette page et sur chaque rapport copié, pour qu’un rapport ne soit jamais ambigu sur ce qui l’a vérifié. Les règles sensibles à la version sont formulées comme des plages — « Grafana 9–12 », « retiré au fil de Grafana 11–12 » — plutôt que comme une version exacte, parce que votre instance se situe près de ce point et non exactement dessus. Si la schemaVersion de votre dashboard dépasse 41, vous recevez une NOTE qui le dit et les résultats propres au schéma sont marqués comme indicatifs. Un schéma inconnu est une limite de ce linter, pas un défaut de votre dashboard : il n’est donc jamais signalé comme une erreur.

Parce que Grafana n’échoue pas : il n’interpole rien et exécute la requête avec le texte littéral dedans. Un sélecteur PromQL {env="$env"} ne correspond à aucune série, le panneau est donc vide ; un sélecteur avec correspondance par regex peut correspondre à BIEN PLUS de séries que voulu, le panneau est donc rempli et faux. Aucun des deux cas ne produit de message où que ce soit dans l’interface. La seule exception que fait ce linter concerne une référence à l’intérieur d’une chaîne qui ressemble à une expression régulière, où « $ » est aussi une ancre de fin de ligne : là, le résultat descend à un avertissement, parce que le « $env » que vous avez écrit peut réellement avoir été une ancre suivie de texte.

Jusqu’à 5 000 000 caractères, ce qui couvre un dashboard généré de plusieurs milliers de panneaux ; un dashboard de 500 panneaux est analysé en quelques millisecondes. Au-delà, il refuse avec un message plutôt que de figer votre onglet, parce qu’une entrée de cette taille est un journal ou une archive, pas un dashboard. Les résultats sont plafonnés aussi : 50 par règle et 400 au total, et le panneau indique le plafond et le nombre réel dès que l’un s’applique — une liste tronquée qui ne dirait pas qu’elle est tronquée serait exactement le genre d’erreur silencieuse que cet outil existe pour attraper.

More free, private DevOps tools.

Le Grafana Dashboard Validator est l’un des outils de OpsCanopy — une canopée grandissante de validateurs, convertisseurs et testeurs qui tournent dans le navigateur et ne touchent jamais un serveur.

39 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Associé : PromQL Explainer pour les requêtes à l’intérieur des panneaux, Alertmanager Route Tester pour savoir où atterrissent les alertes d’à côté, le Prometheus Relabel Tester pour les labels sur lesquels vos variables filtrent, et le convertisseur JSON ↔ YAML quand le fichier de provisioning autour du dashboard doit être remanié — ou parcourez l’intégralité du répertoire des outils.

Sans affiliation avec Grafana Labs, ni approbation ni parrainage de leur part. « Grafana » est une marque de Raintank, Inc. dba Grafana Labs, utilisée ici uniquement pour décrire ce que lit cet outil. Fourni tel quel ; confirmez toujours un dashboard auprès du Grafana qui l’affichera. OpsCanopy est gratuit et ouvert.