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:
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:
Da ich ein hostbasiertes Setup verwende, kann ich auf die Schaltfläche „Hosts“ klicken, um die folgenden Daten aus Metricbeat 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.
Logs
Wenn wir stattdessen zur Logs-App navigieren, sehen wir dort unsere Zugriffs- und Fehlerprotokolle, die aus Filebeat übertragen wurden.
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:
Wenn wir die Anzeige auf eine Suche nach „nginx“ beschränken, bleiben die folgenden Dashboards übrig:
Das Dashboard [Filebeat NGINX] Access und error logs ECS sieht beispielsweise wie folgt aus:
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.