ELV Raumklimastation RS 500 mit Icinga 2 auswerten und überwachen
In einem vorangegangenen Artikel beschrieb ich, wie sich die ELV Raumklimastation RS 500 mit einem Raspberry Pi unter Linux auslesen lässt und wie sich die Messewerte für Temperatur und Luftfeuchte für andere Anwendungen bereitstellen lassen. Mit diesem Beitrag wird die Einbindung in ein Monitoring mit Icinga2 beschrieben.
Voraussetzungen
Dieser Artikel basiert auf dem vorangegangenen Blog-Beitrag ELV Raumklimastation RS 500 mit Raspberry Pi unter Linux auslesen.
Außerdem sollte man über ein eingerichtetes Icinga 2 verfügen. Die Grundeinrichtung würde den Rahmen dieses Blog-Posts sprengen.
Als Laufzeitumgebung muss Python 3.5 (inkl. virtualenv
) auf dem Zielsystem installiert sein.
Installation benötigter Komponenten
Alles, was man braucht, gibt es im Github-Repository juergen-rocks/raumklima.git. Man muss nur noch ein Installationsverzeichnis wählen (in diesem Beispiel /opt/raumklima
).
Alle Dateien müssen für den Monitoring-User lesbar sein. Alle *.py
und *.sh
-Skripte direkt im Ordner src/
müssen zusätzlich ausführbar sein.
Nun muss noch das passende Python Virtual Environment erstellt und benötigte Pakete installiert werden:
cd /opt/raumklima
virtualenv -p /usr/bin/python3.5 venv
pip install -r src/requirements-check_rs500.txt
In der Datei src/check_rs500.ini
müssen nun noch die Redis-Einstellungen zum Raspberry Pi angegeben werden, so dass das Check-Skript Daten empfangen kann.
Ausprobieren kann man das Setup mit diesem Befehl:
/opt/raumklima/src/start_check_rs500.sh -c 1
Entsprechend sollte die Antwort aussehen:
ok: everything fine; channel = 1 temp = 20.1, humi = 43
Icinga 2 konfigurieren
Damit nun Icinga das Skript verwenden kann, ergänzt man folgendes in der /etc/icinga2/conf.d/commands.conf
:
object CheckCommand "check_rs500" {
command = [ "/opt/raumklima/start_check_rs500.sh" ]
arguments = {
"-c" = "$channel$"
"--min-temp" = "$min_temp$"
"--max-temp" = "$max_temp$"
"--min-hum" = "$min_hum$"
"--max-hum" = "$max_hum$"
"--min-warn-temp" = "$min_warn_temp$"
"--max-warn-temp" = "$max_warn_temp$"
"--min-warn-hum" = "$min_warn_hum$"
"--max-warn-hum" = "$max_warn_hum$"
}
}
Außerdem wird entsprechend eine Service-Konfiguration in der /etc/icinga2/conf.d/services.conf
erstellt:
apply Service for (rk => config in host.vars.rs500) {
import "generic-service"
check_command = "check_rs500"
vars += config
}
Das bedeutet, dass jeder Host, der rs500
-Variablen hat, automatisch mit dem Check-Skript geprüft wird. Und einen solchen Host fügen wir für das Raspberry Pi nun in der /etc/icinga2/conf.d/hosts.conf
hinzu:
object Host "raumklima" {
import "generic-host"
address = "IP des Raspberries"
vars.rs500["Kanal 1"] = {
channel = 1
max_hum = 59
max_warn_hum = 54
min_warn_hum = 30
min_temp = 14.0
min_warn_temp = 16.0
}
vars.rs500["Kanal 2"] = {
channel = 2
max_hum = 59
max_warn_hum = 54
min_warn_hum = 30
min_temp = 20.0
}
vars.rs500["Kanal 3"] = {
channel = 3
max_hum = 59
max_warn_hum = 54
min_warn_hum = 30
min_temp = 18.0
max_temp_warn = 24.0
}
vars.rs500["Kanal 4"] = {
channel = 4
max_hum = 59
max_warn_hum = 54
min_warn_hum = 30
min_temp = 20.0
}
vars.rs500["Kanal 5"] = {
channel = 5
max_hum = 59
max_warn_hum = 54
min_warn_hum = 30
min_temp = 20.0
}
}
Man sieht nun für die unterschiedlichen Kanäle unterschiedliche Grenzwertangaben. Man kann die Kanäle übrigens frei benennen - der jeweilige Parameter channel
gibt an, um welchen Kanal es sich bei der RS 500 handelt.
Die Konfigurationslogik ist wie folgt:
- Ist ein Maximalwert für Temperatur (max_temp) oder ein Minimalwert für Temperatur (min_temp) angegeben und wird dieser im Falle von Maximalwert überschritten bzw. im Falle von Minimalwert unterschritten, so erfolgt eine Meldung vom Typ CRITICAL. Gleiches gilt für Luftfeuchte (max_hum, min_hum). Sind Temperatur und Luftfeuchte kritisch, wird die Temperatur in der Meldung als CRITICAL angezeigt.
- Gleiches gilt für die Warnungswerte min_warn_temp, max_warn_temp, min_warn_hum, max_warn_hum. Bei Über- bzw. Unterschreitung erfolgt eine Meldung vom Typ WARN.
- Ist Redis nicht erreichbar, erfolgt eine Meldung vom Typ UNKNOWN.
Das ist es schon. Für meine Konfiguration sieht das in IcingaWeb2 dann so aus:
Autor:
Jürgen Edelbluth
Themen:
Netzwerk Monitoring Linux Software-Entwicklung Python Hausautomatisierung Raspberry Pi
Veröffentlicht:
19.02.2018 10:44
Zuletzt aktualisiert:
13.03.2020 16:57