Dashboards als Code: Foundation SDK, Git Sync und die gcx-CLI
Erzeuge Dashboards aus typisiertem Code und synchronisiere sie von Grafana selbst mit einem Git-Repository.
Dashboard-JSON von Hand zu schreiben skaliert nicht, und der Export aus der UI lässt die UI als eigentliche Quelle zurück. Grafanas Observability-as-Code-Werkzeuge adressieren beides: Das Foundation SDK erzeugt Dashboards aus typisiertem Code, Git Sync lässt Grafana Dashboards in einem Git-Repository lesen und schreiben, und die gcx-CLI pusht und pullt Ressourcen vom Terminal. Mehrere dieser Funktionen sind neu, und manche APIs sind als Alpha markiert, prüfe also die Dokumentation für deine Version.
Dashboards mit dem Foundation SDK erzeugen
Das Foundation SDK bietet Builder für Dashboards, Panels und Queries in Go, TypeScript, Python, PHP und Java. Du beschreibst ein Dashboard in einer typisierten Sprache, und der Aufruf von build() erzeugt das Dashboard-JSON. Weil es Code ist, bekommst du Prüfungen zur Compile-Zeit, Wiederverwendung (eine Funktion, die eine Standard-Service-Panel-Zeile baut) und normales Code-Review.
Installiere es für deine Sprache, zum Beispiel:
# Go
go get github.com/grafana/grafana-foundation-sdk/go@latest
# TypeScript
npm install @grafana/grafana-foundation-sdk
Python-, PHP- und Java-Pakete sind in der SDK-Dokumentation aufgeführt. Es zielt auf Grafana 10 und neuer.
Ein typischer Workflow:
- Schreibe ein kleines Programm, das die Dashboards definiert und das JSON jedes einzelnen nach
dashboards/<name>.jsonschreibt. - Führe es in CI aus.
- Committe das erzeugte JSON oder veröffentliche es als Build-Artefakt.
- Liefere das JSON mit dem Mechanismus aus, den du ohnehin nutzt: ein Provider-Ordner, eine ConfigMap, eine
GrafanaDashboard-Ressource, Terraform oder Git Sync.
# Skizze eines CI-Jobs
steps:
- run: npm ci
- run: npx tsx dashboards/generate.ts --out dashboards/generated
- run: git diff --exit-code dashboards/generated # schlägt fehl, wenn erzeugte Dateien veraltet sind
Die Prüfung mit git diff --exit-code stellt sicher, dass niemand erzeugtes JSON von Hand bearbeitet und dass Code und Ausgabe im Gleichschritt bleiben.
Git Sync
Git Sync lässt Grafana Dashboards als JSON in einem Git-Repository speichern. Änderungen fließen in beide Richtungen: Eine Bearbeitung in der Grafana-UI wird zu einem Commit oder Pull Request, und eine gemergte Änderung im Repository erscheint in Grafana. Grafana fragt das Repository standardmäßig alle 60 Sekunden ab, und ein Webhook lässt Updates nahezu sofort eintreffen. Git Sync ist in Grafana 13 über alle Editionen hinweg allgemein verfügbar. Es unterstützt GitHub (mit App-Authentifizierung), GitHub Enterprise, GitLab, Bitbucket und reines Git über einen Repository-Typ „Pure Git“.
Du kannst es komplett als Code mit einer Repository-Ressource konfigurieren. Erstelle repository.yaml:
apiVersion: provisioning.grafana.app/v0alpha1
kind: Repository
metadata:
name: my-repo
spec:
title: My Repository
type: github
github:
url: https://github.com/<org>/<repo>
branch: main
path: grafana/
sync:
enabled: true
intervalSeconds: 60
target: folder
workflows:
- write
- branch
secure:
token:
create: '<git-personal-access-token>'
Anmerkungen zu den Feldern:
typeistgithub,githubEnterprise,gitlab,bitbucketodergit, und jeder hat seinen eigenen Block. Bitbucket und reines Git brauchen zusätzlich eintokenUser.pathist der Ordner im Repository, den Grafana besitzt.workflowssteuert, was Speichern in der UI tut:writecommittet direkt auf den Branch, undbranchöffnet einen Pull Request.sync.targetistfolder(der Standard) oderfolderless.secure.tokenträgt die Zugangsdaten, sodass sie als Secret gespeichert werden und nicht in der Spec. Statt eines Tokens kannst du eine Verbindung über eine GitHub App oder OAuth App mitspec.connection.namenutzen; dafür braucht es eine separateconnection.yaml.- Die API-Version ist
v0alpha1, Feldnamen können sich also zwischen Releases ändern.
Wende es mit gcx an (nächster Abschnitt) oder, wenn du magst, über die Grafana-UI.
Wofür Git Sync am besten ist: UI-Autoren und Git-first-Entwickler eine gemeinsame Quelle der Wahrheit teilen zu lassen, mit Pull-Request-Review für jede Änderung. Lies die Seite zu den Nutzungsbeschränkungen, bevor du es für eine große Instanz einführst, da das Provisionieren sehr vieler Dashboards Performance-Überlegungen mit sich bringt.
Die gcx-CLI
gcx ist Grafanas Kommandozeile für die Arbeit mit Ressourcen und, in Grafana Cloud, anderen Produkten. Sie funktioniert mit Grafana Cloud sowie Open-Source- oder Enterprise-Grafana 12 und neuer und ersetzt das frühere Werkzeug grafanactl (die Migration besteht größtenteils darin, den Befehl umzubenennen, und grafanactl resources serve wird zu gcx dev serve). Installiere sie aus dem Repository des Projekts und konfiguriere einen Kontext mit deiner Grafana-URL und deinem Token, wie in ihrer Dokumentation beschrieben.
Gängige Befehle:
# lokale Ressourcendateien nach Grafana pushen
gcx resources push --path ./resources
# auflisten, was existiert, oder eine Ressource untersuchen
gcx resources get repositories
gcx resources get repository/my-repo -o yaml
# bearbeiten oder löschen
gcx resources edit repository/my-repo
gcx resources delete repository/my-repo
# Dashboards bei der Entwicklung live in der Vorschau ansehen
gcx dev serve
Nutze sie in CI, um Ressourcendefinitionen aus dem Repository zu pushen, oder lokal beim Bau von Dashboards mit dem SDK.
Zwischen den Ansätzen wählen
| Situation | Greife zu |
|---|---|
| Viele ähnliche Dashboards oder wiederverwendbare Bausteine | Foundation SDK, mit jedem Mechanismus ausgeliefert |
| Autoren arbeiten in der UI, du willst aber Git als Aufzeichnung | Git Sync |
| Kubernetes-GitOps, ein Objekt pro Dashboard | Grafana Operator |
| Automatisierung der gesamten Plattform einschließlich Teams und Berechtigungen | Terraform |
| Ein Grafana, statische JSON-Dateien | Einfacher Provider-Ordner |
Sie lassen sich gut kombinieren: JSON mit dem SDK erzeugen, in ein Repository committen und Git Sync oder einen Provider-Ordner ausliefern lassen.
Prüfen
gcx resources get repositories
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD \
"http://localhost:3000/api/search?type=dash-db" | jq '.[] | {title, folderTitle}'
Bei Problemen mit der Repository-Synchronisierung prüfe den Status des Repositorys in Grafana (unter Administration, dann Provisioning) und das Grafana-Server-Log. Typische Probleme sind ein abgelaufenes Token, ein falscher Branch oder Pfad und ein Webhook, der Grafana nicht erreichen kann.
Beliebte Anleitungen
-
Grafana als Code betreiben: Das große Ganze Was in Dateien leben kann, was eine API braucht und wie die Teile zusammenpassen. -
Den Grafana-Server mit grafana.ini und Umgebungsvariablen konfigurieren Wisse, wo Konfigurationsdateien liegen, wie Überschreibungen geordnet sind und wie du Einstellungen in Git hältst. -
Dashboards aus JSON-Dateien provisionieren Lade Dashboards von der Platte, bilde Ordner aus Verzeichnissen ab und erstelle sie, ohne Änderungen zu verlieren. -
Alert-Regeln, Contact Points und Notification Policies provisionieren Definiere die gesamte Alerting-Pipeline in YAML, damit sie wie Code geprüft und versioniert wird. -
Grafana auf Kubernetes mit Helm und Provisioning-Values deployen Betreibe Grafana aus einem Helm-Chart, bei dem Datenquellen, Dashboards und Einstellungen alle aus Values-Dateien stammen. -
Provisioning von der Kommandozeile neu laden, prüfen und Fehler beheben Finde heraus, was Grafana geladen hat, lade ohne Neustart neu und behebe die üblichen Provisioning-Fehler.