Self Made Monitoring

Home > HowTo > Self Made Monitoring

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!

js? 04.04.2007 23:13 Uhr