Engineering

Wie Sie NGINX-Webserver mit dem Elastic Stack überwachen können

In diesem Artikel zeigen wir Ihnen, wie Sie NGINX mit den verschiedenen Komponenten des Elastic Stack überwachen können. Wir verwenden Metricbeat und Filebeat, um Daten zu erfassen. Diese Daten werden anschließend an Elasticsearch übertragen und dort gespeichert. Zuletzt werden wir die Daten mit Kibana grafisch darstellen.

Metricbeat sammelt Daten zu Verbindungen (aktiv, verarbeitet, akzeptiert usw.) und erfasst die Gesamtzahl der Clientanfragen. Filebeat sammelt Daten im Zusammenhang mit Zugriffen und Fehlerprotokollen. Das genaue Ergebnis hängt von der Umgebung ab, aber im Allgemeinen können wir an diesen Informationen verschiedene Dinge ablesen, zum Beispiel:

  • Ein Anstieg der Fehlerprotokolle für eine bestimmte Ressource kann bedeuten, dass wir eine Ressource gelöscht haben, die noch benötigt wird.
  • In den Zugriffsprotokollen können wir die Spitzenzeiten einzelner Dienste ablesen, um unsere Wartungsarbeiten zu planen.
  • Ein plötzlicher Anstieg der Clientanfragen kann auf bösartige Absichten hindeuten, etwa einen DDoS-Angriff.

Dieser Artikel befasst sich hauptsächlich mit der Überwachungsfunktion, und andere Dinge wie etwa die Einrichtung von Elasticsearch werden nur kurz angesprochen. Ich arbeite mit einem Mac und verwende daher die Mac-Distributionen von Elasticsearch, Metricbeat, Filebeat und Kibana. Sie finden die Distributionen für andere Plattformen auf der jeweiligen Downloadseite.

Elasticsearch installieren

Metricbeat und Filebeat (bzw. Beats insgesamt) benötigen einen Elasticsearch-Cluster für die Datenspeicherung. Wir richten einen einfachen Elasticsearch-Cluster lokal ein. Da wir Elasticsearch nicht extern bereitstellen, werden wir keine Zeit mit der Konfiguration von Sicherheitsfunktionen verbringen.

Schritt 1: Elasticsearch herunterladen

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-darwin-x86_64.tar.gz

Schritt 2: Archiv extrahieren

tar -xvf elasticsearch-7.1.0-darwin-x86_64.tar.gz

Schritt 3: In das bin-Verzeichnis wechseln

cd elasticsearch-7.1.0/bin

Schritt 4: Unser Cluster mit einem einzigen Knoten starten

./elasticsearch

Ihr Cluster wird standardmäßig unter localhost:9200 ausgeführt.

NGINX ausführen

Wir können NGINX auf verschiedene Arten ausführen: eigenständig auf dem Host, über einen Docker-Container, in einer Kubernetes-Einrichtung usw. Beats bietet eine Autodiscover-Funktion für Container-API-Ereignisse, mit der wir unsere Server-Container beim Hoch- und Herunterfahren überwachen können.

Angesichts der vielfältigen Einrichtungs- und Konfigurationsmöglichkeiten von NGINX haben wir diesen Artikel möglichst allgemein gehalten und zeigen verschiedene Beispiele für Hostkonfigurationen und Autodiscover (in diesem Fall Docker).

Metricbeat und Filebeat konfigurieren

Im nächsten Schritt konfigurieren wir Beats, um mit der Erfassung und Übertragung unserer Daten zu beginnen.

Metricbeat

Wir verwenden Metricbeat, um Metriken zu erfassen.

Schritt 1: Metricbeat herunterladen:

curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.1.0-darwin-x86_64.tar.gz

Schritt 2: Archiv extrahieren

tar -xvf metricbeat-7.1.0-darwin-x86_64.tar.gz

Schritt 3: Verzeichnis wechseln

cd metricbeat-7.1.0-darwin-x86_64

Konfiguration

Unsere Konfigurationsdatei (metricbeat.yml) sucht standardmäßig nach dem Elasticsearch-Cluster unter „localhost:9200“, den wir bereits konfiguriert haben.

Schritt 4: Relevante Metricbeat-Module aktivieren

Standardmäßig werden nur Metriken auf Systemebene erfasst:

./metricbeat modules enable nginx

Schritt 5: Dateieigentümer ändern

Wir müssen die Eigentümer einiger Dateien ändern, da wir Metricbeat als root ausführen. Alternativ können Sie die Option „strict.perms=false“ in der Befehlszeile verwenden, um die strikten Berechtigungsprüfungen zu deaktivieren:

sudo chown root metricbeat.yml 
sudo chown root modules.d/system.yml 
sudo chown root modules.d/nginx.yml

Schritt 6: Metricsets aktivieren

In der Datei modules.d/nginx.yml können wir den Metricset stubstatus aktivieren, indem wir den Kommentar im folgenden Text entfernen:

#metricsets:
#  - stubstatus

Dieser Metricset sammelt Daten aus dem NGINX-Modul ngx_http_stub_status. Dieses NGINX-Modul muss daher konfiguriert sein, um das Metricset verwenden zu können.

Hier können Sie auch die überwachten Hosts ändern. Standardmäßig wird <a href="http://127.0.0.1">http://127.0.0.1</a> überwacht. Diese Konfiguration ist ausreichend für unsere hostbasierte Einrichtung.

Schritt 7: Autodiscover-Setups (Alternative)

Für Autodiscover-Setups hängt die verwendete Konfiguration vom jeweiligen Anbieter ab: Docker, Kubernetes oder Jolokia. Für Docker können Sie das folgende Beispiel verwenden, bei dem wir metricbeat.autodiscover am Ende der metricbeat.yml-Konfigurationsdatei hinzugefügt haben.

metricbeat.autodiscover:
  providers:
    - type: docker
      templates:
        - condition:
            contains:
              docker.container.image: nginx
          config:
            - module: nginx
              metricsets: ["stubstatus"]
              hosts: "${data.host}:${data.port}"

Mit dieser Konfiguration werden alle Docker-Container gefunden, deren Image-Name die Zeichenfolge „NGINX“ enthält („contains“ führt einen Abgleich mit der Teilzeichenfolge aus anstatt einen exakten Abgleich), und sie verwenden eine Konfiguration, die das NGINX-Modul mit dem Metricset „stubstatus“ aktiviert.

Schritt 8: Metricbeat starten

Hervorragend! Unsere Konfiguration ist fertig, und wir können Metricbeat mit einem Flag ausführen, das die Protokolle nach stderr sendet und die syslog-/Dateiausgabe deaktiviert:

sudo ./metricbeat -e

Wenn Sie alles richtig gemacht haben, sollte eine anfängliche Ausgabe angezeigt werden, gefolgt von einer Ausgabe, wann immer Metricbeat Daten an Ihr Cluster sendet.

Filebeat

Wir verwenden Filebeat, um Protokolle zu sammeln.

Schritt 1: Filebeat herunterladen

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.0-darwin-x86_64.tar.gz

Schritt 2: Archiv extrahieren

tar -xvf filebeat-7.1.0-darwin-x86_64.tar.gz

Schritt 3: Verzeichnis wechseln

cd filebeat-7.1.0-darwin-x86_64

Schritt 4: NGINX-Modul aktivieren

./filebeat modules enable nginx

Standardmäßig werden die Zugriffs- und Fehlerprotokolle gesammelt. Filebeat versucht, die Protokollpfade anhand Ihres Betriebssystems zu ermitteln. Falls Sie andere Pfade verwenden, können Sie diese in der Konfigurationsdatei „modules.d/nginx.yml“ angeben.

Schritt 5: Dateieigentümer ändern

sudo chown root filebeat.yml
sudo chown root modules.d/nginx.yml
sudo chown root module/nginx/access/manifest.yml
sudo chown root module/nginx/error/manifest.yml

Diese Konfiguration ist ausreichend für eine hostbasierte Einrichtung.

Schritt 6: Autodiscover-Konfiguration (Alternative)

Wie zuvor müssen wir Autodiscover auch in diesem Fall separat konfigurieren. Wir im vorherigen Abschnitt fügen wir im Docker-Beispiel einen Autodiscover-Abschnitt zur Konfiguration hinzu. Die Datei „filebeat.yml“ sieht anschließend wie folgt aus:

filebeat.autodiscover:
 providers:
   - type: docker
     templates:
       - condition:
         contains:
           docker.container.image: nginx
         config:
           - module: nginx
             access:
               input:
                 type: docker
                 containers.ids:
                   - "${data.docker.container.id}"
             error:
               input:
                 type: docker
                 containers.ids:
                   - "${data.docker.container.id}"

In diesem Fall konfigurieren wir die Zugriffs- und Fehleroptionen so, dass eine Docker-Eingabe verwendet wird. Die Docker-Eingabe sucht nach Containerprotokollen unter ihrem Pfad (der Basispfad für Docker-Logs, standardmäßig /var/lib/docker/containers). Wir geben containers.ids mit den IDs der Container an, die mit unserer Vorlagenbedingung übereinstimmen. Wenn wir beides kombinieren, werden die Protokolle standardmäßig also von /var/lib/docker/containers/ac29b98ad83ca43bb4c15ae8f0d03aff8c7d57bf5dee9024124374b92b14b0f2/ abgerufen (die tatsächlichen IDs weichen von diesem Beispiel ab).

Schritt 7: Filebeat ausführen

sudo ./filebeat -e

Kibana installieren

Metricbeat und Filebeat übertragen also die Daten zu unseren NGINX-Servern, und wir brauchen einen Weg, um diese Daten angezeigt zu bekommen. Dazu verwenden wir Kibana.

Schritt 1: Kibana herunterladen

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.1.0-darwin-x86_64.tar.gz

Schritt 2: Archiv extrahieren und Verzeichnis wechseln

tar -xzf kibana-7.1.0-darwin-x86_64.tar.gz
cd kibana-7.1.0-darwin-x86_64

Schritt 3: Kibana ausführen

./bin/kibana

Kibana verwendet standardmäßig den Elasticsearch-Host unter http://localhost:9200 und ist unter http://localhost:5601 erreichbar.

Wenn Sie http://localhost:5601 öffnen, sollte die folgende Seite angezeigt werden:

Kibana-Willkommensbildschirm

Wenn Sie möchten, können Sie die Beispieldaten ausprobieren, aber wir klicken einfach auf Explore on my own.

NGINX-Daten in Kibana visualisieren

Als Nächstes sehen wir uns an, wie wir unsere Daten mit Kibana anzeigen und analysieren können.

Infrastruktur

Wenn wir in der Kibana-Seitenleiste zur Infrastruktur-App navigieren, wird eine Snapshot-Ansicht (letzte Minute) unserer Infrastruktur angezeigt. Je nach verwendeter Konfiguration sind Daten für Umgebungen ohne Autodiscover unter „Hosts“ verfügbar, und in Umgebunden mit Autodiscover gelangen Sie mit den Schaltflächen „Docker“ und „Kubernetes“ (je nach verwendetem Anbieter) zu den gewünschten Daten:

Schaltflächen für Hosts, Kubernetes und Docker

Da ich ein hostbasiertes Setup verwende, kann ich auf die Schaltfläche „Hosts“ klicken, um die folgenden Daten aus Metricbeat anzuzeigen:

Klick auf Schaltfläche „Hosts“, um übertragene Daten anzuzeigen

Wenn wir einen der Knoten auswählen und auf View Metrics klicken, wird eine Seite mit ausführlichen Metriken für den jeweiligen NGINX-Server geöffnet.

Kibana-Diagramme mit Servermetriken

Logs

Wenn wir stattdessen zur Logs-App navigieren, sehen wir dort unsere Zugriffs- und Fehlerprotokolle, die aus Filebeat übertragen wurden.

Kibana Logs-App mit Fehler- und Zugriffsprotokollen

Vorkonfigurierte NGINX-Dashboards

Unsere Kibana-Instanz wird also ausgeführt und ist erreichbar, und wir können einige vorinstallierte Dashboards laden.

Führen Sie den folgenden Befehl in Ihrem Metricbeat-Verzeichnis aus, um die Metricbeat-Dashboards zu laden:

sudo ./metricbeat setup --dashboards

Führen Sie denselben Befehl für Filebeat aus:

sudo ./filebeat setup --dashboards

Wenn wir jetzt die Registerkarte „Dashboards“ in Kibana öffnen, sollte Folgendes angezeigt werden:

Kibana-Seite mit verfügbaren Dashboards

Wenn wir die Anzeige auf eine Suche nach „nginx“ beschränken, bleiben die folgenden Dashboards übrig:

Kibana-Seite mit verfügbaren NGINX-Dashboards

Das Dashboard [Filebeat NGINX] Access und error logs ECS sieht beispielsweise wie folgt aus:

Filebeat NGINX access und error logs ECS

Und damit wissen Sie, wie Sie den Elastic Stack einsetzen können, um NGINX-Server zu überwachen. Als Weiterführung können Sie verschiedene Optionen ausprobieren (z. B. unterschiedliche Gruppierungs- und Filteroptionen), um zu den wirklich wichtigen Informationen zu gelangen.

Jetzt ausprobieren

Die ersten Schritte mit dem Elastic Stack sind kinderleicht: Sie können die verschiedenen Produkte entweder mit den bereitgestellten curl-Befehlen oder auf unserer Downloads-Seite herunterladen. Oder noch einfacher, registrieren Sie sich für einen 14-tägigen Test des Elasticsearch Service als Ausgangspunkt. Falls Sie Fragen haben, können Sie diese jederzeit in unseren Diskussionsforen stellen.