Wer kennt es nicht, man sucht nach einer einfachen und schlanken Lösung um einen Server zu Überwachen. Man will aber nicht gleich so Riesen Geschütze wie Munin oder Cacti einsetzen sondern was schönes schlankes das einfach seinen Dienst tut. Vor längerem bin ich hierbei schon auf collectd aufmerksam geworden.

Vorteile:

  • Keine Datenbank nötig
  • Dateibasierende Speicherung der Daten
  • Einfache Administration

Nachteile:

  • collectd malt nicht gleich von Anfang an so schöne Grafiken wie manch anderes Tool

Einrichtung

Die Einrichtung von collectd ist ist eigentlich ein Kinderspiel:

apt-get install collectd rrdtool

Das reicht in der Regel auch schon, wer noch die Konfiguration anpassen möchte kann dies unter /etc/collectd/collectd.conf tun, dies ist vor allem nötig wenn man noch das ein oder andere Plugin aktivieren oder deaktivieren möchte.

So sieht z.B. meine Konfigurationsdatei aus:

Hostname "server"
LoadPlugin cpu
LoadPlugin df
LoadPlugin disk
LoadPlugin hddtemp
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin rrdtool
LoadPlugin sensors
LoadPlugin syslog
<Plugin hddtemp>;
        Host "127.0.0.1"
        Port 7634
        TranslateDevicename false
</Plugin>;
<Plugin rrdtool>;
        DataDir "/var/lib/collectd/rrd"
</Plugin>;
<Plugin syslog>;
        LogLevel info
</Plugin>;
Include "/etc/collectd/thresholds.conf"

Nach einer Änderung sollte man aber mit

sudo /etc/init.d/collectd restart

den collectd zum Neustart zwingen, da sonst die neue Konfiguration nicht übernommen wird.

Grafiken erstellen

Natürlich kann man sich von den nun mit Daten gefütterten RRD's nichts kaufen. Daher hier mein Script von dem ich die Grafiken erzeugen lasse:

#!/bin/bash
DATA="/var/lib/collectd/rrd/server"
HEIGHT="600"
WIDTH="1500"
# CPU / Tag
rrdtool graph /var/www/status/cpu-day.png --start -43200 -u 100 -r -l 0 -w $WIDTH -h $HEIGHT \
DEF:user=$DATA/cpu-0/cpu-user.rrd:value:AVERAGE AREA:user#00ff00:"Benutzer" \
DEF:nice=$DATA/cpu-0/cpu-nice.rrd:value:AVERAGE AREA:nice#00ffff:"Prioritaet":STACK \
DEF:system=$DATA/cpu-0/cpu-system.rrd:value:AVERAGE AREA:system#ff0000:"System":STACK \
DEF:iowait=$DATA/cpu-0/cpu-wait.rrd:value:AVERAGE AREA:iowait#0000ff:"IO-Wait":STACK > /dev/null
# Speicherauslastung / Tag
rrdtool graph /var/www/status/memory-day.png -r -u 1073741824 -l 0 --start -43200 -w $WIDTH -h $HEIGHT -X 6 \
DEF:used=$DATA/memory/memory-used.rrd:value:AVERAGE AREA:used#ff0000:"Benutzt" \
DEF:cached=$DATA/memory/memory-cached.rrd:value:AVERAGE AREA:cached#0000ff:"Cache":STACK \
DEF:buffered=$DATA/memory/memory-buffered.rrd:value:AVERAGE AREA:buffered#00ffff:"Puffer":STACK \
DEF:free=$DATA/memory/memory-free.rrd:value:AVERAGE AREA:free#00ff00:"Frei":STACK > /dev/null
# Systemlast / Tag
rrdtool graph /var/www/status/load-day.png --start -43200 -w $WIDTH -h $HEIGHT \
DEF:short=$DATA/load/load.rrd:shortterm:AVERAGE AREA:short#ff0000:"5 Minuten" \
DEF:mid=$DATA/load/load.rrd:midterm:AVERAGE AREA:mid#0000ff:"10 Minuten" \
DEF:long=$DATA/load/load.rrd:longterm:AVERAGE AREA:long#00ff00:"15 Minuten" > /dev/null
# Plattenlast / Tag
rrdtool graph /var/www/status/disk-day.png --start -43200 -w $WIDTH -h $HEIGHT \
DEF:read=$DATA/disk-sda/disk_octets.rrd:read:AVERAGE AREA:read#00ff00:"Lesen" \
DEF:write=$DATA/disk-sda/disk_octets.rrd:write:AVERAGE CDEF:writeout=0,write,- AREA:writeout#ff0000:"Schreiben" > /dev/null
# WAN / Tag
rrdtool graph /var/www/status/wan-day.png --start -43200 -w $WIDTH -h $HEIGHT \
DEF:rx=$DATA/interface/if_octets-ppp0.rrd:rx:AVERAGE AREA:rx#00ff00:"RX" \
DEF:tx=$DATA/interface/if_octets-ppp0.rrd:tx:AVERAGE CDEF:txout=0,tx,- AREA:txout#ff0000:"TX" > /dev/null
# LAN / Tag
rrdtool graph /var/www/status/lan-day.png --start -43200 -w $WIDTH -h $HEIGHT \
DEF:rx=$DATA/interface/if_octets-eth1.rrd:rx:AVERAGE AREA:rx#00ff00:"RX" \
DEF:tx=$DATA/interface/if_octets-eth1.rrd:tx:AVERAGE CDEF:txout=0,tx,- AREA:txout#ff0000:"TX" > /dev/null
# temp / Tag
rrdtool graph /var/www/status/temp-day.png --start -43200 -w $WIDTH -h $HEIGHT \
DEF:hddtemp=$DATA/hddtemp/temperature-sda.rrd:value:AVERAGE LINE1:hddtemp#ff0000:"Festplatte" \
DEF:temp1=$DATA/sensors-w83627ehf-isa-0290/temperature-temp1.rrd:value:AVERAGE LINE1:temp1#00ff00:"System" \
DEF:temp2=$DATA/sensors-w83627ehf-isa-0290/temperature-temp2.rrd:value:AVERAGE LINE1:temp2#0000ff:"Prozessor" \
DEF:temp3=$DATA/sensors-w83627ehf-isa-0290/temperature-temp3.rrd:value:AVERAGE LINE1:temp3#ff00ff:"AUX" > /dev/null

Das Erstellen der Grafiken kann natürlich auch auf einem anderen PC passieren, mann muss nur die RRD's zu verfügung haben welche collectd unter /var/lib/collectd/ ablegt und das Paket **rrdtool** muss installiert sein. Eine Anpassung meines kleinen Scriptes ist dannach natürlich unumgänglich!