Server Überwachung mit munin und monit auf Debian Etch

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie Du Deinen Debian Etch Server mit munin und monit überwachen kannst. munin erzeugt hübsche kleine Grafiken über fast jeden Aspekt Deines Servers (durchschnittliche Auslastung, Speicherauslastung, Prozessorauslastung, MySQL Durchsatz, Netzwerkverkehr, etc.) ohne aufwendige Konfiguration. Wohingegen monit die Verfügbarkeit von Diensten wie Apache, MySQL und Postfix überprüft und handelt entsprechend . Wenn es zum Beispiel feststellt, dass ein Dienst nicht wie gewünscht funktioniert, veranlasst monit einen Neustart. Die Kombination der beiden ermöglicht Dir eine optimale Kontrolle: Grafiken, die Dir derzeitige oder aufkommende Probleme anzeigen (wie z.B. "Wir benötigen bald einen größeren Server, unsere durchschnittliche Auslastung erhöht sich rasch."), und ein Wachhund, der die Verfügbarkeit der zu überwachenden Dienste gewährleistet.

Obwohl Du mit munin mehr als einen Server überwachen kannst, werden wir hier nur die Überwachung des Systems diskutieren, auf dem es installiert ist.

Diese Anleitung ist für Debian Etch geschrieben worden, die Konfiguration sollte allerdings mit kleinen Änderungen auch auf andere Distributionen passen.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist ein solches System einzurichten. Es gibt viele Möglichkeiten das Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Der Hostname unseres Systems ist server1.example.com. Wir haben darauf eine Webseite www.example.com mit dem Dokumenten-Root /var/www/www.example.com/web.

2 Installation und Konfiguration von munin

Um munin auf Debian Etch zu installieren, führen wir Folgendes aus:

apt-get install munin munin-node

Als Nächstes müssen wir die munin Konfigurationsdatei /etc/munin/munin.conf bearbeiten. Wir möchten, dass munin seine Ausgabe in dem Verzeichnis /var/www/www.example.com/web/monitoring anzeigt, daher ändern wir den Wert von htmldir. Außerdem soll es den Namen server1.example.com anstelle von localhost.localdomain in der HTML Ausgabe verwenden, daher ersetzen wir localhost.localdomain mit server1.example.com. Ohne Kommentare sieht die geänderte Datei wie folgt aus:

vi /etc/munin/munin.conf


dbdir   /var/lib/munin
htmldir /var/www/www.example.com/web/monitoring logdir /var/log/munin rundir /var/run/munin tmpldir /etc/munin/templates [server1.example.com] address 127.0.0.1 use_node_name yes
Als Nächstes erstellen wir das Verzeichnis /var/www/www.example.com/web/monitoring und weisen dessen Besitz dem Benutzer und der Gruppe munin zu, sonst kann munin seine Ausgabe nicht in diesem Verzeichnis anzeigen. Dann starten wir munin neu:

mkdir -p /var/www/www.example.com/web/monitoring
chown munin:munin /var/www/www.example.com/web/monitoring
/etc/init.d/munin-node restart

Warte nun ein paar Minuten, damit munin seine erste Ausgabe produzieren kann. Gehe dann in Deinem Browser zu http://www.example.com/monitoring/ und Du siehst die ersten Statistiken. Nach ein paar Tagen könnte dies so aussehen:


(Das ist nur ein kleiner Auszug der vielen Grafiken, die munin erzeugt...)

3 Das munin Ausgabenverzeichnis mit einem Passwort schützen (Optional)

Es ist keine schlechte Sache das Verzeichnis /var/www/www.example.com/web/monitoring mit einem Passwort zu schützen, wenn Du nicht möchtest, dass sich jeder die Statistiken Deines Servers sehen kann.

Um dies auszuführen, erstellen wir eine .htaccess Datei in /var/www/www.example.com/web/monitoring:

vi /var/www/www.example.com/web/monitoring/.htaccess


AuthType Basic
AuthName "Members Only" AuthUserFile /var/www/www.example.com/.htpasswd <limit GET PUT POST> require valid-user </limit>
Dann müssen wir die Passwort-Datei /var/www/www.example.com/.htpasswd erstellen. Wir möchten uns mit dem Benutzernamen admin anmelden, also führen wir dies aus:

htpasswd -c /var/www/www.example.com/.htpasswd admin

Gib ein Passwort für admin ein und das war's!

4 Installation und Konfiguration von monit

Um monit zu installieren, führen wir Folgendes aus:

apt-get install monit

Jetzt müssen wir /etc/monit/monitrc bearbeiten. Die Standarddatei /etc/monit/monitrc hat eine Menge Beispiele und mehr Konfigurationsbeispiele findest Du auf http://www.tildeslash.com/monit/doc/examples.php. In meinem Fall möchte ich jedoch proftpd, sshd, mysql, apache und postfix überwachen, das monit Web Interface auf Port 2812 aktivieren, ich möchte ein https Web Interface, möchte mich mit dem Benutzernamen admin und dem Passwort test auf dem Web Interface anmelden und ich möchte, dass monit E-Mail-Warnungen an root@localhost schickt, also sieht meine Datei wie folgt aus:

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon set mailserver localhost set mail-format { from: monit@server1.example.com } set alert root@localhost set httpd port 2812 and SSL ENABLE PEMFILE /var/certs/monit.pem allow admin:test check process proftpd with pidfile /var/run/proftpd.pid start program = "/etc/init.d/proftpd start" stop program = "/etc/init.d/proftpd stop" if failed port 21 protocol ftp then restart if 5 restarts within 5 cycles then timeout check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout check process apache with pidfile /var/run/apache2.pid group www start program = "/etc/init.d/apache2 start" stop program = "/etc/init.d/apache2 stop" if failed host www.example.com port 80 protocol http and request "/monit/token" then restart if cpu is greater than 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 500 MB for 5 cycles then restart if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles then stop if 3 restarts within 5 cycles then timeout check process postfix with pidfile /var/spool/postfix/pid/master.pid group mail start program = "/etc/init.d/postfix start" stop program = "/etc/init.d/postfix stop" if failed port 25 protocol smtp then restart if 5 restarts within 5 cycles then timeout
(Achte bitte darauf, dass Du nur die Prozesse überprüfst, die auch tatsächlich auf Deinem Server existieren - sonst startet monit nicht. D. h. wenn Du monit sagst, es solle Postfix überprüfen und Postfix aber auf dem System nicht installiert ist, startet monit nicht.)

Die Konfigurationsdatei ist sehr selbsterklärend; wenn Du Dir mit einer Option nicht sicher bist, sieh Dir die monit Dokumentation an: http://www.tildeslash.com/monit/doc/manual.php
Im apache Teil der monit Konfiguration findest Du dies:
   if failed host www.example.com port 80 protocol http
and request "/monit/token" then restart
was bedeutet, dass versucht, sich mit www.example.com auf Port 80 zu verbinden und auf die Datei /monit/token zuzugreifen, die /var/www/www.example.com/web/monit/token ist, da der Dokumenten-Root unserer Webseite /var/www/www.example.com/web ist. Wenn monit nicht erfolgreich ist, heißt das, dass Apache nicht ausgeführt wird und monit es neu starten wird. Jetzt müssen wir die Datei /var/www/www.example.com/web/monit/token erstellen und eine zufällige Zeichenfolge hinein schreiben:

mkdir /var/www/www.example.com/web/monit
echo "hello" > /var/www/www.example.com/web/monit/token

Als Nächstes erstellen wir das pem cert (/var/certs/monit.pem), das wir für das SSL-verschlüsselte monit Web Interface benötigen:

mkdir /var/certs
cd /var/certs

Wir benötigen eine OpenSSL Konfigurationsdatei um unser Zertifikat zu erstellen. Es kann wie folgt aussehen:

vi /var/certs/monit.cnf


# create RSA certs - Server
RANDFILE = ./openssl.rnd [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type [ req_dn ] countryName = Country Name (2 letter code) countryName_default = MO stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Monitoria localityName = Locality Name (eg, city) localityName_default = Monittown organizationName = Organization Name (eg, company) organizationName_default = Monit Inc. organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Dept. of Monitoring Technologies commonName = Common Name (FQDN of your server) commonName_default = server.monit.mo emailAddress = Email Address emailAddress_default = root@monit.mo [ cert_type ] nsCertType = server
Nun erstellen wir das Zertifikat wie folgt:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem

openssl gendh 512 >> /var/certs/monit.pem

openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem

chmod 700 /var/certs/monit.pem

Danach bearbeiten wir /etc/default/monit um den monit daemon zu aktivieren. Ändere startup zu 1 und stelle bei CHECK_INTERVALS ein, in welchem Intervall monit Dein System überprüfen soll. Ich wähle 60 (Sekunden), meine Datei sieht also wie folgt aus:

vi /etc/default/monit


# Defaults for monit initscript
# sourced by /etc/init.d/monit # installed at /etc/default/monit by maintainer scripts # Fredrik Steen <stone@debian.org> # You must set this variable to for monit to start startup=1 # To change the intervals which monit should run uncomment # and change this variable. CHECK_INTERVALS=60
Schließlich können wir monit starten:

/etc/init.d/monit start

Richte Deinen Browser auf https://www.example.com:2812/ (achte darauf, dass Port 2812 nicht von Deiner Firewall geblockt wird), melde Dich mit admin und test an und Du siehst das monit Web Interface. So sollte es aussehn:


(Hauptschirm)


(Apache Status Seite)

Je nach dem was Du in /etc/monit/monitrc konfiguriert hast, wird monit Deine Dienste neu starten, wenn sie fehlschlagen und Benachrichtigungsmails schicken wenn sich Process IDs von Diensten ändern etc.

Viel Spaß!

5 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte