Einführung
Monit ist eine kostenlose Open Source-Dienstüberwachungsanwendung, die verschiedene ereignisbasierte Aktionen ausführen kann. Monit kann E-Mail-Benachrichtigungen senden, einen Dienst oder eine Anwendung neu starten oder andere Aktionen ausführen.
Dieses Tutorial baut auf einem grundlegenden LEMP-Stack auf (Linux, Nginx, MySQL, PHP). Monit wird integriert, um alle Dienste im Stack zu überwachen und den Root-Benutzer auf widrige Umstände aufmerksam zu machen.
Ein optionaler externer Monit-Server kann auch zur Fernüberwachung einer Webanwendung oder anderer Dienste verwendet werden.
Voraussetzungen
-
Bevor wir beginnen, müssen Sie zuerst ein Ubuntu 14.04-Droplet einrichten
-
Sie benötigen ein Standardbenutzerkonto mit den Berechtigungen sudo
-
In diesem Lernprogramm wird einem vorhandenen LEMP-Stapel Monit hinzugefügt. Ein Tutorial zum Erstellen eines ersten LEMP-Stacks finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14 -04 [So installieren Sie den Linux-, Nginx-, MySQL-, PHP- (LEMP-) Stack unter Ubuntu 14.04]
-
Optional: Wenn Sie eine Remotewebsite, einen DNS oder einen Mailserver überwachen möchten, sollte dieser Server mit einer öffentlich zugänglichen Domäne oder IP-Adresse eingerichtet sein (weitere Informationen in Schritt 6).
Schritt 1 - Konfigurieren Sie die E-Mail-Zustellung für Monit-Benachrichtigungen
Ein Teil der Systemüberwachung umfasst normalerweise E-Mail-Benachrichtigungen für Warnungen. Daher muss eine ordnungsgemäße E-Mail-Zustellung vorhanden sein, damit Monit E-Mail-Benachrichtigungen senden kann. Eine typische Monit-Benachrichtigungs-E-Mail sieht folgendermaßen aus:
From: [email protected]
To: [email protected]
Resource limit matched Service example.com
Date: Mon, 22 Dec 2014 03:04:06
Action: alert
Host: example.com
Description: cpu user usage of 79.8% matches resource limit [cpu user usage>70.0%]
Your faithful employee,
Monit
In diesem Lernprogramm wird Monit so eingerichtet, dass Sie jedes Mal eine E-Mail erhalten, wenn eine Warnung ausgelöst wird.
-
Hinweis: * Die Benachrichtigungen von Monit werden wahrscheinlich standardmäßig in Ihren Spam-Ordner verschoben. Reverse DNS (als PTR-Eintrag bezeichnet) muss ordnungsgemäß konfiguriert sein, um sicherzustellen, dass E-Mails mit der höchsten Wahrscheinlichkeit erfolgreich zugestellt werden. Der Hostname Ihres Droplets muss mit dem vollqualifizierten Domänennamen (FQDN) übereinstimmen. Beispielsweise können beide den Wert ** haben. Um den PTR-Eintrag eines DigitalOcean-Droplets zu bearbeiten, rufen Sie die DigitalOcean-Systemsteuerung auf. Navigieren Sie zu * Einstellungen * und wählen Sie die Registerkarte * Umbenennen *. Geben Sie den neuen Hostnamen ein und klicken Sie auf * Umbenennen *.
In diesem Handbuch wird davon ausgegangen, dass Sie keinen vorhandenen E-Mail-Transfer-Agent (MTA) haben. Daher installieren wir Postfix. Eine lokale Installation von Postfix ermöglicht es dem System, Benachrichtigungs-E-Mails an einen externen E-Mail-Anbieter wie Google Mail oder Yahoo zu senden.
Um Postfix als Ihren MTA zu installieren, aktualisieren Sie zuerst die Repository-Quellliste des Systems.
sudo apt-get update
Installieren Sie dann die Postfix- und GNU Mailutils-Pakete aus den Ubuntu-Repositorys.
sudo apt-get install postfix mailutils
Gegen Ende der Installation werden Sie aufgefordert, einen Serverkonfigurationstyp auszuwählen (siehe Abbildung unten). Wählen Sie * Internet Site *.
image: https: //assets.digitalocean.com/articles/Lemp_Monit/1.png [Postfix - Internet-Site auswählen]
Wenn Sie zur Eingabe des * System-Mail-Namens * aufgefordert werden, verwenden Sie den vollqualifizierten Domänennamen (FQDN) Ihres Droplets. * Hinweis: * Der System Mail Name kann auch später in + / etc / mailname +
geändert werden.
image: https: //assets.digitalocean.com/articles/Lemp_Monit/2.png [Postfix - System Mail Name setzen]
Öffnen Sie anschließend die Datei zum Bearbeiten. In diesem Handbuch wird Nano verwendet, Sie können jedoch einen beliebigen Texteditor verwenden.
sudo nano /etc/aliases
Hier fügen wir eine persönliche E-Mail-Adresse hinzu, unter der wir die Benachrichtigungs-E-Mails von Monit erhalten. Diese E-Mail-Benachrichtigungen werden vom Root-Benutzer unseres LEMP-Servers gesendet.
postmaster: root
root:
Bei Bedarf können auch mehrere Ziele hinzugefügt werden:
root: , ,
Speichern Sie Ihre Änderungen und beenden Sie Nano. Führen Sie dann Folgendes aus, um die Aliase-Datei zu aktualisieren:
sudo newaliases
Von Ihrem Droplet kann eine Testnachricht gesendet werden, um die Zustellung von E-Mails zu überprüfen. Bitte überprüfen Sie die Spam-Ordner, wenn die Testnachricht nicht zum ersten Mal in Ihrem Posteingang angezeigt wird.
echo test | mail -s "test message from my VPS" root
Schritt 2 - Installieren und Konfigurieren von Monit
Monit ist auch in den Ubuntu-Paket-Repositories verfügbar. Eine kurze Referenzanleitung zu Monit finden Sie unter this tutorial.
Monit kann auf Ihrem LEMP-Server installiert werden mit:
sudo apt-get install monit
Unter Ubuntu 14.04 befinden sich die Monit-Konfigurationsdateien in und die Hauptkonfigurationsdatei von Monit ist "+ / etc / monit / monitrc +".
So öffnen Sie in Nano zum Bearbeiten:
sudo nano /etc/monit/monitrc
Kommentieren Sie die folgenden Zeilen aus und ändern Sie sie entsprechend der folgenden Abbildung:
set mailserver #Use localhost for email alert delivery.
set mail-format {
from: monit@$HOST
subject: monit alert -- $EVENT $SERVICE
message: $EVENT Service $SERVICE
Date: $DATE
Action: $ACTION
Host: $HOST
Description: $DESCRIPTION
Your faithful employee,
Monit
}
set alert #Set email address to receive alerts. This guide uses root mail.
Deaktivieren Sie jetzt die folgenden Zeilen in der Datei und passen Sie sie an die Domain oder IP-Adresse Ihres Servers an.
check system
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if swap usage > 25% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
Wir werden diesen Eintrag auch am Ende der Datei hinzufügen:
check filesystem rootfs with path / #Alert if low on disk space.
if space usage > 90% then alert
Speichern Sie Ihre Änderungen und beenden Sie Nano.
Schritt 3 - Konfigurieren der Dienstüberwachung für LEMP-Dienste in Monit
Unter Ubuntu 14.04 können Monit-Konfigurationen direkt in der Datei + / etc / monit / monitrc +
oder über einzelne Dateien in + / etc / monit / conf.d / +
angegeben werden. In diesem Tutorial werden einzelne Dateien im Verzeichnis + / etc / monit / conf.d / +
erstellt.
Zunächst werden wir Monit die Möglichkeit geben, einen Service zu verwalten. In diesem Tutorial werden wir der Einfachheit halber die gesamte Prozessüberwachung in einer einzigen Datei unter "+ / etc / monit / conf.d / lemp-services +" speichern. Mit den folgenden Einträgen überwacht Monit Nginx, MySQL und PHP-FPM und startet diese Dienste neu, wenn sie aus irgendeinem Grund abnormal beendet werden.
Wir können die Arbeitsdatei mit Nano erstellen:
sudo nano /etc/monit/conf.d/lemp-services
Fügen Sie die folgenden Einträge für die Services in unserem LEMP-Stack hinzu:
check process nginx with pidfile /var/run/nginx.pid
group www-data
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
check process php5-fpm with pidfile /var/run/php5-fpm.pid
start program = "/etc/init.d/php5-fpm start"
stop program = "/etc/init.d/php5-fpm stop"
Speichern Sie dann Ihre Änderungen.
Schritt 4 - Hinzufügen von Aktionen zum Neustarten fehlerhafter LEMP-Dienste
Da Monit nun in der Lage ist, ausgewählte Dienste zu verwalten, können Aktionen hinzugefügt werden, um Dienste nach Bedarf neu zu starten. Beispielsweise kann Monit TCP-Verbindungen überwachen. Wenn der Server keine HTTP-Verbindungen mehr bereitstellt, kann Monit PHP-FPM oder Nginx neu starten, um das Problem automatisch zu beheben.
Um auf unserer bestehenden Konfiguration aufzubauen, werden wir jetzt "+ / etc / monit / conf.d / lemp-services +" weiter bearbeiten. Die Ergänzungen, die wir unten vornehmen werden, werden gezeigt und wir werden Monit anweisen, Nginx und PHP-FPM neu zu starten, wenn HTTP-Verbindungen nicht mehr verfügbar sind. Zusätzlich wird Monit MySQL neu starten, wenn der Socket nicht verfügbar ist.
-
Hinweis: * Stellen Sie sicher, dass Sie die Domain oder IP-Adresse Ihres Droplets verwenden, wie im ersten und dritten Eintrag angegeben.
check process nginx with pidfile /var/run/nginx.pid
group www-data
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
check process php5-fpm with pidfile /var/run/php5-fpm.pid
start program = "/etc/init.d/php5-fpm start"
stop program = "/etc/init.d/php5-fpm stop"
Speichern Sie Ihre Änderungen und schließen Sie Nano. Starten Sie Monit anschließend neu, um die von Ihnen vorgenommenen Konfigurationsänderungen zu übernehmen.
sudo service monit restart
Schritt 5 (Optional) - Überwachen Sie die Protokolle auf Fehler und Stichwörter
Monit kann Protokolle auch auf bestimmte Schlüsselwörter überwachen und dann eine Aktion ausführen oder eine Warnung senden. Dies ist hilfreich, wenn eine Webanwendung Probleme hat oder wenn ein Team eine Benachrichtigung über ein bestimmtes Traceback oder Ereignis aus Protokollen benötigt.
Unten sehen Sie ein Nginx-Protokollbeispiel mit einem Timeout-Fehler, den Monit überwachen kann, und einer Warnung vor:
2014/12/22 11:03:54 [error] 21913#0: *202571 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 2600:3c01::f03c:91ff:fe6e:5a91, server: example.com, request: "GET /wp-admin/admin-ajax.php?action=wordfence_doScan&isFork=1&cronKey=40cb51ccsdfsf322fs35 HTTP/1.0", upstream: "fastcgi://unix:/var/run/example.com.sock", host: "example.com"
Öffnen Sie Ihre LEMP-Dienstkonfigurationsdatei erneut in Nano und bauen Sie auf unserer vorhandenen Konfiguration auf.
sudo nano /etc/monit/conf.d/lemp-services
Fügen Sie den folgenden Eintrag hinzu. Dies wird eine Benachrichtigung senden, wenn ein Timeout von Nginx bei der Kommunikation mit PHP-FPM auftritt.
check file nginx-error with path /var/log/nginx/error.log
if match "^timed out" then alert
Speichern Sie Ihre Änderung und schließen Sie Nano. Starten Sie dann Monit neu, damit die Änderung wirksam wird:
sudo service monit restart
Schritt 6 (Optional) - Verwenden Sie Monit, um eine Remote-Website und andere Dienste zu überwachen
Neben der lokalen Verwendung von Monit kann Monit eine Vielzahl externer Dienste und Verbindungen überwachen. In diesem Beispiel verwenden wir die bereits eingerichtete lokale Instanz von Monit und fügen einige neue Überwachungskonfigurationen für externe Dienste hinzu.
Für bandexterne Zwecke ist ein externes Monit-System in einem völlig anderen Rechenzentrum vorzuziehen. Wenn sich eine Webanwendung in New York befindet, ist ein kleiner externer Monit-Server in San Francisco ideal.
Nachfolgend finden Sie Beispiele für externe Monit-Prüfungen, die auf einem zweiten Host mit Monit implementiert werden können. Diese Beispiele befinden sich in der Datei "+ / etc / monit / conf.d / lemp-external +" des externen Servers, um unseren LEMP-Stack von einem entfernten Standort aus unter ** zu überprüfen.
Verwenden Sie Nano, um diese Konfigurationsdatei zu erstellen:
sudo nano /etc/monit/conf.d/lemp-external
Überwachen Sie die ICMP-Antwort und die HTTP- und HTTPS-Konnektivität:
# ICMP check
check host with address
if failed icmp type echo
for 5 times within 5 cycles
then alert
# HTTP check
if failed
port 80 protocol http
for 5 times within 5 cycles
then alert
# HTTPS check
if failed
port 443 type tcpSSL protocol http
for 5 times within 5 cycles
then alert
DNS überwachen:
check host with address
if failed port 53 type udp protocol dns then alert
SMTP überwachen:
check host with address
if failed port 25 type tcp protocol smtp then alert
Überwachen Sie die Healthcheck-URL der Webanwendung
Für Webanwendungen kann Monit auch eine bestimmte Anforderung für eine Healthcheck-URL ausführen. Nachfolgend finden Sie ein Beispiel für eine Site ** mit der Healthcheck-URL "+ https: // remote-example.com / healthcheck +".
check host with address
if failed
port 443 type tcpSSL protocol http
request "/healthcheck"
for 5 times within 5 cycles
then alert
Schritt 7 - Monit über die Befehlszeile verwalten
Monit bietet auch ein Befehlszeilenprogramm. Von dort aus können mit einfachen Befehlen der Gesamtstatus von Monit überprüft und nützliche Aufgaben ausgeführt werden, z. B. das vorübergehende Starten oder Stoppen der Überwachung.
Um Monit-Statusprüfungen über die Befehlszeile ausführen zu können, muss der Monit-Webdienst aktiviert sein. Öffnen Sie dazu "+ / etc / monit / monitrc +" zum Bearbeiten in Nano.
sudo nano /etc/monit/monitrc
Kommentieren Sie die folgenden Zeilen aus, um den Webdienst lokal zu aktivieren:
set httpd port 2812 and
use address localhost
allow localhost
Speichern Sie Ihre Änderungen und beenden Sie Nano. Dann starten Sie Monit neu:
sudo service monit restart
Jetzt ist es möglich, den Status von Monit über die Befehlszeile zu überprüfen.
Nachfolgend finden Sie Befehle zum vorübergehenden Deaktivieren und Aktivieren der Überwachung:
sudo monit unmonitor all
sudo monit monitor all
Schritt 8 - Berichte anzeigen
Werfen wir einen Blick auf die Berichte für alle von uns eingerichteten Prüfungen.
sudo monit status
Jetzt wird die Ausgabe für alle von Ihnen konfigurierten Monit-Überprüfungen angezeigt, einschließlich lokaler LEMP-Dienste und externer Überprüfungen:
sudo monit status
The Monit daemon 5.6 uptime: 0m
System 'example.com'
status Running
monitoring status Monitored
load average [0.00] [0.01] [0.05]
cpu 0.5%us 0.4%sy 0.0%wa
memory usage 115132 kB [22.9%]
swap usage 0 kB [0.0%]
data collected Mon, 22 Dec 2014 16:50:42
Filesystem 'rootfs'
status Accessible
monitoring status Monitored
permission 755
uid 0
gid 0
filesystem flags 0x1000
block size 4096 B
blocks total 5127839 [20030.6 MB]
blocks free for non superuser 4315564 [16857.7 MB] [84.2%]
blocks free total 4581803 [17897.7 MB] [89.4%]
inodes total 1310720
inodes free 1184340 [90.4%]
data collected Mon, 22 Dec 2014 16:50:42
Process 'nginx'
status Running
monitoring status Monitored
pid 14373
parent pid 1
uptime 28m
children 4
memory kilobytes 1364
memory kilobytes total 9228
memory percent 0.2%
memory percent total 1.8%
cpu percent 0.0%
cpu percent total 0.0%
port response time 0.018s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
Process 'mysql'
status Running
monitoring status Monitored
pid 12882
parent pid 1
uptime 32m
children 0
memory kilobytes 44464
memory kilobytes total 44464
memory percent 8.8%
memory percent total 8.8%
cpu percent 0.0%
cpu percent total 0.0%
unix socket response time 0.000s to /var/run/mysqld/mysqld.sock [DEFAULT]
data collected Mon, 22 Dec 2014 16:50:42
Process 'php5-fpm'
status Running
monitoring status Monitored
pid 17033
parent pid 1
uptime 0m
children 2
memory kilobytes 13836
memory kilobytes total 22772
memory percent 2.7%
memory percent total 4.5%
cpu percent 0.0%
cpu percent total 0.0%
port response time 0.018s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
File 'nginx-error'
status Accessible
monitoring status Monitored
permission 644
uid 0
gid 0
timestamp Mon, 22 Dec 2014 16:18:21
size 0 B
data collected Mon, 22 Dec 2014 16:50:42
Remote Host 'example.com'
status Online with all services
monitoring status Monitored
icmp response time 0.021s [Echo Request]
port response time 0.107s to example.com:443 [HTTP via TCPSSL]
port response time 0.062s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
Verwenden Sie diese Daten, um den Zustand Ihrer Dienste zu überprüfen und nützliche Statistiken anzuzeigen.
Fehlerbehebung
Wenn Probleme auftreten, überprüfen Sie zuerst die Protokolle von Monit unter + / var / log / monit.log +
. Dadurch erhalten Sie weitere Informationen zur Art des Problems.
Beispiel für Fehlerprotokolleinträge:
[UTC Dec 22 13:59:54] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 14:10:16] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 15:24:19] error : 'example.com' failed protocol test [HTTP] at INET[example.com:80] via TCP -- HTTP: Error receiving data -- Resource temporarily unavailable
[UTC Dec 22 15:57:15] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:00:57] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:49:00] error : 'example.com' failed, cannot open a connection to INET[example.com:443/API] via TCPSSL
Fazit
Nach Abschluss dieses Handbuchs sollte Monit nun für die Überwachung eines LEMP-Stacks unter Ubuntu 14.04 konfiguriert sein. Monit ist sehr erweiterbar und kann einfach angepasst oder erweitert werden, um alle Arten von Diensten für kleine und große Netzwerke zu überwachen.
Nachfolgend einige zusätzliche Links für Monit: