GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Serverüberwachung mit Munin und Monit auf Ubuntu 14.04 LTS

Dieses Tutorial zeigt Ihnen, wie Sie einen Ubuntu 14.04-Server mit Munin und Monit überwachen. Munin erstellt schöne Diagramme zu fast jedem Aspekt Ihres Servers, während Monit die Verfügbarkeit von Diensten wie Apache, MySQL, Postfix prüft und die entsprechenden Maßnahmen ergreift, z. B. einen Neustart, wenn es feststellt, 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, und einen Watchdog, der die Verfügbarkeit der überwachten Dienste sicherstellt. Dieses Tutorial enthält zwei (optionale) Kapitel über die Integration von Munin und Monit in ISPConfig.

1 Vorbemerkung

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

Die folgenden Schritte müssen als Root-Benutzer ausgeführt werden. Führen Sie diesen Befehl aus, um Root-Benutzer auf Ihrem Server zu werden:

sudo su

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

apt-get update
apt-get upgrade

Apache wird verwendet, um die Munin-Seiten anzuzeigen, das Apache fcgid-Modul ist für die Munin-Graph-Zoom-Funktion erforderlich. Ich werde Apache und das Modul libapache2-mod-fcgid mit apt installieren.

apt-get 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 Ubuntu 14.04 zu installieren, führen Sie die folgenden Befehle aus:

apt-get install munin munin-node munin-plugins-extra

Wenn auf dem Server MySQL oder MariaDB ausgeführt wird, aktivieren Sie einige zusätzliche Munin-Plug-ins, 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.conf bearbeiten. Entkommentieren Sie die Zeilen dbdir, htmldir, logdir, rundir und tmpldir (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 einfachen Hostbaumabschnitt. 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 - Es definiert einen Aliasnamen namens munin für Munins HTML-Ausgabeverzeichnis /var/cache/munin/www, was bedeutet, dass wir von allen Websites auf diesem Server aus auf munin zugreifen können, indem wir den relativen Pfad /munin verwenden (z. B. http://www.example.com /munin).

Die Datei apache.conf, die mit Ubuntu 14.04 geliefert wird, enthält immer noch die alte Apache 2.2-Syntax, die für Apache 2.4 nicht korrekt ist, daher ersetzen wir diese Datei durch eine neue. Zuerst machen wir ein Backup der alten Datei.

mv /etc/munin/apache.conf /etc/munin/apache.conf_bak

Öffnen Sie die neue Datei mit einem Editor:

nano /etc/munin/apache.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>

Apache neu starten:

service apache2 restart

Starten Sie dann Munin neu:

service 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/munin/, und Sie sehen die ersten Statistiken:

(Dies ist nur ein kleiner Auszug aus den vielen Grafiken, die munin produziert...)

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

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

Geben Sie ein Passwort für den Administrator ein. Öffnen Sie dann erneut /etc/munin/apache.conf ...

nano /etc/munin/apache.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
<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 Apache neu:

service apache2 restart

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. Ausführen:

munin-node-configure --suggest

Die Ausgabe sollte ungefähr so ​​aussehen:

Die Spalte „benutzt“ zeigt an, ob ein Modul aktiviert ist, die Spalte „Vorschläge“ zeigt an, ob der Server einen Dienst ausführt, der von diesem Modul überwacht werden kann. Erstellen Sie einen symbolischen Link 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 Konfigurieren Sie Munin in ISPConfig (optional)

Das ISPConfig Hosting Control Panel hat eine Option, um Munin-Daten innerhalb des ISPConfig Monitor-Moduls anzuzeigen. Die Munin-Daten werden in einem Iframe geladen, da die meisten Browser das Laden von Inhalten von http innerhalb einer https-Site blockieren, müssen wir einen Weg finden, über SSL auf die Munin-Statistiken zuzugreifen. Der einfachste Weg ist, dafür den SSL-fähigen ISPConfig-vhost zu verwenden, indem Sie innerhalb des ISPConfig-Webverzeichnisses einen symbolischen Link zum www-Datenverzeichnis von Munin erstellen.

ln -s /var/cache/munin/www /usr/local/ispconfig/interface/web/munin

Jetzt können wir in einem Browser mit https://server1.example.com:8080/munin auf Munin zugreifen durch den ISPConfig Apache vhost.

Der nächste Schritt ist das Hinzufügen der Konfiguration in ISPConfig.

Melden Sie sich bei ISPConfig als Administrator (admin) an und gehen Sie zu System> Serverkonfiguration, geben Sie die URL, den Benutzernamen und das Passwort für Munin wie unten gezeigt ein.

Stellen Sie sicher, dass Sie https:// und Port 8080 in der Munin-URL verwenden.

6 Monit installieren und konfigurieren

Um Monit zu installieren, gehen wir wie folgt vor:

apt-get install monit

Jetzt müssen wir /etc/monit/monitrc bearbeiten. Die Standardeinstellung /etc/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 die Monit-Weboberfläche auf Port 2812 aktivieren, ich möchte eine https-Weboberfläche, ich möchte mich mit dem Benutzernamen bei der Weboberfläche anmelden admin und das Passwort howtoforge, und ich möchte, dass Monit E-Mail-Benachrichtigungen an [email protected] sendet, also sieht meine Datei so aus (ich habe der Konfiguration Beispiele für andere Daemons 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 [email protected]
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 bei einer Option nicht sicher sind, werfen Sie einen Blick in die Monit-Dokumentation:http://mmonit.com/monit/documentation/monit.html

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

   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 versucht, auf die Datei /monit/token zuzugreifen, die /var/www/html/monit/token ist, weil das Dokumentenstammverzeichnis unserer Website /var/www/html ist. Wenn Monit keinen Erfolg hat, bedeutet dies, dass Apache nicht läuft und Monit ihn neu starten wird. Jetzt müssen wir die Datei /var/www/html/monit/token erstellen und eine zufällige Zeichenfolge hineinschreiben:

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. Das 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            = [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 1024 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem

Endlich können wir Monit starten:

service 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 und howtoforge an, und Sie sollten die Monit-Weboberfläche sehen. Es sollte so aussehen:

(Hauptbildschirm)

(SSHd-Statusseite)

Abhängig von Ihrer Konfiguration in /etc/monit/monitrc startet monit Ihre Dienste neu, wenn sie ausfallen, und sendet Benachrichtigungs-E-Mails, wenn sich die Prozess-IDs von Diensten ändern usw.

Um den Monit-Status auf der Shell abzurufen, führen Sie den Befehl „monit status“ aus:

monit status

Der Befehl zeigt den Status aller überwachten Dienste an.

7 Konfigurieren Sie Monit in ISPConfig 

Das ISPConfig Server Control Panel kann Monit-Daten in seinem Monitor-Modul anzeigen. Um diese Funktion in ISPConfig zu aktivieren, melden Sie sich bei ISPConfig als Administrator (admin) an, gehen Sie zu System> Serverkonfiguration, geben Sie die URL, den Benutzernamen und das Passwort für Monit ein, wie unten gezeigt.

  • munin:http://munin-monitoring.org/
  • monit:http://mmonit.com/monit/

Ubuntu
  1. So richten Sie Kerberos-Server und -Client unter Ubuntu 18.04 LTS ein

  2. So installieren und sichern Sie Redis unter Ubuntu 18.04 LTS

  3. Serverüberwachung mit Shinken auf Ubuntu 16.04

  4. Serverüberwachung mit OpenNMS auf Ubuntu 16.04

  5. So installieren und verwenden Sie Telnet unter Ubuntu 20.04 LTS

Serverüberwachung mit munin und monit auf CentOS 5.2

Serverüberwachung mit Munin und Monit auf CentOS 7

Serverüberwachung mit Munin und Monit auf CentOS 7.2

Serverüberwachung mit munin und monit auf Fedora 7

So konfigurieren Sie einen NTP-Server und -Client unter Ubuntu 20.04 LTS

So installieren und konfigurieren Sie Monit Monitoring Server unter Ubuntu 20.04 LTS