Serverüberwachung mit Munin und Monit auf Ubuntu 16.04 LTS (Xenial Xerus)
Dieses Tutorial zeigt Ihnen, wie Sie einen Ubuntu 16.04 Server mit Munin und Monit überwachen können. Munin erstellt schöne Grafiken über fast jeden Aspekt Ihres Servers, während Monit die Verfügbarkeit von Diensten wie Apache, MySQL, Postfix überprüft und die entsprechenden Maßnahmen wie einen Neustart durchführt, wenn es feststellt, dass sich ein Dienst nicht wie erwartet verhält. Die Kombination aus beidem bietet Ihnen eine vollständige Überwachung: Grafiken, mit denen Sie aktuelle oder bevorstehende Probleme erkennen können, und einen Watchdog, der die Verfügbarkeit der überwachten Dienste sicherstellt. Dieses Tutorial enthält zwei (optionale) Kapitel zur Integration von Munin und Monit in ISPConfig 3.1.
1 Vorbemerkung
Der Hostname unseres Systems ist server1.example.com, und wir haben eine Website www.example.com mit dem Dokumentenstamm /var/www/www.example.com/web..
Die folgenden Schritte müssen als root-Benutzer durchgeführt werden. Um Root-Benutzer auf Ihrem Server zu werden, führen Sie diesen Befehl aus:
sudo -s
Stellen Sie sicher, dass das System auf dem neuesten Stand ist, bevor Sie mit der Installation von Munin, run beginnen:
apt-get update apt-get upgrade
Apache wird verwendet, um die Munin-Seiten anzuzeigen, das apache fcgid-Modul wird für die Zoom-Funktion des Munin-Diagramms benötigt. Ich werde apache und das libapache2-mod-fcgid Modul mit apt installieren.
apt-get -y install apache2 libcgi-fast-perl libapache2-mod-fcgid
Aktivieren Sie das fcgid-Modul im Apache.
a2enmod fcgid
2 Installation und Konfiguration von Munin
Um Munin unter Ubuntu 16.04 zu installieren, führen Sie die folgenden Befehle aus:
apt-get -y install munin munin-node munin-plugins-extra
Wenn auf dem Server MySQL oder MariaDB läuft, aktivieren Sie die wenigen zusätzlichen Munin-Plugins, um MySQL zu überwachen:
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_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/munin/munin.conf bearbeiten. Entkommentiere die Zeilen dbdir, htmldir, logdir, rundir und tmpldir (die Standardwerte sind in Ordnung). Wir möchten, dass Munin in der HTML-Ausgabe den Namen server1.example.com anstelle von localhost.localdomain verwendet, daher ersetzen wir localhost.localdomain durch server1.example.com im Abschnitt simple host tree. Ohne die Kommentare sieht die geänderte Datei so aus:
nano /etc/munin/munin.conf
# Example configuration file for Munin, generated by 'make build' # The next three variables specifies where the location of the RRD # databases, the HTML output, logs and the lock/pid files. They all # must be writable by the user running munin-cron. They are all # defaulted to the values you see here. # dbdir /var/lib/munin htmldir /var/cache/munin/www logdir /var/log/munin rundir /var/run/munin # Where to look for the HTML templates # tmpldir /etc/munin/templates # Where to look for the static www files # #staticdir /etc/munin/static # temporary cgi files are here. note that it has to be writable by # the cgi user (usually nobody or httpd). # # cgitmpdir /var/lib/munin/cgi-tmp # (Exactly one) directory to include all files from. includedir /etc/munin/munin-conf.d [...] # a simple host tree [server1.example.com] address 127.0.0.1 use_node_name yes [...]
Wir sollten die Apache-Konfigurationsdatei für Munin /etc/munin/apache.conf finden – sie definiert einen Alias namens munin in munins HTML-Ausgabeverzeichnis /var/cache/munin/www, was bedeutet, dass wir von allen Websites auf diesem Server aus über den relativen Pfad /munin (z.B. http://www.example.com/munin) auf munin zugreifen können.
Nun werden wir die munin.conf-Datei für den Apache bearbeiten, um den Zugriff von externen IP-Adressen zu ermöglichen. Erstellen Sie ein Backup der Originaldatei:
mv /etc/munin/apache24.conf /etc/munin/apache24.conf_bak
Öffnen Sie die neue Datei mit einem Editor:
nano /etc/munin/apache24.conf
Und fügen Sie den Inhalt unten ein:
Alias /munin /var/cache/munin/www <Directory /var/cache/munin/www> # Require local Require all granted Options FollowSymLinks SymLinksIfOwnerMatch Options None </Directory> ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph <Location /munin-cgi/munin-cgi-graph> # Require local Require all granted Options FollowSymLinks SymLinksIfOwnerMatch <IfModule mod_fcgid.c> SetHandler fcgid-script </IfModule> <IfModule !mod_fcgid.c> SetHandler cgi-script </IfModule> </Location>
Starten Sie den Apache neu:
service apache2 restart
Dann starten Sie Munin neu:
service munin-node restart
Warten Sie nun ein paar Minuten, damit Munin seine erste Ausgabe produzieren kann, und gehen Sie dann in Ihrem Browser auf http://www.example.com/munin/, und Sie sehen die ersten Statistiken:
(Dies ist nur ein kleiner Auszug aus den vielen Grafiken, die munin produziert….)
3 Passwortschutz für das Munin Output Directory (optional, aber dringend empfohlen)
Jetzt ist es eine gute Idee, das munin Output Directory mit einem Passwort zu schützen, es sei denn, Sie möchten, dass jeder jede kleine Statistik über Ihren Server sehen kann.
Dazu müssen wir die Passwortdatei /etc/munin/munin/munin/munin-htpasswd erstellen. Wir möchten uns mit dem Benutzernamen admin anmelden, also tun wir das:
htpasswd -c /etc/munin/munin-htpasswd admin
Geben Sie ein Passwort für den Administrator ein. Öffnen Sie dann wieder /etc/munin/apache.conf…..
nano /etc/munin/apache24.conf
…. kommentieren Sie: „Benötige alle gewährten und füge die Zeilen hinzu, die ich rot markiert habe:
Alias /munin /var/cache/munin/www <Directory /var/cache/munin/www> # Require local # Require all granted AuthUserFile /etc/munin/munin-htpasswd AuthName "Munin" AuthType Basic Require valid-user Options None </Directory> ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph <Location /munin-cgi/munin-cgi-graph> # Require local # Require all granted AuthUserFile /etc/munin/munin-htpasswd AuthName "Munin" AuthType Basic Require valid-user <IfModule mod_fcgid.c> SetHandler fcgid-script </IfModule> <IfModule !mod_fcgid.c> SetHandler cgi-script </IfModule> </Location>
Starten Sie dann den Apache neu:
service apache2 restart
4 Zusätzliche Module in Munin aktivieren
Mit dem Munin-Befehl „munin-node-configure –suggest“ können Sie Empfehlungen für weitere Munin-Module erhalten, die auf dem Server aktiviert werden können. Lauf:
munin-node-configure --suggest
Die Ausgabe sollte ähnlich sein:
Die Spalte „used“ zeigt an, ob ein Modul aktiviert ist, die Spalte „Suggestions“ zeigt an, 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 zum Beispiel die Module apache_* 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.
service munin-node restart
5 Munin in ISPConfig konfigurieren (optional)
Das ISPConfig Hosting Control Panel bietet die Möglichkeit, Munin-Daten innerhalb des ISPConfig Monitor-Moduls anzuzeigen. Die Munin-Daten werden in einem Iframe geladen, da die meisten Browser Inhalte blockieren, die von http innerhalb einer https-Site geladen werden sollen, müssen wir einen Weg finden, um auf die Munin-Statistiken über SSL zuzugreifen. Der einfachste Weg ist die Verwendung des SSL-fähigen ISPConfig vhost, indem Sie einen Symlink innerhalb des ISPConfig-Webverzeichnisses zum Munin www Datenverzeichnis erstellen.
ln -s /var/cache/munin/www /usr/local/ispconfig/interface/web/munin
Jetzt können wir Munin in einem Browser mit https://server1.example.com:8080/munin über den ISPConfig apache vhost erreichen.
Der nächste Schritt ist das Hinzufügen der Konfiguration in ISPConfig.
Melden Sie sich bei ISPConfig als Administrator (admin) Benutzer an und gehen Sie zu System > Server config, geben Sie die URL, den Benutzernamen und das Passwort für Munin ein, wie unten gezeigt.
Stellen Sie sicher, dass Sie https:// und Port 8080 in der munin URL verwenden.
6 Monit installieren und konfigurieren
Um Monit zu installieren, tun wir dies:
apt-get -y install monit
Jetzt müssen wir /etc/monit/monit/monitrc bearbeiten. Die Standardeinstellung /etc/monit/monit/monitrc enthält viele Beispiele, und weitere Konfigurationsbeispiele finden Sie unter http://mmonit.com/monit/documentation/. In meinem Fall möchte ich jedoch proftpd, sshd, mysql, apache und postfix überwachen, ich möchte das Monit-Webinterface auf Port 2812 aktivieren, ich möchte ein https-Webinterface, ich möchte mich mit dem Benutzernamen admin und dem Passwort howtoforge in das Webinterface einloggen, und ich möchte, dass Monit E-Mail-Benachrichtigungen an root@localhost sendet, so dass 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: monit@server1.example.com } 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 #check process mysql with pidfile /var/run/mysqld/mysqld.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 143 type tcp 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 auf Port 80 zu verbinden und auf die Datei /monit/token zuzugreifen, die /var/wwww/html/monit/token ist, da die Dokumentenwurzel unserer Website /var/www/html ist. Wenn Monit nicht erfolgreich ist, bedeutet dies, dass der Apache nicht läuft und Monit ihn neu starten wird. Jetzt müssen wir die Datei /var/wwww/html/monit/token erstellen und eine zufällige Zeichenkette in sie schreiben:
mkdir /var/www/html/monit echo "hello" > /var/www/html/monit/token
Als nächstes erstellen wir das pem cert (/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. Es kann so aussehen:
nano /var/certs/monit.cnf
# create RSA certs - Server RANDFILE = ./openssl.rnd [ 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 = 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 1024 >> /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
Richten Sie nun Ihren Browser auf https://www.example.com:2812/ (stellen Sie sicher, dass der Port 2812 nicht von Ihrer Firewall blockiert wird), melden Sie sich mit admin und howtoforge an, und Sie sollten die Monit-Weboberfläche sehen. Es sollte so aussehen:
(Hauptbildschirm)
(Systemstatusseite)
Abhängig von Ihrer Konfiguration in /etc/monit/monit/monitrc startet monit Ihre Dienste neu, wenn sie fehlschlagen und sendet Benachrichtigungs-E-Mails, wenn sich die Prozess-IDs der Dienste ändern, etc.
Um den Monit-Status auf der Shell zu erhalten, führen Sie den Befehl „monit status“ aus:
monit status
Der Befehl zeigt den Status aller überwachten Dienste an.
7 Monit in ISPConfig konfigurieren
Das ISPConfig Server Control Panel kann Monit-Daten innerhalb des Monitor-Moduls anzeigen. Um diese Funktion in ISPConfig zu aktivieren, melden Sie sich bei ISPConfig als Administrator (admin) Benutzer an, gehen Sie zu System > Server config, geben Sie die URL, den Benutzernamen und das Passwort für Monit ein, wie unten gezeigt.
8 Links
- munin: http://munin-monitoring.org/
- monit: http://mmonit.com/monit/