Daten per InfluxDB in Grafana abbilden

March 20, 2020 in linux ‐ 2 min read

In diesem Artikel soll es darum gehen, wie man mit InfluxDB Daten in Grafana abbilden kann. Ich gehe davon aus, dass Ihr bereits eine bestehende Grafana Installation und eine InfluxDB habt, in die Ihr Daten kippen könnt.

Zum einsammeln der Daten benutzen wir Telegraf.
Die Installationsanleitung ist relativ straight forward.

Telegraf kommt mit diversen Plugins zum erheben von Daten daher.
Wir sehen uns das Modul input.exec an.

Die Daten die wir einsammeln werden sind Statistiken darüber, wieviele Karten in einem Kanboard in welchen Spalten eines Projektes liegen.

image

Kanboard kommt von Hause aus schon mit einem Tool zum erfassen dieser Daten namens CLI daher. Ein Beispiel Output von CLI wäre:

2020-03-20,3,9,1,0,0,13

Komma separiert stehen hier das Datum der Messung und die Werte wie viele Tickets sich in den einzelnen Spalten befinden.

Jetzt brauchen wir nur noch ein Script, welches diese Daten im InfluxDB Stil bereitstellt. InfluxDB arbetiet mit Series, also serien von Daten.

Eine Serie besteht dabei aus Messwerten.
Zusammen mit einem Zeitstempel bilden diese Daten dann einen Datenpunkt. Nähere Details dazu finden sich hier.

Hier wäre, wie der Datensatz für im InfluxDB Stil aussehen kann.

 kanban-project-23,host=kanban backlog=3,blocked=0,done=13,ready=9,review=0,wip=1 1584685951000000000

“kanban-project-1” ist die Serie
“host=kanban” ist ein der Serie zugeordneter Tagset (die selbe Serie kann für unterschiedliche Dinge gemessen werden.
Eine leerstelle, gefolgt von Key=Value pairs.
Eine leerstelle, gefolgt von einem epoch Zeitstempel (Millisekunden seit dem 01.01.1970)

Jetzt bräuchte man nur noch ein script, welches die Daten in diesem Format bereitstellt.

Gestatten, project-column-stats.sh, welches als ersten Parameter die Projekt ID erwartet.

Telegraf kann dieses script jetzt ausführen, indem Ihr der /etc/telegraf/telegraf.conf auf dem Client folgende Zeilen hinzufügt.

 [[inputs.exec]]
    commands = ["/path/to/project-column-stats.sh <PROJECT ID>"]
    data_format = "influx"

ACHTUNG: Das Script muss für den User Telegraf ausführbar sein!

Wenn Ihr alles richtig gemacht habt, könnt Ihr jetzt in Grafana eine Query für eure Daten schreiben.

SELECT mean("backlog") as backlog, mean("wip") as wip, mean("blocked") as blocked, mean("ready") as ready, mean("review") as review, mean("done") as done FROM "autogen"."kanban-project-14" WHERE $timeFilter GROUP BY time($__interval) fill(null)

Das Ergebnis sieht dann so aus.

image