Ein Grafana-Backend-Plugin, das das Rendern von Panels und Dashboards in PNGs mithilfe eines Headless-Browsers (Chromium) übernimmt.
Dieses Plugin ist in einer einzigen ausführbaren Datei mit Node.js-Laufzeit und Chromium-Browser verpackt. Das bedeutet, dass Node.js und Chromium nicht auf Ihrem System installiert sein müssen, damit das Plugin funktioniert.
Allerdings ist der Chromium-Browser auf bestimmte Bibliotheken angewiesen. Wenn nicht alle dieser Bibliotheken auf Ihrem System installiert sind, werden beim Rendern eines Bildes möglicherweise Fehler angezeigt. Weitere Informationen, einschließlich Hilfe zur Fehlerbehebung, finden Sie in der Dokumentation zum Grafana Image Rendering.
Das Rendern von Bildern erfordert viel Speicher, vor allem weil Grafana im Hintergrund Browserinstanzen für das eigentliche Rendern erstellt. Wir empfehlen mindestens 16 GB freien Speicher auf dem System zum Rendern von Bildern.
Das parallele Rendern mehrerer Bilder erfordert einen noch größeren Speicherbedarf. Sie können den Remote-Rendering-Dienst verwenden, um Bilder auf einem Remote-System zu rendern, sodass Ihre lokalen Systemressourcen nicht beeinträchtigt werden.
Sie können das Plugin mit der Grafana-CLI (empfohlene Methode) oder mit dem Grafana-Docker-Image installieren.
grafana-cli plugins install grafana-image-renderer
Dieses Plugin ist nicht mit dem aktuellen Grafana Docker-Image kompatibel und erfordert zusätzliche Abhängigkeiten auf Systemebene. Wir empfehlen, einen anderen Docker-Container für das Rendering einzurichten und stattdessen Remote-Rendering zu verwenden. Anweisungen finden Sie unter „In Docker ausführen“.
Wenn Sie das Plugin dennoch mit dem Grafana Docker-Image installieren möchten, lesen Sie die Anweisungen zum Erstellen eines benutzerdefinierten Grafana-Images in der Grafana Docker-Dokumentation.
Hinweis: Erfordert eine Internetverbindung.
Sie können dieses Plugin als Remote-HTTP-Rendering-Dienst ausführen. In diesem Setup rendert Grafana ein Bild, indem es eine HTTP-Anfrage an den Remote-Rendering-Dienst sendet, der wiederum das Bild rendert und es in der HTTP-Antwort an Grafana zurückgibt.
Sie können den Remote-HTTP-Rendering-Dienst mit Docker oder als eigenständige Node.js-Anwendung ausführen.
Grafana Docker-Bilder werden im Docker Hub veröffentlicht.
Das folgende Beispiel zeigt, wie Sie Grafana und den Remote-HTTP-Rendering-Dienst mithilfe von Docker Compose in zwei separaten Docker-Containern ausführen können.
Erstellen Sie eine docker-compose.yml
mit folgendem Inhalt:
version : ' 2 '
services :
grafana :
image : grafana/grafana:latest
ports :
- ' 3000:3000 '
environment :
GF_RENDERING_SERVER_URL : http://renderer:8081/render
GF_RENDERING_CALLBACK_URL : http://grafana:3000/
GF_LOG_FILTERS : rendering:debug
renderer :
image : grafana/grafana-image-renderer:latest
ports :
- 8081
Als nächstes führen Sie Docker Compose aus.
docker-compose up
Im folgenden Beispiel wird beschrieben, wie Sie den Remote-HTTP-Renderingdienst als eigenständige Node.js-Anwendung erstellen und ausführen und Grafana entsprechend konfigurieren.
Klonen Sie das Git-Repository des Grafana-Bildrenderer-Plugins.
Abhängigkeiten installieren und erstellen:
yarn install --pure-lockfile
yarn run build
Führen Sie den Server aus:
node build/app.js server --port=8081
Grafana-Konfiguration aktualisieren:
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
Starten Sie Grafana neu.
Der Zugriff auf die Rendering-Endpunkte ist auf Anfragen beschränkt, die ein Authentifizierungstoken bereitstellen. Dieses Token sollte in der Grafana-Konfigurationsdatei und der Renderer-Konfigurationsdatei konfiguriert werden. Dieses Token ist wichtig, wenn Sie das Plugin im Remote-Rendering-Modus ausführen, um eine unbefugte Offenlegung von Dateien zu verhindern (siehe CVE-2022-31176).
Informationen zum Konfigurieren dieses geheimen Tokens finden Sie in der Dokumentation zum Grafana Image Rendering. Der -
wird zu Beginn sowohl in Grafana als auch im Bildrenderer konfiguriert. Wir empfehlen Ihnen jedoch dringend, diesen auf einen sichereren Wert zu aktualisieren.
Informationen zu den verfügbaren Konfigurationseinstellungen finden Sie in der Dokumentation zum Grafana Image Rendering.
Hilfe zur Fehlerbehebung finden Sie in der Dokumentation zur Fehlerbehebung bei Grafana Image Rendering.
Um die automatisierten Image-Renderer-Testsuiten auszuführen, müssen Sie den folgenden Befehl im Stammordner ausführen:
yarn test
Dadurch wird eine Grafana-Instanz in Docker gestartet und anschließend die Testsuiten ausgeführt.
Hinweise:
Wenn einige erwartete Änderungen in den Referenzbilddateien (in /tests/testdata
) vorliegen, führen Sie yarn test-update
aus und übertragen Sie die aktualisierten Referenzen per Push.
Wenn die Tests fehlschlagen und Sie den Unterschied zwischen dem erhaltenen Bild und dem Referenzbild sehen möchten, führen Sie yarn test-diff
aus. Dadurch werden Bilder (genannt diff_
) generiert, die die Unterschiede im Ordner /tests/testdata
enthalten.
Wenn Tests in Ihrer lokalen Umgebung erfolgreich sind, in Drone jedoch fehlschlagen. Sie können diese Schritte ausführen, um die Tests in einer Umgebung ähnlich der Drone-Pipeline auszuführen. Dadurch werden Ihre lokalen Dateien des grafana-image-renderer
Repositorys im Docker-Image gemountet, sodass alle Änderungen, die im Docker-Image vorgenommen werden, in Ihrer lokalen Umgebung verfügbar sind. Dadurch können Sie yarn test-diff
und yarn test-update
in Docker ausführen und die Ergebnisse lokal anzeigen.
cd ./devenv/docker/drone
docker-compose up
drone-docker-puppeteer
-Container und führen Sie die folgenden Befehle aus: cd /drone/src
PUPPETEER_CACHE_DIR=/drone/src/cache yarn install --frozen-lockfile --no-progress
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci
Hinweise: Die Tests können im Docker-Container länger dauern. Wenn Zeitüberschreitungsprobleme auftreten, können Sie den Testbefehl mit der --testTimeout option
ausführen:
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci --testTimeout=10000