Der Raspberry Pi ist übertaktet und soll im 24/7 Dauerbetrieb laufen. Wie man einen Stabilen Betrieb hinbekommt, haben wir uns schon im Artikel Stabiler 24/7 Dauerbetrieb angesehen. Jedoch ist es nicht verkehrt, Daten über den Raspberry Pi zu sammeln, um diese im Bedarfsfall analysieren zu können. Zum Anderen können solche Daten auch helfen, ein Frühwarnsystem zu bauen, dass z.B. Alarm schlägt, wenn der Raspberry Pi zu heiß wird. Im Folgenden werde ich zwei Monitoring Systeme benennen, zu welchen ich jeweils Installationsanleitungen verlinkt habe, und darauffolgend werden wir ein kleines Script einrichten, dass bei einer außergewöhnlichen Wärmeentwicklung eine E-Mail versendet.
Voraussetzung: Raspbian oder vergleichbare Distribution installiert
Dieses kleine Programm ist ein, extra für den Raspberry Pi geschriebenes, Monitoring Tool. Neben dem Auslesen aktueller Werte des Raspberry Pis, schreibt es auch die CPU-, RAM-, SWAP- und Netzwerk-Auslastung wie auch die Prozessor Temperatur, Uptime und SD-Karten Nutzung mit und bereitet diese Daten in ein paar übersichtlichen Graphen auf. Der Funktionsumfang ist nicht der Größte, aber es erfüllt den Zweck, dass man sich die gesammelten Daten im Nachhinein ansehen kann.
Wie man RPi-Monitor installiert erklärte ich bereits hier im Blog.
Ein meines Wissens nach sehr weit verbreitetes Monitoring Tool ist Munin. Und das keines Wegs zu unrecht, denn dieses Tool hat, insbesondere weil es modular aufgebaut ist und damit einfach erweitert werden kann, einen wirklich großartigen Funktionsumfang. Im Gegensatz zu anderen Monitoring Tools ist die grafische Ausgaben jedoch eher funktional als eine Augenweide.
Wie man einen Munin Server auf dem Raspberry Pi installiert, wurde auf Pingbin (Englisch) erklärt. Die Vorgehensweise, wie man ein Plugin installiert, dass viele Werte aus dem Raspberry Pi ausließt, erklärte Jörg Bösche in seinem Blog.
Nachdem wir nun zwei Lösungen zum Monitoring auf längere Dauer kennen, sollten wir ein Script einrichten, dass im Fall einer Überhitzung des Raspberry Pis direkt eine E-Mail an uns versendet. Natürlich könnte man auch Scripts schreiben, die in anderen Fällen Alarm schlagen, jedoch denke ich, dass die Überhitzung des Raspberry Pis das größte Problem ist, dass auftreten kann. Im Folgenden beziehen wir uns auf die Angabe des Prozessor Temperatur Sensors.
Zunächst legen wir folgendes Script auf dem Raspberry Pi z.B. im Home-Verzeichnis des Benutzers pi ab. Dabei müssen wir die Variablen smtpHost (Adresse des SMTP-Servers), smtpPort (Port des SMTP-Servers), smtpUser (SMTP-Benutzername), smtpPassword (Passwort des SMTP-Benutzers), mailSender (Absender der E-Mail), mailReceiver (Empfänger der E-Mail) und criticalTemperature (CPU Temperatur ab der eine E-Mail versendet werden soll) anpassen. Die E-Mails werden dann über ein SMTP-Account versendet (möglichst das der Absender E-Mail-Adresse), sodass sie möglichst nicht in Spam-Filtern hängen bleiben. In dem Editor nano kann man mittels STRG + X, Y und Enter speichern.
nano monitoring-cpu-temp.py
import os import smtplib import time from email.mime.text import MIMEText ### Settings # SMTP smptHost = "smtp.example.de" smtpPort = 587 smtpUser = "[email protected]" smtpPassword = "thisisapassword" # E-Mail mailSender = "[email protected]" mailReceiver = "[email protected]" # Warning criticalTemperature = 60 # in degree celsius ### date = "%02i.%02i.%04i" % (int(time.localtime()[2]), int(time.localtime()[1]), int(time.localtime()[0])) time = "%02i:%02i:%02i" % (int(time.localtime()[3]), int(time.localtime()[4]), int(time.localtime()[5])) def getCPUtemperature(): res = os.popen('vcgencmd measure_temp').readline() return(res.replace("temp=","").replace("'C\n","")) tempFloat = float(getCPUtemperature()) if (tempFloat > criticalTemperature): server = smtplib.SMTP(smptHost, smtpPort) # server.starttls() # If TLS authentication should be used remove the hash at start of line server.login(smtpUser, smtpPassword) value = "Die aktuelle Temperatur des Raspberry Pi liegt bei " + str(tempFloat) + " Grad Celsius." + "\n" + "Zeit: " + time + " am " + date msg = MIMEText(value) msg['Subject'] = "[Warning] Rasperry Pi Temperatur " + str(tempFloat) + " Grad!" msg['From'] = mailSender msg['To'] = mailReceiver server.sendmail(mailSender, mailReceiver, msg.as_string()) server.quit()
Nun legen wir einen Cronjob an, der alle fünf Minuten das Script ausführt. Dadurch wird alle fünf Minuten die Temperatur des Raspberry Pis überprüft und gegebenenfalls eine Warnung per E-Mail versendet.
crontab -e
*/5 * * * * python monitoring-cpu-temp.py >/dev/null 2>&1
Wir kennen nun zwei Systeme um ein Monitoring des Raspberry Pis über längere Zeit durchzuführen und haben ein Warnungssystem eingerichtet, welches Alarm schlägt sobald sich der Raspberry Pi überhitzt.