Server Überwachung mit munin und monit auf Mandriva 2008.0

4 Installation und Konfigure von monit

monit scheint nur in bestimmten Mandriva contrib_backports Paketdatenbanken vorhanden zu sein; ich habe es in der carroll.cac.psu.edu Paketdatenbank gefunden, also müssen wir diese nun aktivieren:

urpmi.addmedia contrib_backports ftp://carroll.cac.psu.edu/pub/linux/distributions/mandrivalinux/official/2008.0/i586/media/contrib/backports with media_info/hdlist.cz

Du kannst auch andere contrib_backports Paketdatenbanken versuchen, mit der Hilfe von http://easyurpmi.zarb.org, wenn diese allerdings monit nicht enthalten, musst Du die contrib_backports Paketdatenbank, die Du ausgewählt hast wie folgt entfernen…

urpmi.removemedia contrib_backports

… und einen andere contrib_backports Paketdatenbank versuchen.

Danach installieren wir monit:

urpmi monit

monits Standard Konfigurationsdatei ist /etc/monitrc, in der Du einige Konfigurationsbeispiele findest (mehr Konfigurationsbeispiele findest Du auf http://www.tildeslash.com/monit/doc/examples.php), die alle auskommentiert sind. Wir öffnen diese Datei nun und kommentieren die include /etc/monit.d/* Zeile am Ende aus:

vi /etc/monitrc

[...]
include /etc/monit.d/*
[...]

Dies teilt monit mit, auch in dem Verzeichnis /etc/monit.d nach Konfigurationsdateien zu suchen, daher erstellen wir, anstatt /etc/monitrc zu modifizieren, eine neue Konfigurationsdatei /etc/monit.d/monitrc. In meinem Fall möchte ich proftpd sshd, mysql, apache und postfix überwachen, das monit Web Interface auf Port 2812 aktivieren, ich möchte ein https Web Interface, mich mit dem Benutzernamen admin und dem Passwort test auf dem Web Interface anmelden und ich möchte, dass monit Alarm-Nachrichten per E-Mail an [email protected] sendet, also sieht meine Datei wie folgt aus:

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 pass auf, dass Du nur die Prozesse überprüfst, die auf Deinem Server tatsächlich existieren – sonst wird monit nicht starten. Das heißt, wenn Du monit anweist, Postfix zu überprüfen, obwohl Postfix auf dem System nicht installiert ist, wird monit nicht starten.)

Die Konfigurationsdatei ist sehr selbsterklärend; wenn Du Dir mit einer Option nicht ganz sicher bist, sieh Dir die monit Dokumentation an: http://www.tildeslash.com/monit/doc/manual.php

Im apache Teil der monit Konfiguration findest Du das:

   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, die /var/www/www.example.com/web/monit/token ist, da der Dokumenten-Root unserer Webseite /var/www/www.example.com/web ist. Wenn monit nicht erfolgreich ist, bedeutet das, dass Apache nicht ausgeführt wird und monit es neu starten wird. Nun müssen wir die Datei /var/www/www.example.com/web/monit/token erstellen und schreiben eine zufällige Zeichenfolge hinein:

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 und erstellen unsere Zertifikate. 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            = [email protected]

[ 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

Schließlich können wir monit starten:

/etc/init.d/monit start

Richte Deinen Browser nun auf https://www.example.com:2812/ (pass auf, dass Port 2812 nicht von Deiner Firewall geblockt wird), melde Dich mit Deinem Benutzernamen admin und test an und Du siehts das monit Web Interface. Es sollte wie folgt aussehen:

(Haupt-Screen)

(Apache Status Seite)

Je nach Konfiguration in /etc/monit.d/monitrc, wird monit Deine Dienste neu starten, wenn sie ausfallen und Benachrichtigunsmails senden wenn sich Prozess-IDs der Dienste ändern, etc.

Viel Spaß!

5 Links

Das könnte dich auch interessieren …