Server Monitoring · 12 min read · Dec 15, 2025

Serverüberwachung mit Munin und Monit auf Debian 10

In diesem Artikel beschreibe ich, wie Sie Ihren Debian 10 (Buster) Server mit Munin und Monit überwachen können. Munin generiert schicke kleine Grafiken über fast jeden Aspekt Ihres Servers (Lastdurchschnitt, Speichernutzung, CPU-Nutzung, MySQL-Durchsatz, Netzwerkverkehr 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 Ihnen aktuelle oder bevorstehende Probleme anzeigen (z. B. “Wir benötigen bald einen größeren Server, unser Lastdurchschnitt steigt schnell.”), und einen Wächter, der die Verfügbarkeit der überwachten Dienste sicherstellt.

Obwohl Sie mit Munin mehr als einen Server überwachen können, werden wir hier nur die Überwachung des Systems besprechen, auf dem es installiert ist.

Dieser Leitfaden wurde für Debian 10 (Buster) geschrieben, aber die Konfiguration sollte auch auf andere Distributionen wie Ubuntu mit geringfügigen Änderungen anwendbar sein.

1 Vorbemerkung

Alle Befehle in diesem Tutorial werden als Root-Benutzer ausgeführt. Melden Sie sich als Root auf Ihrem Server per SSH an oder öffnen Sie ein Terminalfenster. Wenn Sie sich als ein anderer Benutzer als Root anmelden, verwenden Sie den Befehl

su -

um Root zu werden, bevor Sie fortfahren.

Der Hostname unseres Systems ist server1.example.com, und wir haben eine Website www.example.com darauf mit dem Dokumentenstamm /var/www/www.example.com/web.

Stellen Sie sicher, dass das System auf dem neuesten Stand ist, bevor Sie mit der Installation von Munin beginnen, führen Sie aus:

apt update  
apt upgrade

Apache wird verwendet, um die Munin-Seiten anzuzeigen, das Apache fcgid-Modul ist für die Zoomfunktion der Munin-Grafiken erforderlich. Installieren Sie Apache und das fcgid-Modul mit apt.

apt install apache2 libcgi-fast-perl libapache2-mod-fcgid

Aktivieren Sie das fcgid-Modul in Apache.

a2enmod fcgid

2 Munin installieren und konfigurieren

Um Munin auf Debian zu installieren, tun wir dies:

apt install munin munin-node munin-plugins-extra

Wenn der Server MySQL oder MariaDB ausführt, aktivieren Sie einige zusätzliche Munin-Plugins zur Überwachung von MySQL:

cd /etc/munin/plugins  
ln -s /usr/share/munin/plugins/mysql_ mysql_  
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes  
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb  
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_  
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries  
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries  
ln -s /usr/share/munin/plugins/mysql_threads mysql_threads

Als nächstes müssen wir die Munin-Konfigurationsdatei /etc/munin/munin.conf bearbeiten. Kommentieren Sie die Zeilen dbdir, htmldir, logdir, rundir und tmpldir aus (die Standardwerte sind in Ordnung). Wir möchten, dass Munin den Namen server1.example.com anstelle von localhost.localdomain in der HTML-Ausgabe verwendet, daher ersetzen wir localhost.localdomain durch server1.example.com im Abschnitt des einfachen Hostbaums. Ohne die Kommentare sieht die geänderte Datei so aus:

nano /etc/munin/munin.conf
# Beispielkonfigurationsdatei für Munin, generiert von 'make build'
  
# Die nächsten drei Variablen geben den Speicherort der RRD
# Datenbanken, die HTML-Ausgabe, Protokolle und die Lock/PID-Dateien an. Sie müssen alle
# beschreibbar sein für den Benutzer, der munin-cron ausführt. Sie sind alle
# auf die Werte voreingestellt, die Sie hier sehen.
#  
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin  
  
# Wo nach den HTML-Vorlagen gesucht werden soll
#  
tmpldir /etc/munin/templates  
  
# Wo nach den statischen www-Dateien gesucht werden soll
#  
#staticdir /etc/munin/static  
  
# temporäre cgi-Dateien sind hier. beachten Sie, dass sie für
# den cgi-Benutzer (normalerweise nobody oder httpd) beschreibbar sein müssen.
#  
# cgitmpdir /var/lib/munin/cgi-tmp

# (Genau ein) Verzeichnis, um alle Dateien einzuschließen.
includedir /etc/munin/munin-conf.d
[...]
# ein einfacher Hostbaum  
[server1.example.com]  
 address 127.0.0.1  
 use_node_name yes
[...]

Wir sollten die Apache 2.4-Konfigurationsdatei für Munin /etc/munin/apache24.conf finden - sie definiert ein Alias namens munin für das HTML-Ausgabeverzeichnis von Munin /var/cache/munin/www, was bedeutet, dass wir munin von allen Websites auf diesem Server über den relativen Pfad /munin (z. B. http://www.example.com/munin) aufrufen können.

Die Apache Munin-Konfiguration ist standardmäßig nicht aktiviert, dies wurde von Debian Wheezy auf Jessie geändert. Das neue Konfigurationsverzeichnis ist /etc/apache2/conf-enabled anstelle von /etc/apache2/conf.d, das in älteren Versionen wie Wheezy und Squeeze verwendet wurde.

Führen Sie diese Befehle aus, um die Konfiguration zu aktivieren und in Apache zu laden.

cd /etc/apache2/conf-enabled/  
ln -s /etc/munin/apache24.conf munin.conf  
service apache2 restart

Stellen Sie sicher, dass Sie die Zeile Require local auskommentieren und stattdessen Require all granted und Options FollowSymLinks SymLinksIfOwnerMatch hinzufügen (ansonsten können Sie die Munin-Ausgabe nur von localhost aus aufrufen):

nano /etc/munin/apache24.conf
Alias /munin /var/cache/munin/www  
  
 # Require local  
 Require all granted  
 Options FollowSymLinks SymLinksIfOwnerMatch  
  
  
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph  
  
 # Require local  
 Require all granted  
 Options FollowSymLinks SymLinksIfOwnerMatch  
   
 SetHandler fcgid-script  
   
   
 SetHandler cgi-script  
   

Starten Sie Apache neu:

systemctl restart apache2.service

Starten Sie dann Munin neu:

systemctl restart munin-node.service

Warten Sie nun ein paar Minuten, damit Munin seine erste Ausgabe erzeugen kann, und gehen Sie dann in Ihrem Browser zu http://www.example.com/munin/, und Sie sehen die ersten Statistiken:

Munin Prozessmonitor

(Dies ist nur ein kleiner Auszug aus den vielen Grafiken, die Munin erzeugt…)

3 Passwortschutz für das Munin-Ausgabeverzeichnis (Optional, aber sehr empfohlen)

Jetzt ist es eine gute Idee, das Munin-Ausgabeverzeichnis 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, müssen wir die Passwortdatei /etc/munin/munin-htpasswd erstellen. Wir möchten uns mit dem Benutzernamen admin anmelden, also tun wir dies:

htpasswd -c /etc/munin/munin-htpasswd admin

Geben Sie ein Passwort für admin ein. Öffnen Sie dann erneut /etc/munin/apache24.conf…

nano /etc/munin/apache24.conf

… kommentieren Sie “Require all granted” aus und fügen Sie die Zeilen hinzu, die ich rot markiert habe:

Alias /munin /var/cache/munin/www  
  
 # Require local  
 # Require all granted  
 AuthUserFile /etc/munin/munin-htpasswd  
 AuthName "Munin"  
 AuthType Basic  
 Require valid-user  
 Options None  
  
  
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph  
  
 # Require local  
 # Require all granted  
 AuthUserFile /etc/munin/munin-htpasswd  
 AuthName "Munin"  
 AuthType Basic  
 Require valid-user  
   
 SetHandler fcgid-script  
   
   
 SetHandler cgi-script  
   

Starten Sie Apache dann neu:

systemctl restart apache2.service

4 Zusätzliche Module in Munin aktivieren

Der Munin-Befehl “munin-node-configure –suggest” kann verwendet werden, um Empfehlungen für zusätzliche Munin-Module zu erhalten, die auf dem Server aktiviert werden können. Führen Sie aus:

munin-node-configure --suggest

Die Ausgabe sollte ähnlich aussehen:

Zusätzliche Munin-Modulvorschläge

Die Spalte “used” zeigt, ob ein Modul aktiviert ist, die Spalte “Suggestions” zeigt, ob der Server einen Dienst ausführt, der von diesem Modul überwacht werden kann. Erstellen Sie einen Symlink für das Modul in /etc/munin/plugins, um es zu aktivieren.

Hier werde ich beispielsweise die apache_* Module aktivieren:

cd /etc/munin/plugins  
ln -s /usr/share/munin/plugins/apache_accesses  
ln -s /usr/share/munin/plugins/apache_processes  
ln -s /usr/share/munin/plugins/apache_volume

Starten Sie Munin neu, um die neue Konfiguration zu laden.

systemctl restart munin-node.service

5 Monit installieren und konfigurieren

Monit ist im Debian Buster Backports-Repository verfügbar. Dieses Repository ist standardmäßig nicht aktiviert, also müssen wir es zuerst hinzufügen. Führen Sie diesen Befehl aus:

echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list

und aktualisieren Sie dann die Paketlisten mit:

apt update

Um Monit zu installieren, tun wir dies:

apt install monit

Jetzt müssen wir /etc/monit/monitrc bearbeiten. Die Standard-/etc/monit/monitrc hat viele Beispiele, und Sie finden weitere Konfigurationsbeispiele auf http://mmonit.com/monit/documentation/. In meinem Fall möchte ich jedoch proftpd, sshd, 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 howtoforge in die Weboberfläche einloggen, und ich möchte, dass Monit E-Mail-Benachrichtigungen an root@localhost sendet, sodass meine Datei so aussieht (ich habe Beispiele für andere Daemons zur Konfiguration hinzugefügt, damit Sie die Datei an Ihre Bedürfnisse anpassen können):

cp /etc/monit/monitrc /etc/monit/monitrc_orig  
cat /dev/null > /etc/monit/monitrc  
nano /etc/monit/monitrc
set daemon 60  
set logfile syslog facility log_daemon  
set mailserver localhost  
set mail-format { from: [email protected] }  
set alert root@localhost  
set httpd port 2812 and  
 SSL ENABLE  
 PEMFILE /var/certs/monit.pem  
 allow admin:howtoforge  
  
check process sshd with pidfile /var/run/sshd.pid  
 start program "/usr/sbin/service ssh start"  
 stop program "/usr/sbin/service ssh stop"  
 if failed port 22 protocol ssh then restart  
 if 5 restarts within 5 cycles then timeout  
  
check process apache with pidfile /var/run/apache2/apache2.pid  
 group www  
 start program = "/usr/sbin/service apache2 start"  
 stop program = "/usr/sbin/service apache2 stop"  
 if failed host localhost 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  
   
# ---------------------------------------------------------------------------------------------  
# HINWEIS: Ersetzen Sie example.pid durch den PID-Namen Ihres Servers, der Name hängt vom Hostnamen ab  
# ---------------------------------------------------------------------------------------------  
#check process mysql with pidfile /var/lib/mysql/example.pid  
# group database  
# start program = "/usr/sbin/service mysql start"  
# stop program = "/usr/sbin/service mysql stop"  
# if failed host 127.0.0.1 port 3306 then restart  
# if 5 restarts within 5 cycles then timeout  
  
#check process proftpd with pidfile /var/run/proftpd.pid  
# start program = "/usr/sbin/service proftpd start"  
# stop program = "/usr/sbin/service proftpd stop"  
# if failed port 21 protocol ftp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process postfix with pidfile /var/spool/postfix/pid/master.pid  
# group mail  
# start program = "/usr/sbin/service postfix start"  
# stop program = "/usr/sbin/service postfix stop"  
# if failed port 25 protocol smtp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process nginx with pidfile /var/run/nginx.pid  
# start program = "/usr/sbin/service nginx start"  
# stop program = "/usr/sbin/service nginx stop"  
# if failed host 127.0.0.1 port 80 then restart  
#  
#check process memcached with pidfile /var/run/memcached.pid  
# start program = "/usr/sbin/service memcached start"  
# stop program = "/usr/sbin/service memcached stop"  
# if failed host 127.0.0.1 port 11211 then restart  
#  
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid  
# start program = "/usr/sbin/service pure-ftpd-mysql start"  
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"  
# if failed port 21 protocol ftp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process named with pidfile /var/run/named/named.pid  
# start program = "/usr/sbin/service bind9 start"  
# stop program = "/usr/sbin/service bind9 stop"  
# if failed host 127.0.0.1 port 53 type tcp protocol dns then restart  
# if failed host 127.0.0.1 port 53 type udp protocol dns then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process ntpd with pidfile /var/run/ntpd.pid  
# start program = "/usr/sbin/service ntp start"  
# stop program = "/usr/sbin/service ntp stop"  
# if failed host 127.0.0.1 port 123 type udp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process mailman with pidfile /var/run/mailman/mailman.pid  
# group mail  
# start program = "/usr/sbin/service mailman start"  
# stop program = "/usr/sbin/service mailman stop"  
#  
#check process amavisd with pidfile /var/run/amavis/amavisd.pid  
# group mail  
# start program = "/usr/sbin/service amavis start"  
# stop program = "/usr/sbin/service amavis stop"  
# if failed port 10024 protocol smtp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-imap with pidfile /var/run/courier/imapd.pid  
# group mail  
# start program = "/usr/sbin/service courier-imap start"  
# stop program = "/usr/sbin/service courier-imap stop"  
# if failed host localhost port 143 type tcp protocol imap then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid  
# group mail  
# start program = "/usr/sbin/service courier-imap-ssl start"  
# stop program = "/usr/sbin/service courier-imap-ssl stop"  
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid  
# group mail  
# start program = "/usr/sbin/service courier-pop start"  
# stop program = "/usr/sbin/service courier-pop stop"  
# if failed host localhost port 110 type tcp protocol pop then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid  
# group mail  
# start program = "/usr/sbin/service courier-pop-ssl start"  
# stop program = "/usr/sbin/service courier-pop-ssl stop"  
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process dovecot with pidfile /var/run/dovecot/master.pid  
# group mail  
# start program = "/usr/sbin/service dovecot start"  
# stop program = "/usr/sbin/service dovecot stop"  
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart  
# if 5 restarts within 5 cycles then timeout

Die Konfigurationsdatei ist ziemlich selbsterklärend; wenn Sie sich über eine Option unsicher sind, werfen Sie einen Blick in die Monit-Dokumentation: http://mmonit.com/monit/documentation/monit.html

Im Apache-Teil der Monit-Konfiguration finden Sie dies:

   if failed host localhost port 80 protocol http
      and request "/monit/token" then restart

was bedeutet, dass Monit versucht, sich mit localhost über Port 80 zu verbinden und die Datei /monit/token zuzugreifen, die /var/www/html/monit/token ist, da der Dokumentenstamm unserer Website /var/www/html ist. Wenn Monit nicht erfolgreich ist, bedeutet das, dass Apache nicht läuft, und Monit wird versuchen, es neu zu starten. Jetzt müssen wir die Datei /var/www/html/monit/token erstellen und einen zufälligen String hinein schreiben:

mkdir /var/www/html/monit  
echo "hello" > /var/www/html/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 könnte so aussehen:

nano /var/certs/monit.cnf
# RSA-Zertifikate erstellen - Server

[ req ]
default_bits = 2048
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 = server

Jetzt 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 dhparam 2048 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem

Schließlich können wir Monit starten:

service monit restart

Jetzt zeigen Sie in Ihrem Browser auf https://www.example.com:2812/ (stellen Sie sicher, dass Port 2812 nicht von Ihrer Firewall blockiert wird), melden Sie sich mit admin und howtoforge an, und Sie sollten die Monit-Weboberfläche sehen. Sie sollte so aussehen:

Monit Service-Manager auf Debian

(Hauptbildschirm)

SSH-Prozessstatus

Apache-Prozessstatus

(SSHd-Statusseite)

Je nach Ihrer Konfiguration in /etc/monit/monitrc wird Monit Ihre Dienste neu starten, wenn sie ausfallen, und Benachrichtigungs-E-Mails senden, wenn sich die Prozess-IDs der Dienste ändern usw.

Um den Monit-Status in der Shell zu erhalten, führen Sie den Befehl “monit status” aus:

monit status

Der Befehl zeigt den Status aller überwachten Dienste an.

Monit-Status in der Befehlszeile

6 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.