RRD Datei in SQL Datenbank importieren

Im Zuge eines kleinen Projektes wollte ich eine Website mit einem Smokeping Server überwachen und die Daten danach mit Grafana auswerten.

Allerdings konnte ich nicht viel zu dem Thema finden und habe daher ein eigenes Programm geschrieben, dass die Daten in die Datenbank schreibt.

https://github.com/JadBlackstone/rrd2mysql

Was ist ein Smokeping Server

Ein Smokeping Server tut das, was der Name sagt. Er pingt in gewissen Abständen konfigurierte Ziele an und hält die gemessenen Latenzen in einer RRD (Round Robin Database) Datei fest.

Wie nutze ich das Programm

Zuerst muss eine Datenbank installiert und die passenden Tabellen angelegt werden. Danach müssen die nötigen Pakete, also rrdtool und mysql-connector-python, installiert werden.

Genaueres dazu findet sich im GitHub README.

Danach müssen in der Pyhton-Datei die oberen Variablen angepasst werden. Das heißt die Credentials für die Datenbank müssen hinterlegt werden, der Pfad zu der RRD Datei und die Step-Größe, also wie oft der Smokeping pingt. Das findet sich in der Config-Datei des Smokeping /etc/smokeping/config.

Danach kann das Programm über die Kommandozeile ausgeführt werden.

python3 rrd2mysql.py

Solange das Programm nun läuft werden die neuen Daten in die Datenbank geschrieben. Allerdings nur die neuen Daten und nur solange das Programm läuft. Möchte man permanent die Daten in die Datenbank schreiben, sollte man einen Systemd-Dienst einrichten.

Grafana Dashboard

Möchte man nun die Daten in Grafana anzeigen, muss man zuerst die MySQL als Datenquelle hinterlegen. Dafür geht man auf das Webinterface, in meinem Fall Port 3000 und meldet sich an. Dann links in der Leiste auf das Zahnrad -> Data Sources -> Add Data Source -> MySQL -> Credentials eintragen -> Testen und Speichern.

Danach geht man Links auf das Plus -> Dashboard -> Add an empty panel. Nun findet man im unteren Teil den SQL Query Builder. Dort wählen wir zuerst die MySQL als Dataquelle. Dann bei From die Tabelle, als Time Column timestamp und bei Select den Median oder einen Ping wert.

Nun werden die Daten aber durch die Zeitzonen noch falsch angezeigt. Dazu gehen wir nun rechts auf den Stift sodass sich der reine SQL Text öffnet. Dort ändern wir jetzt hinter dem SELECT timestamp zu UNIX_TIMESTAMP(timestamp). Das sorgt dafür, dass der Zeitstempel nicht mehr aus Datum und Uhrzeit besteht sondern die Sekunden nach dem 01.01.1970 angibt. Dadurch ist das Problem mit den Zeitzonen gelöst.

SELECT
  UNIX_TIMESTAMP(timestamp) AS "time",
FROM <tabelle>
WHERE
  $__timeFIlter(timestamp)
ORDER BY timestamp

Man kann nun auch diese Query kopieren und statt dem median den Ping1 abfragen oder halt alle anderen Werte die in der Tabelle sind.

Kommentare anzeigen

Wir nutzen Cookies

Um die Nutzung der Website zu verbessern, nutzen wir Cookies.
Desweiteren werden Google-Dienste für das schalten von Werbung verwendet. Mit der Nutzung der Website geben Sie ihr Einverständnis.
Sollte die Nutzung von Cookies abgelehnt werden, kann dies Auswirkung auf die Nutzung der Website haben.