Grafana auf dem RaspberryPi 2

Diesen Beitrag schrieb ich 8 Jahre und 10 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Graphite bietet ein eigenes Webinterface; das wirkt auf mich jedoch ein wenig rustikal, und wirklich flexibel ist es auch nicht. Zur Darstellung möchte ich lieber Grafana verwenden, doch für den RaspberryPi gibt es, wen wundert’s, kein fertiges Paket. Handarbeit ist angesagt, mit ganz viel Tourette, denn NodeJS kann ich so gar nicht leiden…

Grafana Add New Graph Grafana dient mir als Frontend für verschiedene Speicher von Metriken. Es kann mit InfluxDB, OpenTSDB – und Graphite, und das ist doch genau das, was ich möchte. Dass es mir aus den Graphite-Daten hübsche Graphen bauen kann ist nur ein Feature; es lassen sich Dashboards erstellen, Werte beliebig zusammenfassen und vergleichen, Graphen parametrisieren – die Webseite des Projekts](http://docs.grafana.org/) liefert euch hier jede Menge Informationen zu. Um es auf den RaspberryPi 2 zu bekommen, wird im ersten Schritt eine hinreichend aktuelle Version von GO! benötigt, und die findet sich nicht in den üblichen Packages. Ich habe mich für diese Quelle entschieden und für meinen RaspberryPi 2 das passende Paket gezogen und entpackt:

$ cd /opt
$ wget http://dave.cheney.net/paste/go1.4.2.linux-arm~multiarch-armv7-1.tar.gz
$ tar xvfz go1.4.2.linux-arm~multiarch-armv7-1.tar.gz
$ rm go1.4.2.linux-arm~multiarch-armv7-1.tar.gz
$ export GOROOT="/opt/go"
$ export PATH="/opt/go/bin:$PATH"

Die Installations-Anweisungen auf der Projekt-Webseite beziehen sich auf grafana-2.5; hierfür wäre go-1.4 ausreichend. Per Github wird derzeit jedoch schon grafana-2.6beta2 gezogen, und die braucht zwingend go-1.5! Der Versuch, es mit go-1.4 zu bauen, hat bei mir zu sehr wüsten Fehlermeldungen geführt. Mit diesem Wissen kann nun aber alles für Grafana vorbereitet werden: das Ziehen von Grafana dauert relativ lange und gibt keinerlei Output, also nicht ungeduldig werden.

$ mkdir /opt/grafana
$ cd /opt/grafana
$ export GOPATH=`pwd`
$ go get github.com/grafana/grafana
$ cd $GOPATH/src/github.com/grafana/grafana
$ go run build.go setup
$ $GOPATH/bin/godep restore && go run build.go build

Um den Server auch wirklich betreiben zu können, fehlen noch einige Abhängigkeiten: eine aktuelle Version von NodeJS, npm und grunt. Die installieren wir jetzt nach – was sich als gar nicht so einfach herausstellte. Das eine zu alt, das andere zu neu, die Pfade verkehrt – ganz ehrlich, dieses NodeJS-Geraffels ist die Hölle. Die in den Packages enthaltenen Versionen sind so alt, dass es zu arg bizarren Fehlermeldungen kommt. Die einzige Vorgehensweise, die für mich funktionierte, war die folgende:

$ curl -sL https://deb.nodesource.com/setup_0.12 | bash -
$ apt-get install nodejs

Somit bekommen wir das benötigte NodeJS nebst npm ins System. Und jetzt können auch die fehlenden Abhängigkeiten installiert werden; hierzu bist du nach wie vor in $GOPATH/src/github.com/grafana/grafana, denn hier liegt die package.json, die die Abhängigkeiten vorgibt!

$ npm install npm -g
$ npm install n -g
$ npm install grunt -g

Endlich kann nun auch das Frontend zusammengebaut werden; nach wie vor bist du in $GOPATH/src/github.com/grafana/grafana!

$ npm install

Was nun folgt ist der Aufruf von grunt (wenn alle Stricke reißen, kann man ihm noch ein --force mitgeben):

$ grunt
Running "jscs:src" (jscs) task
>> 157 files without code style errors.

Running "jshint:source" (jshint) task
? No problems

Running "jshint:tests" (jshint) task
? No problems

Running "tslint:source" (tslint) task
>> 43 files lint free.

Running "clean:gen" (clean) task
Cleaning public_gen...OK

Running "copy:public_to_gen" (copy) task
Created 124 directories, copied 571 files

Running "phantomjs" task

Running "copy:phantom_bin" (copy) task
Copied 1 files

Running "less:src" (less) task
File public_gen/css/bootstrap.dark.min.css created.
File public_gen/css/bootstrap.light.min.css created.
File public_gen/css/bootstrap-responsive.min.css created.

Running "concat:cssDark" (concat) task
File public_gen/css/grafana.dark.min.css created.

Running "concat:cssLight" (concat) task
File public_gen/css/grafana.light.min.css created.

Running "typescript:build" (typescript) task
144 files created. js: 48 files, map: 48 files, declaration: 48 files (26625ms)

Done, without errors.

Hat man es einmal so weit geschafft, kann eigentlich nicht mehr viel schief gehen; Grafana kann nun für den Jungfernflug gestartet werden:

$ cd /opt/grafana/src/github.com/grafana/grafana
$ /opt/grafana/bin/grafana
[...]
2015/12/13 19:07:04 [I] Database: sqlite3
2015/12/13 19:07:04 [I] Migrator: Starting DB migration
2015/12/13 19:07:05 [I] Listen: http://0.0.0.0:3000

Add Graphite Data Source To Grafana Über die Adresse http://YOUR_HOST_OR_IP:3000/ ist das Frontend nun aufrufbar; Username und Passwort lauten per Default admin. Über Data Sources → Add new können wir nun unser Graphite als Datenquelle hinzufügen (vgl. Screenshot) – und damit sind dann eigentlich alle Voraussetzungen erfüllt. Du kannst jetzt damit beginnen, dich mit dem Interface vertraut zu machen, erste Graphen zu erstellen. Für die üblichen Systeme gibt es fertige Pakete, die sich denn doch einfacher installieren lassen. Was sind eure Erfahrungen mit Grafana? Setzt ihr es bereits produktiv ein? Ich bin gespannt auf eure Erfahrungsberichte!

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Grafana auf dem RaspberryPi 2“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.