Print
Category: Synology
Hits: 9309

Nachdem ich eine halbe Ewigkeit nach einer Lösung zum Monitoring meiner Synology gesucht habe, steht nun das Ergebnis. Es geht! Mein anfängliches Bemühen ein Monitoring aufzubauen, dass auf dem bekannten Dreigespann aus Telegraf, InfluxDB und Grafana basiert ist leider gescheitert. Viele der kursierenden Anleitungen hierzu sind leider nicht praktikabel und schlecht umzusetzen. Auch ist es so, dass die Implementierung fast ausschließlich den Einsatz von Docker voraussetzt. Viele der Synology Geräte, gerade im Einsteigerbereich unterstützen aber keine Dockerinstanzen. Ich Idee also auf den vorhandenen SNMP Dienst der Synology zurückzugreifen, der seine Daten in eine InfluxDB Datenbank schreibt, ist so leider nicht umsetzbar gewesen. Umso mehr überraschte mich eine Alternative, welche mir ein Programm names Node Exporter bot. Das in vielen Prozessorarchitekturen zur Verfügung stehende Programm wird auf den zu überwachenden Klienten installiert, dessen Daten anschließend über eine Schnittstelle zu Verfügung gestellt wird. Abgegriffen werden die Daten mittels eines zweiten Programms namens Prometheus, welches zudem gleichzeitig als Datenbank dient. Im letzten Schritt erfolgt die Auswertung der Daten über Grafana, welches mächtige Instrumente zur graphischen Auswertung gleich mitbringt. Die Installation der beiden Komponenten Prometheus und Grafana verläuft über eine Docker Instanz, die von einem Raspberry zur Verfügung gestellt wird. Die Installation des Node Exporters erfolgt eigenständig ohne Containernutzung auf der Synology. Praktischerweise erlaubt Synology auch die Erzeugung von Aufgaben mittels eines Aufgabenplaners. Ein dort hinterlegtes Shellskript startet je nach Bedarf den Node Explorer.

Übersicht:

1) Installation von Docker auf unserem Raspberry
2) Installation der Prometheusdatenbank
3) Installation des Node Exporters
4) Einbinden des Node Exporters in die Synology
5) Grafana Installation

1.) Installation von Docker auf unserem Raspberry:

1.1) Um das Installationsskript für Docker von der Herstellerseite herunterladen zu können benutzen wir curl. Die Optionen -fsSl sind dabei optional. Unter Umständen muss curl auf dem System per apt noch heruntergeladen werden.

sudo apt install curl

curl -fsSL https://get.docker.com -o get-docker.sh

1.2) Mit dem folgenden Befehl wird das soeben heruntergeladene Installationsskript ausgeführt.

sudo sh get-docker.sh


2.) Installation der Prometheus Datenbank:

2.1) Zunächst werden wir zwei Pfade anlegen, die Prometheus für Konfigurationszwecke verwendet

sudo docker volume create prometheus-data
sudo docker volume create prometheus-conf
 
2.2) Mit dem Befehl "run" legt Docker nun die Prometheusdatenbank auf unserem System an. Optional ist das Festlegen der retentiontime, welche wir auf 60 Tage begrenzen wollen.

sudo docker run -p 9090:9090 -v prometheus-data:/prometheus -v prometheus-conf:/etc/prometheus --name prometheus --restart=always prom/prometheus --storage.tsdb.retention.time=60d --config.file=/etc/prometheus/prometheus.yml

2.3) Sobald unser docker Befehl beendet ist, können wir per Browser bereits auf unsere Datenbank zugreifen. Dazu geben wir folgendes in die Adresszeile ein:

<IP-Adresse unserer Prometheus Installation>:9090

2.4) Nun beenden wir unsere Datenbank mit Strg-C und wechseln in das Verzeichnis unserer Prometheus Konfiguration. Dort müssen wir nun per chmod die Benutzerrechte erweitern. Ist dies geschehen öffnen wir die Prometheus Konfigurationsdatei mit dem Editor.

cd /var/lib/
sudo chmod -R 777 /docker

cd /var/lib/docker/volumes/prometheus-conf/_data

sudo nano prometheus.yml

2.5) Dort angekommen, fügen wir einen neunen job zur Konfigurationsdatei prometheus.yml hinzu. Unter "targets" setzen wir an die Stelle der IP Adresse unsere Adresse der Synology ein. Anschließend speichern wir die Datei und beenden den Editor. (Damit es später zu keiner Fehlermeldung müssen sämtliche Leerzeichen beachtet werden)

- job_name: docker
    scrape_interval: 5s
    static_configs:
      - targets: ['<Synology-IP-Adresse>:9100']

2.6) Nach erfolgreicher Konfiguration starten wir die Datenbank erneut mit dem folgenden Befehl:

sudo docker start promtheus

3.) Installation des Node Exporters:

3.1) Zur Installation des Node Exporters müssen wir das entsprechende Release von der folgenden Webseite herunterladen:
github.com/prometheus/node_exporter -> Auf der dortigen Webseite müssen wir "Releases" auswählen und die entsprechende Datei herunterladen, in unserem Fall die "armv7" Version (z.B. bei der Verwendung einer Synology DS218play). Zuvor loggen wir uns zunächst per SSH in unsere Synology ein und erstellen ein beliebiges Verzeichnis. Anschließend wechseln wir in das neu angelegte Verzeichnis und laden die obige Datei herunter.

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-armv7.tar.gz

3.2) Anschließend entpacken wir die Datei mit dem folgenden Befehl und wechseln in das neu angelegte Verzeichnis. Anschließend starten wir den Node Exporter.

tar xvfz node_exporter-1.2.2.linux-armv7.tar.gz

cd node_exporter-1.2.2.linux-armv7

./node_exporter

3.3) Wir prüfen im Anschluss, ob unser Node Exporter korrekt initiiert worden ist, indem wir die Adresse unserer Prometheus Instanz im Browser aufrufen. Unter der Rubik Status > Targets ist bei korrekter Installation unser node Exporter zu sehen.

3.4) Wir schließen die SSH Verbindung und damit auch den Node exporter.



4.) Einbinden des Node Exporters in die Synology

4.1) Der Node Exporter wird nun mittels eines kurzen Skripts in unseren Aufgabenplaner der Synology eingebunden. Das Skript lautet wie folgt und wird unter einem beliebigen Namen per Editor angelegt.

sudo nano <Dateiname.sh>

#!/bin/sh
/volume1/<Verzeichnis>/node_exporter-1.2.2.linux-armv7/node_exporter

4.2) Wir speichern das Skript unter einem beliebigen Dateinamen in unserem Node exporter Verzeichnis. Um das Skript später auch ausführen zu können, modifizieren wir die Dateiattribute mit dem Befehl

sudo chmod 775 <Dateiname.sh>

4.3) Wir wechseln nun in der Synology DSM in die Rubrik Aufgabenplaner. Dort erstellen wir eine "ausgelöste Aufgabe" und wählen "Benutzerdefiniertes Skript". Anschließend vergeben wir einen Namen für den "Vorgang" und wählen unter Ereignis "Hochfahren" aus. Dann wechseln wir zu "Aufgabeneinstellungen". Unter "Befehl ausführen" fügen wir den Befehl zum Starten des Node Exporter ein.

bash /volume1/<entsprechendes Verzeichnis><Name des Skripts>.sh



5.) Grafana Installation

5.1) Zunächst wird ein Grafana-data Verzeichnis angelegt

docker volume create grafana-data

5.2) Anschließend laden wir uns per Dockerbefehl das entsprechende Dockerimage herunter und starten dieses.

sudo docker run -p 3000:3000 -v grafana-data:/var/lib/grafana --restart=always --name=grafana grafana/grafana:latest

5.3) Im Anschluss wechseln per Browser auf die Webseite von Grafana mit dem Port 3000.

http://<IP-Adresse>:3000

5.4) Dann loggen wir uns per Standardpasswort in Grafana ein (admin/admin) und vergeben nach Bedarf ein neues Passwort.

5.5) Nun legen mir unter Configuration > Data sources > Add Datasource > Prometheus eine Verknüpfung zu unserer Datenbank an. Unter URL geben wir die Adresse samt Port unserer Datenbank an (z.B. http://<IP-Adresse>:9090). Schließlich bestätigen wir das Ganze indem wir auf "Save and Test" klicken.

5.6) Nachdem unsere Datenbank korrekt eingebunden ist, wechseln zu Dashboards > Manage > Import > und geben die ID unseres neunen Dashboards an. In unserem Fall heißt die ID 1860. Wir bestätigen mit Load und wählen die Prometheues Datenbank aus. Abschließend bestätigen wir mit Import.


Einzelnachweise:
Docker Installation / Prometheus / Node Exporter:
https://www.youtube.com/watch?v=VkT0EDtd12I
https://www.youtube.com/watch?v=bGAPiJgBRYc
https://github.com/prometheus/node_exporter/releases
https://prometheus.io/docs/introduction/first_steps/
Grafana Dashboards:
https://grafana.com/grafana/dashboards/1860