Grafana auf dem RaspberryPi 2
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 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
Ü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!
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten