Serverüberwachung · 6 min read · Oct 08, 2025
Der perfekte Lastverteilte & Hochverfügbare Webcluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen - Seite 7
13. Serverüberwachung mit munin und monit (web1, web2)
In diesem Kapitel werde ich beschreiben, wie Sie Ihre Webserver-Knoten mit munin und monit überwachen können. Munin erzeugt nützliche kleine Grafiken über nahezu jeden Aspekt Ihres Servers (Lastdurchschnitt, Speichernutzung, CPU-Nutzung, MySQL-Durchsatz, eth0-Verkehr usw.) ohne viel Konfiguration, während monit die Verfügbarkeit von Diensten wie Apache, MySQL, Postfix überprüft und die entsprechenden Maßnahmen wie einen Neustart ergreift, wenn es feststellt, dass ein Dienst sich nicht wie erwartet verhält. Die Kombination der beiden bietet Ihnen eine vollständige Überwachung: Grafiken, die es Ihnen ermöglichen, aktuelle oder bevorstehende Probleme zu erkennen (wie “Wir brauchen bald einen größeren Server, unser Lastdurchschnitt steigt schnell.”), und einen Wächter, der die Verfügbarkeit der überwachten Dienste sicherstellt.
Obwohl munin es Ihnen ermöglicht, mehr als einen Server zu überwachen, werden wir hier nur die Überwachung des Systems besprechen, auf dem es installiert ist.
13.1 Installieren und Konfigurieren von munin
apt-get install munin munin-node
Als nächstes müssen wir die Konfigurationsdatei von munin /etc/munin/munin.conf bearbeiten.
mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf
Auf web1.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web1.example.com]
address 127.0.0.1
use_node_name yesAuf web2.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web2.example.com]
address 127.0.0.1
use_node_name yesAuf web1 UND web2
Als nächstes erstellen wir das Verzeichnis /var/www/example/web/monitoring und ändern dessen Eigentum auf den Benutzer und die Gruppe munin, andernfalls kann munin seine Ausgaben nicht in diesem Verzeichnis ablegen. Dann starten wir munin neu:
mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart
Jetzt ist es eine gute Idee, das Verzeichnis /var/www/example/web/monitoring mit einem Passwort zu schützen, es sei denn, Sie möchten, dass jeder jede kleine Statistik über Ihren Server sehen kann.
Um dies zu tun, erstellen wir eine .htaccess-Datei in /var/www/example/web/monitoring:
vi /var/www/example/web/monitoring/.htaccess
AuthType Basic
AuthName "Nur für Mitglieder"
AuthUserFile /var/www/example/monitoring/.htpasswd
require valid-user
Dann müssen wir die Passwortdatei /var/www/example/.htpasswd erstellen. Wir möchten uns mit dem Benutzernamen admin anmelden, also machen wir Folgendes:
htpasswd -c /var/www/example/web/monitoring/.htpasswd admin
Geben Sie ein Passwort für admin ein, und Sie sind fertig!
Jetzt können Sie Berichte (es dauert ein paar Minuten, um Daten zu sammeln) unter diesen Adressen abrufen:
http://www.example.com:10001/monitoring für web1.example.com
und
http://www.example.com:20001/monitoring für web2.example.com.
13.2 Installieren und Konfigurieren von monit
Um monit zu installieren, machen wir Folgendes:
apt-get install monit
Jetzt müssen wir /etc/monit/monitrc bearbeiten. Die Standard-/etc/monit/monitrc hat viele Beispiele, und Sie finden weitere Konfigurationsbeispiele unter http://www.tildeslash.com/monit/doc/examples.php. In meinem Fall möchte ich proftpd, mysql, apache und postfix überwachen, ich möchte die monit-Weboberfläche auf Port 2812 aktivieren, ich möchte eine HTTPS-Weboberfläche, ich möchte mich mit dem Benutzernamen admin und dem Passwort test in die Weboberfläche einloggen, und ich möchte, dass monit E-Mail-Benachrichtigungen an root@localhost sendet, sodass meine Datei so aussieht:
Auf web1.example.com
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: [email protected] }
set alert [email protected]
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.104 port 21 protocol ftp 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 192.168.1.104 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 then restart
if 5 restarts within 5 cycles then timeoutAuf web2.example.com
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: [email protected] }
set alert [email protected]
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.105 port 21 protocol ftp 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 192.168.1.105 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 then restart
if 5 restarts within 5 cycles then timeoutDie Konfigurationsdatei ist ziemlich selbsterklärend; wenn Sie sich über eine Option unsicher sind, werfen Sie einen Blick in die monit-Dokumentation: http://www.tildeslash.com/monit/doc/manual.php
Im Apache-Teil der monit-Konfiguration finden Sie dies:
if failed host www.example.com port 80 protocol http
and request "/example/web/monit/token" then restartwas bedeutet, dass monit versucht, eine Verbindung zu www.example.com auf Port 80 herzustellen und die Datei /monit/token zuzugreifen, die /var/www/example/web/monit/token ist, da das Dokumentenstammverzeichnis unserer Website /var/www/example/web ist. Wenn monit keinen Erfolg hat, bedeutet das, dass Apache nicht läuft, und monit wird versuchen, es neu zu starten.
Auf web1 UND web2
Jetzt müssen wir die Datei /var/www/example/web/monit/token erstellen und einen zufälligen String hinein schreiben:
mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token
Als nächstes erstellen wir das pem-Zertifikat (/var/certs/monit.pem), das wir für die SSL-verschlüsselte monit-Weboberfläche benötigen:
mkdir /var/certs
cd /var/certs
Wir benötigen eine OpenSSL-Konfigurationsdatei, um unser Zertifikat zu erstellen. Sie kann so 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 = [email protected]
[ cert_type ]
nsCertType = serverJetzt erstellen wir das Zertifikat so:
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
Anschließend bearbeiten wir /etc/default/monit, um den monit-Daemon zu aktivieren. Ändern Sie den Startwert auf 1 und setzen Sie CHECK_INTERVALS auf das Intervall in Sekunden, in dem Sie möchten, dass monit Ihr System überprüft. Ich wähle 60 (Sekunden), sodass meine Datei so aussieht:
vi /etc/default/monit
# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen
# Sie müssen diese Variable setzen, damit monit gestartet wird
startup=1
# Um die Intervalle zu ändern, in denen monit ausgeführt werden soll, kommentieren Sie diese Variable aus
# und ändern Sie sie.
CHECK_INTERVALS=60Schließlich können wir monit starten:
/etc/init.d/monit start
Jetzt richten Sie Ihren Browser auf https://192.168.1.104:2812/ oder https://192.168.1.105:2812/, melden Sie sich mit admin und test an, und Sie sollten die monit-Weboberfläche sehen.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.