Grafana Example Dashboard

wall < "Grafana auf dem RaspberryPi 2"

Broadcast message from spillerm@unixe.de (pts/1) (So Dez 13 22:12:56 2015):
4
Diesen Beitrag schrieb ich vor 3 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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 GraphGrafana 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 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 reissen, 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

Graphite als Backend zu Grafana hinzufügen

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.

UnterschriftFü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!

4
  1. Klaus Maria Pfeiffer

    danke, kommt mir gerade gelegen. stehe vor der selben herausforderung, nur mit influxdb und grafana.

Keine weitere Reaktionen mehr möglich.