In diesem Artikel werde ich beschreiben, wie Sie Ihren Fedora 7-Server mit munin und monit überwachen können. munin erstellt ohne viel Konfiguration nette kleine Grafiken über fast jeden Aspekt Ihres Servers (durchschnittliche Auslastung, Speicherauslastung, CPU-Auslastung, MySQL-Durchsatz, eth0-Verkehr usw.), während monit die Verfügbarkeit von Diensten wie Apache, MySQL, Postfix und Takes prüft die entsprechende Aktion, wie z. B. einen Neustart, wenn festgestellt wird, dass sich ein Dienst nicht wie erwartet verhält. Die Kombination aus beidem bietet Ihnen eine vollständige Überwachung:Grafiken, die Sie aktuelle oder bevorstehende Probleme erkennen lassen (wie „Wir brauchen bald einen größeren Server, unsere durchschnittliche Auslastung steigt rapide.“), und einen Watchdog, der die Verfügbarkeit der überwachten Dienste sicherstellt .
Obwohl Sie mit munin mehr als einen Server überwachen können, besprechen wir hier nur die Überwachung des Systems, auf dem es installiert ist.
Dieses Tutorial wurde für Fedora 7 geschrieben, aber die Konfiguration sollte mit kleinen Änderungen auch für andere Distributionen gelten.
Ich möchte zunächst sagen, dass dies nicht die einzige Möglichkeit ist, ein solches System einzurichten. Es gibt viele Wege, dieses Ziel zu erreichen, aber ich gehe diesen Weg. Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
Der Hostname unseres Systems ist server1.example.com, und wir haben darauf eine Website www.example.com mit dem Dokumentenstammverzeichnis /var/www/www.example.com/web.
2 Installieren und konfigurieren Sie munin
Um Munin auf Fedora 7 zu installieren, gehen wir wie folgt vor:
yum install munin munin-node
Dann erstellen wir die Systemstartlinks 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 /etc/munin/munin.conf bearbeiten. Wir möchten, dass munin seine Ausgabe in das Verzeichnis /var/www/www.example.com/web/monitoring legt, daher ändern wir den Wert von htmldir und wir möchten, dass es den Namen server1.example.com anstelle von localhost verwendet. localdomain in der HTML-Ausgabe, daher ersetzen wir localhost.localdomain durch server1.example.com. Ohne die Kommentare sieht die geänderte Datei so 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 ändern seinen Besitz auf den Benutzer und die Gruppe munin, andernfalls kann munin seine Ausgabe nicht in diesem Verzeichnis platzieren. 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
Warten Sie nun ein paar Minuten, damit munin seine erste Ausgabe erzeugen kann, und gehen Sie dann in Ihrem Browser auf http://www.example.com/monitoring/, und Sie sehen die ersten Statistiken. Nach ein paar Tagen könnte das so aussehen:
(Dies ist nur ein kleiner Auszug aus den vielen Grafiken, die munin produziert...)
3 Das munin-Ausgabeverzeichnis mit einem Passwort schützen (optional)
Jetzt ist es eine gute Idee, das Verzeichnis /var/www/www.example.com/web/monitoring mit einem Passwort zu schützen, es sei denn, Sie möchten, dass jeder jede noch so kleine Statistik über Ihren Server sehen kann.
Dazu 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 Passwortdatei /var/www/www.example.com/.htpasswd erstellen. Wir möchten uns mit dem Benutzernamen admin anmelden, also tun wir Folgendes:
htpasswd -c /var/www/www.example.com/.htpasswd admin
Geben Sie ein Passwort für den Administrator ein und Sie sind fertig!
4 Monit installieren und konfigurieren
monit ist nicht in den offiziellen Repositories von Fedora 7 verfügbar, sondern in den RPMforge-Repositories (siehe http://dag.wieers.com/rpm/FAQ.php#B2 für Anweisungen). Wir installieren das RPMforge-Paket für RHEL 5, das auch für 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 Systemstartlinks für monit:
chkconfig --levels 235 monit on
Die Standardkonfigurationsdatei von monit ist /etc/monit.conf, wo Sie einige Konfigurationsbeispiele finden können (weitere Konfigurationsbeispiele finden Sie unter http://www.tildeslash.com/monit/doc/examples.php), die alle auskommentiert sind. aber es weist monit an, auch im Verzeichnis /etc/monit.d nach Konfigurationsdateien zu suchen, daher erstellen wir, anstatt /etc/monit.conf zu modifizieren, eine neue Konfigurationsdatei /etc/monit.d/monitrc. In meinem Fall möchte ich proftpd, sshd, mysql, Apache und Postfix überwachen, ich möchte die Monit-Webschnittstelle auf Port 2812 aktivieren, ich möchte eine https-Webschnittstelle, ich möchte
vi /etc/monit.d/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 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 stellen Sie sicher, dass Sie nur Prozesse prüfen, die wirklich auf Ihrem Server vorhanden sind - andernfalls startet Monit nicht. Das heißt, wenn Sie Monit sagen, dass es Postfix prüfen soll, Postfix aber nicht auf dem System installiert ist, startet Monit nicht.)
Die Konfigurationsdatei ist ziemlich selbsterklärend; Wenn Sie sich bei einer Option nicht sicher 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 Folgendes:
if failed host www.example.com port 80 protocol http and request "/monit/token" then restart |
was bedeutet, dass monit versucht, sich auf Port 80 mit www.example.com zu verbinden und versucht, auf die Datei /monit/token zuzugreifen, die /var/www/www.example.com/web/monit/token ist, weil das Dokumenten-Stammverzeichnis unserer Website ist /var/www/www.example.com/web. Wenn monit nicht erfolgreich ist, bedeutet dies, dass Apache nicht läuft und monit ihn neu starten wird. Jetzt müssen wir die Datei /var/www/www.example.com/web/monit/token erstellen und eine zufällige Zeichenfolge hineinschreiben:
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-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. Das 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 = server |
Jetzt 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
Richten Sie nun Ihren Browser auf https://www.example.com:2812/ (stellen Sie sicher, dass Port 2812 nicht von Ihrer Firewall blockiert wird), melden Sie sich mit admin an und testen Sie, und Sie sollten die Monit-Weboberfläche sehen. Es sollte so aussehen:
(Hauptbildschirm)
(Apache-Statusseite)
Abhängig von Ihrer Konfiguration in /etc/monit.d/monitrc startet monit Ihre Dienste neu, wenn sie ausfallen, und sendet Benachrichtigungs-E-Mails, wenn sich die Prozess-IDs von Diensten ändern usw.
Viel Spaß!
5 Links
- munin:http://munin.projects.linpro.no
- monit:http://www.tildeslash.com/monit/index.php