So visualisieren Sie NGINX Plus mit Prometheus und Grafana

NGINX | 23. September 2021

Wie bereits in „So verbessern Sie die Transparenz in Kubernetes“ erläutert, besteht eine der größten Herausforderungen für Teams, die Anwendungen entwickeln und bereitstellen, darin, Einblicke in die Performance, Sicherheit und Verfügbarkeit von Anwendungen zu gewinnen. Mithilfe dieser Erkenntnisse können Teams Probleme schnell beheben und sich proaktiv auf Lastspitzen vorbereiten.

Tools für das Traffic-Management – wie Load Balancer, Reverse-Proxys, API-Gateways und Ingress-Controller – liefern eine Fülle von Informationen über den Zustand Ihrer Anwendung und Infrastruktur. Sie können diese wertvollen Metriken in Echtzeit im NGINX Plus-Dashboard verfolgen. Darüber hinaus kann NGINX Plus Metriken an Monitoring-Tools von Drittanbietern übermitteln, sodass Sie durch die Visualisierung der Performance im Zeitverlauf zusätzliche Erkenntnisse gewinnen. Zwei der beliebtesten Tools arbeiten zusammen, um Ihnen diese Zeitreihendiagramme bereitzustellen:

  • Prometheus – Ein Open-Source-Projekt der Cloud Native Computing Foundation (CNCF) für Monitoring und Alarmierung
  • Grafana – Ein Open-Source-Tool zur Visualisierung und Analyse, das Diagramme und andere Visualisierungen aus Zeitreihendatenbanken wie Prometheus erstellt

Das Prometheus-njs-Modul erleichtert die Übertragung von NGINX Plus-Metriken an Prometheus und Grafana. Es verwendet das NGINX JavaScript-Modul (NJS) und die NGINX Plus API, um Metriken von NGINX Plus auf den Prometheus-Server zu exportieren.

In dieser Videodemo zeigen wir alle Schritte zur Einrichtung von NGINX Plus, Prometheus und Grafana sowie zur Erstellung von Grafana-Diagrammen.

 

Damit Sie Ihre eigene Implementierung einrichten können, fassen wir in den folgenden Abschnitten die einzelnen Schritte zusammen und ordnen sie den entsprechenden Zeitpunkten im Video zu:

Hinweise:

  • Diese Anweisungen basieren auf der NGINX Plus API und funktionieren daher nicht mit NGINX Open Source.
  • Informationen zur Verwendung von Prometheus und Grafana mit dem NGINX Ingress Controller finden Sie in unserer Dokumentation.

Voraussetzungen

Bevor wir mit der Demo begannen, erfüllten wir die folgenden Voraussetzungen.

  1. NGINX Plus installieren auf dem NGINX Plus-Server. Für diese Demo führen wir eine saubere Erstinstallation durch. Wenn Sie einen vorhandenen NGINX Plus-Server verwenden, müssen Sie die während der Demo vorgenommenen Änderungen an den Konfigurationsdateien möglicherweise anpassen.
  2. Installieren Sie das NGINX-JavaScript-Modul (njs) auf dem NGINX Plus-Server.
  3. Installieren Sie die neueste Version von Docker auf dem Prometheus-Server. In der Demo folgen wir der gängigen Praxis und führen Prometheus auf einem zweiten, von NGINX Plus getrennten Server aus.
  4. Installieren Sie die neueste Version von Docker auf dem Grafana-Server (in der Demo ein dritter Server).

NGINX Plus-Server einrichten (1:20)

  1. Installieren Sie das Prometheus-njs-Modul. In der Demo verwenden wir Ubuntu 20.04, und dafür ist dies der passende Befehl. Informationen zu anderen Betriebssystemen finden Sie in der Dokumentation.
$ sudo apt-get install nginx-plus-module-prometheus
  1. Öffnen Sie mit Ihrem bevorzugten Texteditor die Datei /etc/nginx/nginx.conf und fügen Sie die folgende load_module-Direktive im Kontext der obersten Ebene außerhalb des http-Blocks hinzu.
load_module modules/ngx_http_js_module.so;
# existing top-level directives

http {
    #...
}
  1. (Optional) Vergrößern Sie den Puffer zum Speichern von Antworttexten aus Unteranfragen (die Standardgröße beträgt je nach Plattform 4 KB oder 8 KB). Dadurch werden die Fehler too big subrequest response vermieden, die im NGINX-Fehlerprotokoll angezeigt werden. Fügen Sie die folgende Direktive subrequest_output_buffer_size im http-Block hinzu.
http {    #...
    subrequest_output_buffer_size 32k;
}

  1. Speichern Sie nginx.conf und führen Sie diesen Befehl aus, um zu überprüfen, ob die NGINX-Konfiguration syntaktisch korrekt ist.
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. Wechseln Sie in das Verzeichnis „conf.d“ und listen Sie die Dateien auf.
$ cd conf.d$ ls
default.conf
  1. Die Datei default.conf definiert einen virtuellen Server, der Port 80 überwacht. Der virtuelle Server für Prometheus muss diesen Port verwenden. Entfernen Sie daher default.conf, um den Port freizugeben.
$ sudo rm default.conf
  1. Erstellen Sie mit Ihrem bevorzugten Texteditor eine neue Datei namens „prometheus.conf“ mit folgendem Inhalt.
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;

server {
    location = /metrics {
        js_content prometheus.metrics;
    }
 
    location /api {
        api;
    } 
}
  1. Die js_import-Direktive gibt den Speicherort des NGINX-JavaScript-Codes an, der die von der NGINX Plus-API generierten Metriken in das von Prometheus benötigte Format konvertiert. (Sie müssen nicht zusätzlich eine load_module-Direktive für Prometheus-njs hinzufügen.) Der erste location-Block ermöglicht den Zugriff auf die im Prometheus-Format vorliegenden Metriken. Der zweite location-Block aktiviert die NGINX Plus-API, die die Rohmetriken generiert und für Prometheus bereitstellt. Hinweis: In Produktionsumgebungen empfehlen wir dringend, den Zugriff auf die NGINX Plus-API wie in unserer Dokumentation beschrieben einzuschränken. Weitere Informationen zum Prometheus-njs-Modul finden Sie in unserer Dokumentation.
  2. Speichern Sie prometheus.conf, überprüfen Sie die Syntax wie in Schritt 4 beschrieben und führen Sie diesen Befehl aus, um NGINX Plus zu starten.
$ sudo nginx

Prometheus-Server einrichten (5:30)

  1. Erstellen Sie eine neue Prometheus-Konfigurationsdatei im YAML-Format mit dem Namen „prometheus.yml“ im Verzeichnis „/etc/prometheus“ und verwenden Sie dafür die folgenden Inhalte (basierend auf einer Standardkonfigurationsdatei von der Prometheus-Website). Wie gezeigt, müssen Sie lediglich die IP-Adresse und den Port des NGINX Plus-Servers in das Feld „targets“ eintragen.
global:
  scrape_interval: 15s 
  
  external_labels:
    monitor: 'codelab-monitor'
 
scrape_configs:  
  - job_name: 'prometheus'
    
    scrape_interval: 5s
 
    static_configs:
      - targets: ['NGINX_Plus_IP_address:80']
  1. Weitere Informationen zur Prometheus-Konfiguration und zu zusätzlichen Optionen, die Sie in die Konfigurationsdatei aufnehmen können, finden Sie in der Prometheus-Dokumentation.
  2. Speichern Sie „prometheus.yml“ und führen Sie anschließend den folgenden Befehl aus. Dadurch wird Prometheus von Docker Hub heruntergeladen und über Port 9090 bereitgestellt.
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  1. Rufen Sie in einem Browser die IP-Adresse und den Port des neuen Prometheus-Servers auf. Eine Seite wie die folgende bestätigt, dass der Server funktioniert.
  2. Überprüfen Sie, ob Prometheus auf den Feed mit NGINX Plus-Metriken zugreift. Klicken Sie auf das Globussymbol links neben der Schaltfläche „ Ausführen“ oben rechts im Fenster. Daraufhin wird eine Liste mit Metriken wie die folgende angezeigt.

Grafana-Server einrichten (9:15)

  1. Führen Sie diesen Befehl aus, um Grafana von Docker Hub herunterzuladen und über Port 3000 bereitzustellen:
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
  1. Weitere Installationsmethoden finden Sie in der Grafana-Dokumentation.
  2. Navigieren Sie in einem Browser zur IP-Adresse und zum Port des neuen Grafana-Servers. Die Grafana-Anmeldeseite bestätigt, dass der Server funktioniert.
  3. Melden Sie sich an, indem Sie sowohl in das Feld admin als auch in das Feld E-Mail-Adresse oder Benutzername jeweils Passwort eingeben. Wir empfehlen dringend, bei der entsprechenden Aufforderung ein neues, sicheres Passwort festzulegen. Aus Zeitgründen überspringen wir diesen Schritt jedoch in der Demo.

  1. Registrieren Sie auf der angezeigten Grafana-Startseite Prometheus als Datenquelle und befolgen Sie dazu die Anweisungen in der Grafana-Dokumentation. Das Video zeigt die einzelnen Schritte in der Grafana-Benutzeroberfläche. Hinweis: Geben Sie in Schritt 5 der Grafana-Anleitung anstelle der gezeigten Beispiel-URL (http://localhost:9090) die IP-Adresse Ihres Prometheus-Servers (und Port 9090) ein.
    Nachdem Sie in Schritt 7 der Grafana-Anleitung auf die Schaltfläche Speichern und testen geklickt haben, zeigen das grüne Feld mit einem Häkchen und die Meldung Datenquelle funktioniert an, dass Grafana erfolgreich eine Verbindung zum Prometheus-Server hergestellt hat.

NGINX Plus-Diagramme in Grafana erstellen (11:15)

Während Prometheus nützlich ist, um eine einzelne Metrik zu betrachten, erleichtert Grafana die Darstellung mehrerer Metriken in einem einzigen Diagramm.

So erstellen Sie ein Grafana-Diagramm:

  1. Klicken Sie auf das Pluszeichen (+) in der Navigationsleiste auf der linken Seite (siehe Screenshot in Schritt 4 des vorherigen Abschnitts). Wählen Sie im Dropdown-Menü Erstellen die Option Dashboard aus.
  2. Klicken Sie auf das Feld „Leeres Panel hinzufügen“.
  3. Überprüfen Sie auf der angezeigten Seite „Neues Dashboard/Panel bearbeiten“, ob Prometheus im Feld „Datenquelle“ auf der Registerkarte „Abfrage“ in der unteren Hälfte der Seite angezeigt wird. Falls nicht, wählen Sie „Prometheus“ aus dem Dropdown-Menü aus.
  4. Geben Sie nginx in das Feld Metrics browser > ein. Eine Liste der NGINX Plus-Metriken wird angezeigt.
    Die folgenden Kurzbeschreibungen vermitteln Ihnen einen Eindruck davon, welche Informationen diese Metriken liefern.
    • nginxplus_connections_accepted – Akzeptierte Clientverbindungen
    • nginxplus_connections_active – Aktive Clientverbindungen
    • nginxplus_connections_dropped – Verworfene Clientverbindungen
    • nginxplus_connections_idle – Inaktive Clientverbindungen
    • nginxplus_http_requests_current – Aktuelle HTTP-Anfragen
    • nginxplus_http_requests_total – HTTP-Anfragen insgesamt
    • nginxplus_nginx_meta – NGINX-Metainformationen
    • nginxplus_processes_respawned – Gesamtzahl der nicht ordnungsgemäß beendeten und neu gestarteten untergeordneten Prozesse
    • nginxplus_ssl_handshakes – Erfolgreiche SSL-Handshakes
    • nginxplus_ssl_handshakes_failed – Fehlgeschlagene SSL-Handshakes
    • nginxplus_ssl_session_reuses – Wiederverwendungen von Sitzungen während des SSL-Handshakes
    • nginxplus_workers_mem_private – Von NGINX-Workern verwendeter privater Speicher; gemeinsam genutzte Bibliotheken sind nicht enthalten
    • nginxplus_workers_mem_rss – Von NGINX-Worker-Prozessen verwendeter Arbeitsspeicher
  5. Wählen Sie eine Metrik aus der Liste aus (in der Demo wählen wir nginxplus_connections_active). Um eine weitere Metrik auszuwählen, klicken Sie auf die Schaltfläche + Abfrage und wählen Sie im neuen Feld Metrik-Browser > eine weitere Metrik aus (in der Demo wählen wir nginxplus_connections_idle).
  6. Klicken Sie oberhalb des Diagramms in der oberen Hälfte der Seite auf das Symbol „Aktualisieren“ (zwei kreisförmig angeordnete Pfeile). Daraufhin werden die Ergebnisse im Diagramm angezeigt.

Bonus: Einheitliche Einblicke und Analysen für alle Ihre NGINX Plus-Bereitstellungen

Vielleicht fragen Sie sich: „Was ist, wenn ich eine große NGINX-Bereitstellung mit vielen NGINX Plus-Instanzen habe?“ oder „Wie kann ich die Konfiguration meiner Instanzen anhand der Erkenntnisse und Analysen aus Prometheus und Grafana aktualisieren?“ NGINX Controller, unsere Steuerungs- und Verwaltungsebenenlösung für NGINX-Bereitstellungen, hilft Ihnen, diese und viele weitere Fragen zu beantworten.

Prometheus und Grafana sind zwar hervorragende Lösungen für Monitoring, Alarmierung und Visualisierung, bieten jedoch keine Möglichkeit, Konfigurationen und Richtlinien zu aktualisieren. Um auf Grundlage dieser Erkenntnisse Maßnahmen zu ergreifen, müssen Sie sich weiterhin bei den einzelnen NGINX Plus-Instanzen anmelden und dort Änderungen vornehmen. Dies kann zeitaufwendig und fehleranfällig sein – insbesondere bei großen und komplexen NGINX Plus-Bereitstellungen.

NGINX Controller bietet detaillierte Einblicke und Analysen zu den über 200 Metriken von NGINX Plus, darunter Anfragen pro Sekunde, CPU-Auslastung, 4xx- und 5xx-Fehler, fehlgeschlagene Integritätsprüfungen und vieles mehr – alles auf einer anwendungsorientierten, intuitiven und einheitlichen Plattform. Anschließend können Sie die Daten eingehend analysieren, in Berichte exportieren und mithilfe automatisierter, rollenspezifischer Workflows, die von NGINX-Experten zur Reduzierung der Komplexität entwickelt wurden, die erforderlichen Konfigurations- und Richtlinienänderungen vornehmen.

Mit NGINX Controller behalten Sie den Zustand Ihrer Anwendungsbereitstellungen stets im Blick und können NGINX Plus-Instanzen sowie Konfigurationsobjekte (zum Beispiel Umgebungen, Gateways und Apps) in großem Umfang verwalten. Dabei müssen Sie nicht auf Ihre bevorzugten Überwachungs- und Benachrichtigungslösungen verzichten: Dank des API-First-Designs von Controller lassen sich Lösungen von Drittanbietern besonders einfach und unkompliziert integrieren.

 

Erste Schritte mit NGINX Plus und NGINX Controller

Wenn Sie NGINX Plus noch nicht ausprobiert haben, empfehlen wir Ihnen, es zu testen – als Load Balancer, Reverse Proxy und API-Gateway oder als vollständig unterstützten Webserver mit erweiterten APIs für Überwachung und Verwaltung. Starten Sie noch heute mit einer kostenlosen 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen.

Und wenn Sie der Meinung sind, dass NGINX Controller die richtige Lösung zur Visualisierung und Überwachung Ihrer NGINX Plus-Flotte sein könnte, testen Sie die kostenlose 30-Tage-Testversion, die sowohl die Module Application Delivery und API Management als auch Controller App Security umfasst.


Teilen
Schlagwörter: Visibility, F5 NGINX, 2021, Tech

Ähnliche Blogbeiträge

Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln
NGINX | 23.08.2022

Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln

Beim NGINX Sprint 2022 besinnen wir uns auf unsere Open-Source-Wurzeln. Erfahren Sie mehr über die Initiativen, die wir im kommenden Jahr verfolgen, und teilen Sie uns mit, was Sie sich wünschen.

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen
NGINX | 08.09.2021

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen

Ein Ingress-Controller kann eines der leistungsstärksten Tools in Ihrem Kubernetes-Stack sein. Erfahren Sie, wie Sie Ihre Ingress-Anforderungen ermitteln, um die beste Option auszuwählen.

Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet
NGINX | 16.08.2021

Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet

Wir haben kürzlich den Lösungsleitfaden zum NGINX Ingress Controller um Empfehlungen zur Dimensionierung für Amazon Elastic Kubernetes Service (EKS) ergänzt. In diesem Blogbeitrag erläutern wir, wie wir diese Empfehlungen erarbeitet haben, und stellen Ihnen alle Informationen zur Verfügung, die Sie benötigen, um selbst ähnliche Tests durchzuführen.

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77
NGINX | 12.12.2018

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77

Bei der Fehlersuche bei Datenverkehrsproblemen zwischen NGINX und Upstream-Servern konnte CDN77 die benötigten Daten nur aus dem Fehlerprotokoll mit aktivierter Debug-Ausgabe beziehen, was die Leistung beeinträchtigt und riesige Dateien erzeugt. Daher entwickelte das Team ein neues benutzerdefiniertes Modul, das ausschließlich die benötigten Daten protokolliert.

Ankündigung von NGINX Plus R16
NGINX | 05.09.2018

Ankündigung von NGINX Plus R16

NGINX Plus R16 ist eine einheitliche, elastische Ingress- und Egress-Schicht für Anwendungen, die die Funktionen eines Load Balancers, API-Gateways und einer WAF vereint und neue Features wie clusterfähige Ratenbegrenzung, Schlüssel-Wert-Speicher, „Random with Two Choices“, verbessertes UDP-Load-Balancing und vieles mehr bietet.

5 Gründe für den Umstieg auf softwarebasiertes Load Balancing
NGINX | 13.10.2016

5 Gründe für den Umstieg auf softwarebasiertes Load Balancing

Entdecken Sie fünf Gründe für den Wechsel zu einem softwarebasierten Load Balancer wie NGINX Plus, darunter Kosteneinsparungen, die Einführung von DevOps und eine einheitliche Lösung für alle Umgebungen.