Einfaches Monitoring mit rrdtool
Um einige simple Graphen zu Serverlast, -Speichernutzung usw. abzutragen, muss es nicht gleich ein Schwergewicht wie Nagios sein. Der unter den meisten Distris verfügbare Collectd liefert die Zustandsinformationen im RRD-Format. Für die Auswertung braucht es noch rrdtool und wenn man nicht die generierten Grafiken per Hand einbinden will, empfiehlt sich ein winziges PHP-Script.
Beginnen wir mit der Installation der Pakete - hier exemplarisch für Debian. Die Pakete für MySQL und HddTemp? sind optional.
aptitude install collectd collectd-mysql collectd-hddtemp rrdtool
In der Konfiguration von collectd (/etc(collectd/collectd.conf) genügt es, die gewünschten optionalen Erweiterungen durch Auskommentieren der entsprechenden Zeilen zu aktivieren. Die Änderungen übernimmt ein Restart des Dämons mittels
/etc/init.d/collectd restart
Standardmäßig landen alle generierten RRD-Datenbanken in /var/lib/collect. Dort finden sich nun entsprechende Dateien für alle Partitionen, CPU, Netzwerk-Interfaces, den Speicher und alle weiteren aktivierten Module.
Nun müssen diese Daten natürlich noch visualisiert werden. Zu diesem Zweck können in einem Cron-Job Grafiken generiert werden. Das Script kann in etwa so aussehen:
#!/bin/bash
GPATH=/var/www/htdocs/log/ #Ziel-Verzeichnis der Grafiken
DPATH=/var/lib/collectd/ #Verzeichnis mit den RRD-Datenbanken
# Last-Graph der letzten Stunde
rrdtool graph ${GPATH}load-h.png -w 300 -h 100 -t "Last 1 Stunde" --start -1h DEF:shortterm=${DPATH}load.rrd:shortterm:AVERAGE LINE1:shortterm#00ff00:Kurz DEF:midterm=${DPATH}load.rrd:midterm:AVERAGE LINE1:midterm#0000ff:Mittel DEF:longterm=${DPATH}load.rrd:longterm:AVERAGE LINE1:longterm#ff0000:Lang
# Last-Graph des letzten Tages
rrdtool graph ${GPATH}load-d.png -w 300 -h 100 -t "Last 1 Tag" --start -1d DEF:shortterm=${DPATH}load.rrd:shortterm:AVERAGE LINE1:shortterm#00ff00:Kurz DEF:midterm=${DPATH}load.rrd:midterm:AVERAGE LINE1:midterm#0000ff:Mittel DEF:longterm=${DPATH}load.rrd:longterm:AVERAGE LINE1:longterm#ff0000:Lang
# Last-Graph der letzten Woche
rrdtool graph ${GPATH}load-w.png -w 300 -h 100 -t "Last 1 Woche" --start -1w DEF:shortterm=${DPATH}load.rrd:shortterm:AVERAGE LINE1:shortterm#00ff00:Kurz DEF:midterm=${DPATH}load.rrd:midterm:AVERAGE LINE1:midterm#0000ff:Mittel DEF:longterm=${DPATH}load.rrd:longterm:AVERAGE LINE1:longterm#ff0000:Lang
# Speicherverbrauch des letzten Tages
rrdtool graph ${GPATH}memory-d.png -w 300 -h 100 -t "Speicher 1 Tag" --start -1d DEF:used=${DPATH}memory.rrd:used:AVERAGE LINE1:used#ff0000:Benutzt DEF:free=${DPATH}memory.rrd:free:AVERAGE LINE1:free#00ff00:Frei
# Speichplatznutzung des ROOT-Dateisystems (/)
rrdtool graph ${GPATH}root-w.png -w 300 -h 100 -t "Speicherplatz 1 Woche" --start -1w DEF:free=${DPATH}df-root.rrd:free:AVERAGE LINE1:free#00ff00:"frei" DEF:used=${DPATH}df-root.rrd:used:AVERAGE LINE1:used#ff0000:"benutzt"
# Anzahl der laufenden Prozesse (Tag)
rrdtool graph ${GPATH}processes-d.png -w 300 -h 100 -t "Prozesse 1 Tag" --start -1d DEF:running=${DPATH}processes.rrd:running:AVERAGE LINE1:running#ff0000:Aktiv DEF:sleeping=${DPATH}processes.rrd:sleeping:AVERAGE LINE1:sleeping#00ff00:Inaktiv
# Anzahl der laufenden Prozesse (Woche)
rrdtool graph ${GPATH}processes-w.png -w 300 -h 100 -t "Prozesse 1 Woche" --start -1w DEF:running=${DPATH}processes.rrd:running:AVERAGE LINE1:running#ff0000:Aktiv DEF:sleeping=${DPATH}processes.rrd:sleeping:AVERAGE LINE1:sleeping#00ff00:Inaktiv
# Netzwerk-Traffic (letzte Stunde)
rrdtool graph ${GPATH}traffic-eth0-h.png -w 300 -h 100 -t "Netzwerk-Traffic 1 Stunde" --start -1h DEF:outg=${DPATH}traffic-eth0.rrd:outgoing:AVERAGE LINE1:outg#ff0000:Ausgehend DEF:inc=${DPATH}traffic-eth0.rrd:incoming:AVERAGE LINE1:inc#00ff00:Eingehend
# Netzwerk-Traffic (letzter Tag)
rrdtool graph ${GPATH}traffic-eth0-d.png -w 300 -h 100 -t "Netzwerk-Traffic 1 Tag" --start -1d DEF:outg=${DPATH}traffic-eth0.rrd:outgoing:AVERAGE LINE1:outg#ff0000:Ausgehend DEF:inc=${DPATH}traffic-eth0.rrd:incoming:AVERAGE LINE1:inc#00ff00:Eingehend
# Netzwerk-Traffic (letzte Woche)
rrdtool graph ${GPATH}traffic-eth0-w.png -w 300 -h 100 -t "Netzwerk-Traffic 1 Woche" --start -1w DEF:outg=${DPATH}traffic-eth0.rrd:outgoing:AVERAGE LINE1:outg#ff0000:Ausgehend DEF:inc=${DPATH}traffic-eth0.rrd:incoming:AVERAGE LINE1:inc#00ff00:Eingehend
Nun kann man die Grafiken nach einbinden des Scripts als Cron-Job oder manuellem Start schon angucken. Günstiger ist aber das ganze gleich in einer HTML-Seite ausgeben zu lassen. Da die meisten Server PHP bieten, soll das dieses kleine Script erledigen:
<html> <head> <title>Stats</title> </head> <body> <div style="margin: auto 10px auto 10px; background-color: #eee;"> <h1>Stats</h1> <?php $dir = './'; if(is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if(strstr($file, '.png')) { ?> <img src="<?php echo $file.'?'.time(); ?>" /> <?php } } } } ?> </div> </body> </html>
Have Fun!