Server Überwachung mit munin und monit auf Fedora 7

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man seinen Fedora 7 Server mit munin und monit überwachen kann. Munin erzeugt raffinierte kleine Grafiken von fast jedem Aspekt Deines Servers (durchschnittliche Auslastung, Arbeitsspeicher-auslastung, Prozessorauslastung, MySQL Datendurchsatz, Netzwerk-Datendurchsatz, etc.) ohne großartige Konfiguration, wohingegen monit die Verfügbarkeit von Services wie Apache, MySQL, Postfix überprüft und die entsprechende Aktion ausführt wie zum Beispiel einen Neustart, wenn es feststellt, dass ein Service sich nicht so verhält wie erwartet. Die Kombination der Beiden bietet Dir vollkommene Überwachung: Grafik, die Dir derzeitige oder demnächst stattfindende Probleme aufzeigt (wie zum Beispiel "Wir brauchen bald einen größeren Server, unsere durchschnittliche Auslastung erhöht sich rasant".) und einen Wächter, der die Verfügbarkeit überwachter Services sichert.

Obwohl munin Dich mehr als einen Server überwachen lässt, werden wir hier nur das Überwachen des Systems diskutieren, in dem munin installiert ist.

Diese Anleitung wurde für Fedora 7 geschrieben, jedoch sollte die Konfiguration mit kleinen Änderungen auch für andere Distributionen zutreffen.
Allerdings möchte ich an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten - ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

1 Vorbemerkung

Der Host Name unseres Systems ist server1.example.com.Wir haben darauf eine Website www.example.com mit dem Document Root /var/www/www.example.com/web.

2 Installation und Konfiguration von munin

Um munin auf Fedora 7 zu installieren, führen wir Folgendes aus:

yum install munin munin-node

Dann erstellen wir die System Startup Links für munin und starten es:

chkconfig --levels 235 munin-node on
/etc/init.d/munin-node start

Als Nächstes müssen wir die munin Konfigurationsdatei bearbeiten /etc/munin/munin.conf. Wir möchten, dass munin die Ausgabe in das Verzeichnis /var/www/www.example.com/web/monitoring packt, dazu ändern wir den Wert von htmldir. Wir möchten den Namen server1.example.com an Stelle von localhost.localdomain in der HTML Ausgabe verwenden , dazu ersetzen wir localhost.localdomain mit server1.example.com. Ohne Kommentare sieht die verä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 # Where to look for the HTML templates tmpldir /etc/munin/templates [...] # a simple host tree [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 übergeben dessen Besitz an den Nutzer und die Gruppe munin, anderenfalls kann munin seine Ausgabe nicht in dieses Verzeichnis packen. 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 ein paar Minuten sodass munin seine erste Ausgabe erstellen kann, gehe dann in Deinem Browser zu http://www.example.com/monitoring/ und Du siehst die ersten Statistiken. Nach ein paar Tagen, könnte es so aussehen:


(Dies ist nur ein kleiner Auszug aus den zahlreichen Grafiken, die munin erzeugt...)

3 Schütze das munin Ausgabe-Verzeichnis mit einem Passwort (Optional)

Es ist sehr vorteilhaft das Verzeichnis /var/www/www.example.com/web/monitoring mit einem Passwort zu schützen, wenn Du nicht möchtest, dass jeder jede noch so kleine Statistik Deines Servers sehen soll.

Dafür 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 require valid-user

Dann müssen wir die Passwortdatei erstellen /var/www/www.example.com/.htpasswd. Wir möchten uns mit dem Nutzernamen admin einloggen, daher führen wir Folgendes aus:

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

Gib ein Passwort für admin ein und fertig bist Du!

4 Installation und Konfiguration von monit

Monit ist nicht in den offiziellen Fedora 7 Paketdatenbanken erhältlich, sondern in den RPMforge Datenbanken (siehe http://dag.wieers.com/rpm/FAQ.php#B2 für Instruktionen). Wir installieren das RPMforge Paket für RHEL 5, welches auch auf Fedora 7 funktioniert:

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Danach installieren wir monit:

yum install monit

Dann erstellen wir die System Startup Links für monit:

chkconfig --levels 235 monit on

Monits Standard-Konfigurationsdatei ist /etc/monit.conf in der Du ein paar Beispiele von Konfigurationen sehen kannst (mehr Beispiele findest Du auf http://www.tildeslash.com/monit/doc/examples.php), die alle auskommentiert sind, sie gibt Monit auch an, in dem Verzeichnis /etc/monit.d nach Konfigurationsdateien nachzusehen. An Stelle der Bearbeitung von /etc/monit.conf erstellen wir daher eine neue Konfigurationsdatei /etc/monit.d/monitrc. In meinem Fall möchte ich proftpd, sshd, mysql, apache, und postfix überwachen. Weiterhin möchte ich das monit Web Interface auf Port 2812 aktivieren. Ich möchte ein https Web Interface und mich mit dem Nutzernamen admin und dem Passwort test in das Web Interface einloggen. Zuguterletzt möchte ich, dass monit Email-Warnungen an diese Adresse schickt root@localhost, also sieht meine Datei so aus:

vi /etc/monit.d/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/sshd start" stop program "/etc/init.d/sshd 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/mysqld start" stop program = "/etc/init.d/mysqld 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/httpd.pid group www start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd 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

(Bitte vergewissere Dich, dass Du nur die Prozesse überwachst, die es auch tatsächlich auf Deinem Server gibt - anderenfalls startet monit nicht. Das heißt, wenn Du monit sagst, dass es Postfix überprüfen soll, Postfix aber nicht installiert ist, wird monit nicht starten.)

Die Konfigurationsdatei ist sehr selbserklärend; wenn Du Dir über eine Option nicht sicher bist, kannst Du in folgenden monit Dokumenten nachsehen: http://www.tildeslash.com/monit/doc/manual.php
Im apache Teil der monit Konfiguration wirst Du auf Folgendes stoßen:

   if failed host www.example.com port 80 protocol http
and request "/monit/token" then restart

was bedeutet, dass monit versucht sich mit www.example.com auf Port 80 zu verbinden und auf die Datei /monit/token zuzugreifen, welche diese ist /var/www/www.example.com/web/monit/token da der Document Root unserer Website /var/www/www.example.com/web ist. Wenn monit nicht erfolgreich ist, heißt das, dass Apache nicht läuft und monit es neu starten wird. Nun müssen wir die Datei /var/www/www.example.com/web/monit/token erstellen und ein paar zufällige Worte rein 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 brauchen 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

Endlich können wir monit starten:

/etc/init.d/monit start

Richte Deinen Browser auf https://www.example.com:2812/ (vergewissere Dich, dass Port 2812 nicht von Deiner Firewall blockiert ist), logge Dich mit admin und test ein. Du müsstest das monit Web Interface sehen. So sollte es aussehen:


(Main Screen)


(Apache Status Seite)

Je nach dem wie Deine Konfiguration in /etc/monit.d/monitrc ist, wird monit Deine Services neu starten, wenn sie ausfallen und Meldungen senden wenn sich Prozess IDs Deiner Services verändern etc.

Viel Spaß!

5 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte