Mit Hilfe des Programms
MRTG (Multi Router Traffic Grapher) und
RRD (Round-Robin-Database) lassen sich unter Linux sehr schnell grafische Auswertungen und Darstellungen von Messwerten erstellen. Es können HTML Seiten mit Grafiken erstellt werden.
Falls man direkten Zugriff über den Browser auf die Dateien haben möchte, sollte vorher auf dem Pi noch ein Webserver installiert werden. Dafür kann man den
Apache2 oder auch den
Lighttpd verwenden.
Siehe hierzu auch
http://sebastianhemel.blogspot.de/2015/09/raspberry-pi-webserver-installieren.html
Installation & Konfiguration von MRTG/RRD/SNMP:
Installation der benötigten Pakete für MRTG und RRD.
sudo apt-get install mrtg mrtg-rrd rrdtool snmp snmpd
Anschließend kommt die Frage, ob
root der Eigentümer der Datei /etc/mrtg.cfg sein soll. Hier sollte
NEIN ausgewählt werden.
Anschließend muss ein Verzeichnis angelegt werden, in dem die RRD Datenbank und die PNG-Grafiken abgelegt werden können. Dies muss im öffentlichen
WWW-Ordner vom Webserver erfolgen.
/var/ $ sudo mkdir www
/var/www $ sudo mkdir mrtg
Anschließend hat man die folgende Ordner-Struktur:
/var/www/mrtg
Jetzt müssen wir noch das cgi-bin Verzeichnis erstellen, auch dieses liegt im
WWW-Ordner. Nun kann ein Symlink (
https://de.wikipedia.org/wiki/Symbolische_Verknüpfung) zur
mrtg-rrd.cgi erstellt werden. Hierrüber kann dann später die generierte HTML-Seite aufgerufen.
sudo mkdir -p /var/www/cgi-bin
sudo ln -s /usr/lib/cgi-bin/mrtg-rrd.cgi /var/www/cgi-bin/mrtg-rrd.cgi
Im Nachgang müssen nun die Rechte für den
Lighttpd-Benutzer und die
Gruppe gesetzt werden:
sudo chown -R www-data:www-data /var/www/*
Da es bei SNMP noch einen Fehler gibt, siehe auch
http://penguinbliss.com/?p=239, muss noch die folgende Datei angepasst werden:
sudo sed -i 's|import Socket6;|Socket6->import(qw(inet_pton getaddrinfo));|' /usr/share/perl5/SNMP_Session.pm
Bevor wir mit der Erstellung des Diagramms starten, sollte von der "alten" mrtg.cfg eine Sicherheitskopie angelegt werden.
sudo mv /etc/mrtg.cfg /etc/mrtg.cfg.bak
Temperaturwerte für RRD bereitstellen
Hierzu wird ein Skript benötigt. Diese kann man z.B. im Home-Verzeichnis ablegen.
mkdir ~/graph
temp-mrtg-update.sh (wget https://www.shemel.de/download/raspberry/temp-mrtg-update.sh)
#!/bin/sh
# Temperatur von Sensor auslesen
# (c) Sebastian Hemel
sensor="/sys/bus/w1/devices/28-00000511590a/w1_slave"
if [ -f $sensor ]
then
sensorraw=`cat $sensor`
crc=`echo $sensorraw | cut -f2 -d= | cut -c4-6`
if [ "$crc" = "YES" ]
then
tempraw=`echo $sensorraw | cut -f3 -d=`
temp=`echo "scale=3; $tempraw / 1000" | bc`
#temp=`echo "scale=2; $tempraw / 1000" | bc`
# Update database
#echo $temp
printf "%04.2f" $temp
echo 0
echo 0
echo temperature
fi
fi
Die Datei muss ausführbar sein:
chmod 750 /home/pi/graph/temp-mrtg-update.sh
Es ist zu beachten, dass die ID eures Sensors hinterlegt werden muss!
Das Script sollte die folgenden Werte liefern:
pi@pi-ingolstadt ~/graph $ ./temp-mrtg-update.sh
3.560
0
temperature
Erstellen des Diagramms vom Temperatursensor:
Zu Beginn muss eine neue mrtg.cfg erstellt werden, dies erfolgt mit dem Befehl:
sudo cfgmaker --global "Options[_]: growright" --global "IconDir: /mrtg" --global "WriteExpires: Yes" --global "Language: german" --global "RunAsDaemon: yes" --global "EnableIPv6: no" --global "LogFormat: rrdtool" --global "Interval: 1" '--if-filter=$if_admin && $default_iftype' --output /etc/mrtg.cfg public@localhost
Jetzt kann der folgende Teil in die
sudo nano /etc/mrtg.cfg übernommen werden:
### Global Config Options
# for UNIX
# WorkDir: /home/http/mrtg
# for Debian
HtmlDir: /var/www/mrtg
WorkDir: /var/www/mrtg
Imagedir: /var/www/mrtg
# or for NT
# WorkDir: c:\mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits
EnableIPv6: no
Options[_]: growright
IconDir: /mrtg
WriteExpires: Yes
Language: german
RunAsDaemon: yes
EnableIPv6: no
LogFormat: rrdtool
Interval: 1
#####################################################################
# System: DS18S20 Temperatur Sensor
# Contact: root
# Location: attached to Raspberry Pi
#####################################################################
### DS18S20 Temperatur SensorIngolstadt
TimeStrPos[temp_ingolstadt]: RU
Target[temp_ingolstadt]: `/home/pi/graph/temp-mrtg-update.sh`
Options[temp_ingolstadt]: gauge,growright,nopercent,expscale,transparent
Title[temp_ingolstadt]: Temperatur Ingolstadt
PageTop[temp_ingolstadt]: <h1>Temperatur Ingolstadt</h1>
MaxBytes[temp_ingolstadt]: 60
#Unscaled[temp_ingolstadt]: ymwd
Step[temp_ingolstadt]: 60
Legend1[temp_ingolstadt]: Gemessene Temperatur in Ingolstadt
LegendI[temp_ingolstadt]: Aussentemperatur
LegendO[temp_ingolstadt]:
YLegend[temp_ingolstadt]: Grad Celsius
ShortLegend[temp_ingolstadt]: Grad °C
Die restlichen Einträge habe ich auskommentiert, da ich nur das Temperatur Diagramm haben möchte.
Bei Bedarf können noch die MRTG-Icons in den WWW Ordner vom Webserver kopiert werden:
sudo cp /usr/share/mrtg/* /var/www/mrtg/
Jetzt kann durch Starten von MRTG überprüft werden, ob die Konfiguration erfolgreich durchgeführt wurde.
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
Möchte man MRTG erneut starten, muss vorher der bestehende Prozess (Prozess-ID siehe auch /etc/mrtg.pid) beendet werden:
ps -aux | grep mrtg
sudo kill -9 16391
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
Probleme mit negativen Temperaturwerten beheben
Da MRTG keine negativen Werte erlaubt, kann man diese nachträglich (mit
rrdtool) mit dem folgenden Befehlen im Verzeichnis
/var/www/mrtg anpassen.
sudo rrdtool tune temp_ingolstadt.rrd --minimum ds0:-20
sudo rrdtool tune temp_ingolstadt.rrd --minimum ds1:-20
Jetzt werden Temperaturen bis - 20 Grad Celsius unterstützt.
Der Aufruf des Diagramms erfolgt über den Browser
http://192.168.1.110/cgi-bin/mrtg-rrd.cgi
Hinweise: Kommt es beim Aufruf der Datei zu einem "500 - Internal Server Error", wurden die Rechte chmod +x nicht gesetzt. Führte dies nicht zum Erfolg, sollte man die syslog Datei auslesen. Dies geht mit dem Befehl /var/log $ tail -f syslog . Erscheint hier die Meldung "Can't locate CGI.pm in @INC (you may need to install the CGI module)", muss noch das folgenden Paket installiert werden: sudo apt-get install libcgi-pm-perl
Achtung es gibt ein Fehler im mrtg-rrd Package: https://bugs.launchpad.net/ubuntu/+source/mrtg-rrd/+bug/1618800
Nov 1 13:49:34 raspberrypi lighttpd[538]: Can't use an undefined value as an ARRAY reference at /var/www/cgi-bin/mrtg-rrd.cgi line 499.
Ich musste folgende Zeilen der "mrtg-rrd.cgi" anpassen:
Hinweis: Vorher am Besten den MRTG Prozess wieder beenden (siehe oben).
Aug 7 21:49:01 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 499.
# return @{$target->{args}} if defined @{$target->{args}};
return @{$target->{args}} if ($target->{args} && @{$target->{args}});
Aug 7 21:52:28 raspberrypi-zero lighttpd[461]: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 525.
# %{$target->{options}} = ()
# unless defined %{$target->{options}};
%{$target->{options}} = ()
unless ($target->{options} && %{$target->{options}});
Aug 7 21:58:11 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 914.
# if (defined @{$directories{$dir}{subdir}}) {
# $subdirs_printed = 1
if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {
$subdirs_printed = 1;
Aug 7 22:01:35 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 929.
# if (defined @{$directories{$dir}{target}}) {
if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {
Bei Bedarf kann das Diagramm noch auf einen anderen Server hochgeladen werden:
crontab -e: Aufruf per localhost, damit die
temp_ingolstadt-day.png Datei erstellt wird (alle 7min).
*/7 * * * * curl http://localhost/cgi-bin/mrtg-rrd.cgi/temp_ingolstadt.html >/dev/null 2>&1
temp.sh: anpassen, siehe auch
http://sebastianhemel.blogspot.de/2015/01/temperatursensor-ds18b20-raspberry-pi.html
ncftpput -f /home/pi/ftp.cfg /temp /var/www/mrtg/temp_ingolstadt-day.png
Danke an das Tutorial von http://kopfkino.irosaurus.com/tutorial-monitoring-mit-mrtg-rrd-support-auf-raspberry-pi-debian-wheezy, welches als Basis für diesen Eintrag diente.