LEMP Stack Monitoring mit Monit unter Ubuntu 14.04

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: