Servermonitoring

Monitoring der Webserver mit Percona PMM2

Martin Schlüter

6 Minuten

Jeder der mit Webseiten Geld verdient möchte dass diese auch immer erreichbar sind und bei einem Ausfall sofort benachrichtigt werden. Und genau dies ist die Aufgabe eines Monitoring der Server/Webseite. Ich nutze Percona Monitoring und Management(PMM2), dafür.

Auswahl der Monitoring Lösung

Beim letzen Umzug meiner Webseiten zu einem neuen Hoster entschied ich mich dafür auch ein gutes Monitoring des Webservers zu integrieren. Ich schaute mir verschiedene Lösungen an und entschied mich dann für Percona Monitoring and Management (PMM2) . PMM2 ist eine fertig eingerichtete Lösung aus prometheus und Grafana, die schon perfekt eingerichtet ist für die Überwachung von Servern und Datenbanken. Auch lassen sich weitere prometheus Exporter und Grafana Dashboard, sowie weitere Datenquellen für Grafana hinzufügen.

Desweiteren hat Percona eigene Dashboards hinzugefügt, Checks für verschiedene DB Systeme und eine Query Analyse für Datenbankabfragen. Das ganze wird als Docker Image zur Verfügung gestellt, also das Image runterladen, ein Speicher Volume anlegen, das Image starten und der Monitoring Server läuft. PMM2 wird auch laufend weiterentwickelt, so ca. 1 mal im Monat gibts ein Update, man wird auf der Monitoring Startseite darauf hingewiesen und kann es per Mausklick einspielen.

In der Percona Monitoring and Management Demo kann man sich schon einen guten Überblick verschaffen was PMM2 kann.

prometheus und Exporter

Prometheus ist eine open source Lösung zum sammeln von Monitoring Daten und Speicherung dieser als Zeitserien. Das sammeln erfolgt über sogenannte prometheus Exporter die alle möglichen Datenquellen abgreifen können und die Daten dann an Prometheus weiterleiten.

Vor einiger Zeit wurde prometheus im PMM2 durch VictoriaMetrics ersetzt, begründet wurde dies durch die bessere Performance, macht aber für mich als Anwender keinen Unterschied, da hier auch die prometheus Exporter funktionieren.

Grafana

Grafana ist eine Software zur Darstellung von Daten und Zeitserien, es kann Daten/Zeitserien aus verschiedenen Quellen, VictoriaMetrics oder Prometheus sind nur zwei davon, grafisch übersichtlich darstellen. Weitere Dashboards kann man simpel hinzufügen oder erstellen. Grafana Dashborads

Auch lassen sich in Grafana Benachrichtigungkanäle und Alarme definieren, so kann man sich beim Auslösen der Alarme Nachrichten auf verschiedenen Wegen senden lassen, eMail, Discord oder Telegram sind nur eine Auswahl der möglichen Benachrichtungskanäle.

Da das Monitoring sehr detailliert ist, lassen sich so Alarme definieren die auslösen bevor ein Ausfall der Webserver eintritt. Die meisten Webserver laufen auf Linux, und wenn hier z. B. die Festplatte voll ist, stürzt der Server ab. Ist mir einmal passiert weil ich einen Fehler beim Einrichten eines cronjobs gemacht hatte und so die Logdateien nicht mehr täglich komprimiert und alte gelöscht wurden. Heutzutage erhalte ich eine Alarmmeldung wenn eine Festplatte zu 90% voll ist und kann dann für Abhilfe sorgen bevor es wirklich ein Problem wird.

Einschränkungen

Durch die fertige “Out of the Box” Lösung gibt es aber auch Einschränkungen gegenüber einer eigenen Installation der einzelnen Komponenten. Eben wenn es um die Konfiguration der Komponenten geht, so sollte man die Konfigurationsdateien von prometheus und Grafana nicht manuell editieren, weil dies beim nächsten Update überschrieben werden könnte.

Beim blackbox Exporter, dieser testet Webseiten etc. von extern auf Erreichbarkeit/Funktion, muss man die zu prüfenden Urls direkt in prometheus hinterlegen, aber es ist ja kein Problem in solchen Fällen eine extra Instanz von prometheus zu installieren und in Grafana als weitere Datenuelle zu nutzen.

Also die Vorteile der fertigen Lösung mit zusätzlicher Query Analyse überwiegen diese Nachteile bei weitem.

Installation des PMM2

Ich hoste jetzt bei PHP-Friends und dort den kleinsten vServer für den Monitoring Server gewählt, also 2 CPU Kerne, 10 GB RAM und 80 GB SSD Festplatte. Absolut ausreichende Leistung, CPU Auslastung ist normal unter 10% und 80% freies RAM. Als Betriebssystem habe ich Ubuntu 20.04 gewählt, war bei der Einrichtung noch recht neu und PHP-Friends musste erst ein Image dafür erstellen. Support ist auch gut, 24/7 immer schnelle Reaktion auf Mails.

Neben dem PMM2 als Docker Image habe ich auch noch NGINX als reverse proxy installiert um let’s encrypt SSL Zertifikate für die Weboberfläche von Grafana nutzen zu können.

PMM2 Server installieren

Erstmal muss Docker installiert werden, da ich Ubuntu verwende konnte ich es einfach aus den Ubuntu Paketquellen installieren und beim systemstart starten lassen

apt install docker.io
systemctl enable --now docker

und dann das Docker Image holen

docker pull percona/pmm-server:2

einen Datencontainer erstellen

docker create --volume /srv --name pmm-data percona/pmm-server:2 /bin/true

und dann den PMM2 Container erstellen und starten

docker run --detach --restart always \
--publish 8443:443 \
--volumes-from pmm-data \
--name pmm-server percona/pmm-server:2

und schon kann man über https://[server IP/Hostname]:8443 auf den Server zugreifen und mit user admin und Passwort admin einloggen. Der Browser wird aber wegen einem unsicheren SSL Zertifikat meckern. Als erstes ändert man das admin Passwort und legt 2 neue User an, einmal einen neuen Adminuser den man zum einloggen verwendet und einen weiteren User mit Adminrechten den man zum Hinzufügen von den Clients verwendet. Login mit dem neuen Adminuser testen und dann den user admin deaktivieren. Natürlich sammelt der PMM2 direkt ab Start die ersten Daten über den Server auf dem er läuft und die integrierte PostgreSQL Datenbank.

Hier noch ein paar weitere nützliche Docker Befehle:

alle laufenden Container auflisten:

docker ps

PMM2 Server stoppen und starten:

docker stop pmm-server
docker start pmm-server

NGINX & let’s encrypt

Da es sehr viele Anleitungen über die Installation von NGINX und let’s encrypt gibt, spare ich mir hier eine weitere zu schreiben: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-de die NGINX Installation ist dort auch verlinkt.

Aber auf den Reverse Proxy teil gehe ich noch etwas ein, der NGINX wird so konfiguriert, das er jede Anfrage an den pmm-server container weiterreicht. Meine Konfiguration für den Host sieht folgendermaßen aus:

server {
    listen 80;
    listen [::]:80;
    server_name [hostname];
    return 301 https://$host$request_uri;
}

server {

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

    server_name [hostname];

    ssl_certificate /etc/letsencrypt/live/xxxxxxx/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xxxxxxx/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        access_log /var/log/nginx/pmm-reverse-access.log;
        error_log /var/log/nginx/pmm-reverse-error.log;

    location / {
                proxy_set_header Host $http_host;
                proxy_pass https://127.0.0.1:8443;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Authorization "";
  }


}

hier eben den eigenen [hostnamen] ersetzen und wichtig die Proxy Einstellungen.

Und wenn man HTTP2 möchte einfach die beiden listen Zeilen für den port 443 part um http2 ergänzen:

listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot

und schon hat man ein immer aktuelles kostenloses SSL Zertifikat für seinen Monitoring Server.

Auch der Port 8443 bleibt nach aussen offen, Docker passt beim Containerstart die firewall entsprechend an um ihn zu öffnen, wenn man dann den Port vom Container nur auf localhost:8443 mapt läuft der PMM2 Server nicht.

Clients hinzufügen

Das Hinzufügen der Clients, also der zu überwachenden Server & Datenbanken kommt im nächsten Blogbeitrag, ebenso weitere Exporter & Dashboards um den Webserver selber zu überwachen und Daten über die Zugriffe und Response Codes zu erhalten. Ebenso Einrichtung einer externen prometheus Instanz mit einem blackbox Exporter um die Erreichbarkeit der Webseiten aus einem anderen Rechenzentrum zu testen.

Edit 16. April 2022 Die neuste PMM2 Version 2.27.0 nutzt Grafana in der Version 8.3.5 und hier ist dann “proxy_set_header Host $http_host;” in der nginx reverse proxy Konfiguration notwendig, oben im Beispiel eingefügt.

(1183 Wörter | 8546 Zeichen)

Martins Meinung

Hier blogge ich über verschiedene Themen.