Grafana: PNG Export von Graphen via HTTP API

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Grafana läuft eigentlich als reine Java Script Anwendung im Browser. Für die Tor Relay Traffic Übersicht wollte ich aber alle 30 Minuten einen 6 Stunden Graph in ein PNG exportieren und auf meiner Webseite automatisch veröffentlichen ohne jedem Zugriff auf mein Grafana zu geben.

Seit Version 2.0 bietet Grafana auch eine Render API, die genau dieses Vorhaben ermöglicht. Ich nutze dafür nur die HTTP API von Grafana und cURL.

Grafana API Key erzeugen

Als erstes benötigt man einen API Key. Dazu öffnet man in seinem Grafana und sucht im linken Menü nach seiner Organisation (bei mir ist das die Standardorganisation „Main Org.“) und klickt auf „API Keys“.

grafana_api_key_menu_position

Danach fügt man einfach sein neuen Benutzer hinzu, der nur die Rechte „Viewer“ hat. Das bedeutet, dass dieser API User nur anzeigen, jedoch nichts verändern kann. In meinem Fall ist das nun „render2“, da der Benutzer „render“ schon in Benutzung ist.

grafana_add_key2

 

Nach dem Klick auf „Add“ wird in einem neuen Fenster der API Key angezeigt und gleichzeitig noch einen Tipp für den cURL Aufruf. In meinem Fall habe ich den API

eyeyJrIjoiZkoydWNDRTNyeGFRNlhSVkdDdFJ4MTJMSTFGU2FWQ1YiLCJuIjoicmVuZGVyMiIsImlkIjoxfQ==

Diesen muss ich mir speichern. Sollte dieser Key verloren gehen kann man ihn sich nicht so einfach wieder anzeigen lassen. Wie der Name des Keys war muss man sich nicht merken, da dieser später nicht mehr gebraucht wird.

grafana_add_key_success

 

URL des Graphen basteln

Um nun einen speziellen Graphen zu extrahieren muss min sich zuerst den entsprechenden Link zusammenbasteln.

Dazu wählt man den Graphen in einem Dashboard aus und klickt auf „Share“.

grafana_share_graph

 

Ein neues Fenster geht auf. Ganz unten gibt es einen Link mit dem Namen „Direct link rendered image“. Wichtig: Es ist nicht der Link in der Text Box! Den Link darunter kopiert man sich zum Beispiel mit einem Rechtsklick -> „Link Adresse kopieren“ in die Zwischenablage.

grafana_direct_export

 

Den Link fügt man danach in einem Texteditor ein, da man diesen zuerst noch bearbeiten muss. Mein Link sieht zum Beispiel so aus:

https://grafana.veloc1ty.lan/render/dashboard-solo/db/mineralwasser?panelId=9&fullscreen&from=1453978862806&to=1453982462806&width=1000&height=500

Anhand der Parameter kann man das Verhalten des Graphen vor dem Rendern steuern. Die Parameter kurz erklärt:

Wenn ich also nun den Graphen der letzten 6 Stunden haben will und ein Full HD (1920 x 1080 Pixel) Bild gerendert haben will muss mein Link so aussehen:

https://grafana.veloc1ty.lan/render/dashboard-solo/db/mineralwasser?panelId=9&fullscreen&from=now-6h&to=now&width=1920&height=1080

Diesen Link kann man nun cURL vorwerfen.

Graph rendern mit cURL

Die Grafana API nutzt das OAuth 2.0 Bearer Verfahren für die Authentifizierung via API Key. Das heißt, dass im HTTP Request der Header „Authorization: Bearer derAPIkey“ vorhanden sein muss. Wichtig: Der String „Bearer“ ist fix und ist nicht der Name des Keys, der im Schritt 1 angegeben wurde!

Der Aufbau ist wie folgt:

curl -s -k -H "Authorization: Bearer derAPIkey" "zusammengebastelteURL" > dasGerenderteBild.png

Ein cURL Aufruf sieht zum Beispiel so aus:

curl -s -k -H "Authorization: Bearer eyeyJrIjoiZkoydWNDRTNyeGFRNlhSVkdDdFJ4MTJMSTFGU2FWQ1YiLCJuIjoicmVuZGVyMiIsImlkIjoxfQ==" "https://grafana.veloc1ty.lan/render/dashboard-solo/db/mineralwasser?panelId=9&fullscreen&from=now-6h&to=now&width=1920&height=1080" > result.png

Der Aufruf erklärt:

Das ist auch schon die ganze Magie.

Further Reading


Du hast einen Kommentar, einen Wunsch oder eine Verbeserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück