BLOG | NGINX

So visualisieren Sie NGINX Plus mit Prometheus und Grafana

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Monica Thorne Miniaturbild
Monica Thorne
Veröffentlicht am 23. September 2021

Wie wir im Abschnitt „So verbessern Sie die Sichtbarkeit in Kubernetes“ besprochen haben, besteht eine der größten Herausforderungen für App-Entwicklungs- und Bereitstellungsteams darin, Einblick in die Leistung, Sicherheit und Verfügbarkeit der App zu erhalten. Diese Erkenntnisse helfen den Teams, Probleme schnell zu beheben und sich proaktiv auf Verkehrsspitzen vorzubereiten.

Tools zur Verkehrsverwaltung – wie beispielsweise Load Balancer, Reverse-Proxys, API-Gateways und Ingress-Controller – generieren eine Fülle von Informationen über den Zustand Ihrer App und Infrastruktur. Sie können diese wertvollen Messdaten in Echtzeit auf dem NGINX Plus-Dashboard verfolgen. Außerdem kann NGINX Plus Messdaten an Überwachungstools von Drittanbietern weiterleiten, um Ihnen durch Visualisierungen der Leistung im Zeitverlauf zusätzliche Einblicke zu geben. Zwei der beliebtesten Tools arbeiten zusammen, um Ihnen diese Zeitreihendiagramme zu liefern:

  • Prometheus – Ein Open-Source-Projekt der Cloud Native Computing Foundation (CNCF) zur Überwachung und Alarmierung
  • Grafana – Ein Open-Source-Visualisierungs- und Analysetool, das Diagramme und andere Visualisierungen aus Zeitreihendatenbanken wie Prometheus generiert

Das Prometheus-njs -Modul erleichtert die Übermittlung 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 behandeln wir alle Schritte zum Einrichten von NGINX Plus, Prometheus und Grafana sowie zum Erstellen von Grafana-Diagrammen.

Um Ihnen bei der Einrichtung Ihrer eigenen Implementierung zu helfen, fassen wir in den folgenden Abschnitten die Schritte zusammen und ordnen sie im Video den Zeitpunkten zu:

Hinweise:

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

Voraussetzungen

Bevor wir mit der Demo begonnen haben, haben wir die folgenden Voraussetzungen erfüllt.

  1. Installieren Sie NGINX Plus auf dem NGINX Plus-Server. Für die Zwecke der Demo führen wir eine saubere Erstinstallation durch. Wenn Sie einen vorhandenen NGINX Plus-Server verwenden, müssen Sie möglicherweise die während der Demo an den Konfigurationsdateien vorgenommenen Änderungen ändern.
  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 Vorgehensweise und führen Prometheus auf einem zweiten Server aus, getrennt von NGINX Plus.
  4. Installieren Sie die neueste Version von Docker auf dem Grafana-Server (in der Demo ein dritter Server).

Einrichten des NGINX Plus-Servers (1:20)

  1. Installieren Sie das Prometheus-njs -Modul. Wir verwenden in der Demo Ubuntu 20.04 und dies ist der entsprechende Befehl. Informationen zu anderen Betriebssystemen finden Sie in der Dokumentation .

    $ sudo apt-get installiere nginx-plus-module-prometheus
    
  2. Öffnen Sie /etc/nginx/nginx.conf mit Ihrem bevorzugten Texteditor und fügen Sie die folgende load_module- Direktive im Kontext der obersten Ebene außerhalb des http- Blocks hinzu.

    load_module module/ngx_http_js_module.so;
    # vorhandene Direktiven der obersten Ebene
    
    http {
    #...
    }
    
  3. (Optional) Erhöhen Sie die Größe des Puffers zum Speichern von Antworttexten von Unteranforderungen (die Standardgröße beträgt je nach Plattform 4 KB oder 8 KB ). Dies verhindert zu große Subrequest - Antwortfehler, die im NGINX-Fehlerprotokoll erscheinen. Fügen Sie die folgende subrequest_output_buffer_size -Direktive im HTTP- Block hinzu.

    http { #...
    Subrequest_Output_Buffer_size 32k;
    }
    
  4. Speichern Sie nginx.conf und führen Sie diesen Befehl aus, um zu überprüfen, ob die NGINX-Konfiguration syntaktisch korrekt ist.

    $ sudo nginx -t nginx: die Syntax der Konfigurationsdatei /etc/nginx/nginx.conf ist in Ordnung nginx: Der Test der Konfigurationsdatei /etc/nginx/nginx.conf war erfolgreich
    
  5. Wechseln Sie in das Verzeichnis „conf.d“ und listen Sie die Dateien auf.

    $ cd conf.d $ ls default.conf
    
  6. Die Datei default.conf definiert einen virtuellen Server, der auf Port 80 lauscht. Der virtuelle Server für Prometheus muss auf diesem Port lauschen. Entfernen Sie daher default.conf, um ihn freizugeben.

    $ sudo rm default.conf
    
  7. Erstellen Sie mit Ihrem bevorzugten Texteditor eine neue Datei namens prometheus.conf mit dem folgenden Inhalt.

    js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
    
    Server {
    Standort = /Metriken {
    js_content prometheus.metrics;
    }
    
    Standort /API {
    API;
    } 
    }
    

    Die Direktive js_import 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 Standortblock bietet Zugriff auf die Prometheus-formatierten Metriken. Der zweite Standortblock aktiviert die NGINX Plus-API , die die Rohmetriken generiert und sie Prometheus zur Verfügung stellt.

    Notiz: 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 .

  8. Speichern Sie prometheus.conf , überprüfen Sie die korrekte Syntax wie in Schritt 4 und führen Sie diesen Befehl aus, um NGINX Plus zu starten.

    $ sudo nginx
    

Einrichten des Prometheus-Servers (5:30)

  1. Erstellen Sie eine neue Prometheus-Konfigurationsdatei im YAML-Format namens prometheus.yml im Verzeichnis /etc/prometheus mit diesem Inhalt (basierend auf einer Standardkonfigurationsdatei von der Prometheus-Website). Wie gezeigt besteht die einzige vorzunehmende Änderung darin, die IP-Adresse und den Port des NGINX Plus-Servers im Feld „Ziele“ hinzuzufügen.

    global: scrape_interval: 15 s externe Beschriftungen: Monitor: „Codelab-Monitor“ Scrape-Konfigurationen: – Jobname: „Prometheus“ Scrape-Intervall: 5s static_configs: - Ziele: [' NGINX_Plus_IP_address :80']
    

    Einzelheiten zur Prometheus-Konfiguration, einschließlich weiterer Optionen, die Sie in die Konfigurationsdatei aufnehmen können, finden Sie in der Prometheus-Dokumentation .

  2. Speichern Sie prometheus.yml und führen Sie dann den folgenden Befehl aus. Es zieht Prometheus vom Docker Hub und stellt es auf Port 9090 bereit.

    $ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
    
  3. Navigieren Sie in einem Browser zur IP-Adresse und dem Port des neuen Prometheus-Servers. Eine Seite wie die folgende bestätigt, dass der Server funktioniert.

  4. Überprüfen Sie, ob Prometheus auf den Feed der NGINX Plus-Metriken zugreift. Klicken Sie auf das Globussymbol links neben der Schaltfläche „Ausführen“ in der oberen rechten Ecke des Fensters. Eine Liste mit Messwerten ähnlich der folgenden wird angezeigt.

Einrichten des Grafana-Servers (9:15)

  1. Führen Sie diesen Befehl aus, um Grafana vom Docker Hub abzurufen und auf Port 3000 verfügbar zu machen:

    [Terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
    

    Informationen zu anderen Installationsmethoden finden Sie in der Grafana-Dokumentation .

  2. Navigieren Sie in einem Browser zur IP-Adresse und dem Port des neuen Grafana-Servers. Die Grafana-Anmeldeseite bestätigt, dass der Server funktioniert.

  3. Melden Sie sich an, indem Sie „admin“ in die Felder „E-Mail“, „Benutzername“ und „Passwort“ eingeben. Wir empfehlen Ihnen dringend, wie aufgefordert ein neues, sicheres Passwort festzulegen. Aus Zeitgründen überspringen wir diesen Schritt in der Demo jedoch.

  4. Registrieren Sie auf der angezeigten Grafana-Homepage Prometheus als Datenquelle , indem Sie den Anweisungen in der Grafana-Dokumentation folgen. Das Video zeigt die Schritte in der Grafana-GUI.

    Notiz: Geben Sie in Schritt 5 der Grafana-Anweisungen anstelle des angezeigten URL-Beispiels ( 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 Kästchen mit einem Häkchen und die Meldung „Datenquelle funktioniert“ an, dass Grafana erfolgreich eine Verbindung zum Prometheus-Server hergestellt hat.

Erstellen Sie NGINX Plus-Diagramme in Grafana (11:15)

Während Prometheus für die Anzeige nur einer einzigen Metrik nützlich ist, erleichtert Grafana die Anzeige einer Sammlung von Metriken in einem einzigen Diagramm.

So erstellen Sie ein Grafana-Diagramm:

  1. Klicken Sie in der Navigationsleiste links auf der Seite auf das Pluszeichen ( + ) (siehe Screenshot in Schritt 4 des vorherigen Abschnitts). Wählen Sie „Dashboard“ im Dropdownmenü „Erstellen“ aus.

  2. Klicken Sie auf das Feld „Leeres Panel hinzufügen“ .

  3. Überprüfen Sie, ob auf der angezeigten Seite „ Neues Dashboard/Bearbeitungsfeld“ Prometheus im Feld „Datenquelle“ der Registerkarte „ Abfrage “ in der unteren Hälfte der Seite angezeigt wird. Wenn nicht, wählen Sie Prometheus aus dem Dropdown-Menü.

  4. Geben Sie nginx in das Feld „Metrikenbrowser“ > ein. Eine Liste mit NGINX Plus-Metriken wird angezeigt.

    Hier finden Sie kurze Beschreibungen, die Ihnen einen Eindruck davon vermitteln, welche Informationen sie bieten.

    • nginxplus_connections_accepted – Akzeptierte Clientverbindungen
    • nginxplus_connections_active – Aktive Clientverbindungen
    • nginxplus_connections_dropped – Abgebrochene Clientverbindungen wurden abgebrochen
    • nginxplus_connections_idle – Inaktive Clientverbindungen
    • nginxplus_http_requests_current – Aktuelle HTTP-Anfragen
    • nginxplus_http_requests_total – Gesamtzahl der HTTP-Anfragen
    • nginxplus_nginx_meta – NGINX-Metainformationen
    • nginxplus_processes_respawned – Gesamtzahl der abnormal beendeten und neu gestarteten untergeordneten Prozesse
    • nginxplus_ssl_handshakes – Erfolgreiche SSL-Handshakes
    • nginxplus_ssl_handshakes_failed – Fehlgeschlagene SSL-Handshakes
    • nginxplus_ssl_session_reuses – Wiederverwendung von Sitzungen während des SSL-Handshakes
    • nginxplus_workers_mem_private – Privater Speicher, der von NGINX-Workern verwendet wird, enthält keine gemeinsam genutzten Bibliotheken
    • nginxplus_workers_mem_rss – Von NGINX-Arbeitsprozessen genutzter Speicher
  5. Wählen Sie eine Metrik aus der Liste aus (in der Demo wählen wir nginxplus_connections_active aus). Um eine andere Metrik auszuwählen, klicken Sie auf die Schaltfläche + Abfrage und wählen Sie im neuen Feld „Metriken-Browser“ > eine andere Metrik aus (in der Demo wählen wir nginxplus_connections_idle aus).

  6. Klicken Sie auf das Symbol „Aktualisieren“ (zwei Pfeile, die einen Kreis bilden) über dem Diagramm in der oberen Hälfte der Seite. Die Ergebnisse werden dann im Diagramm angezeigt.

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

Sie fragen sich möglicherweise: „Was ist, wenn ich eine große NGINX-Bereitstellung habe, die viele NGINX Plus-Instanzen umfasst?“ oder „Wie kann ich die Konfiguration meiner Instanzen basierend auf den Erkenntnissen und Analysen von Prometheus und Grafana aktualisieren?“ NGINX Controller , unsere Steuerungs- und Verwaltungslösung für NGINX-Bereitstellungen, hilft Ihnen bei der Beantwortung dieser und vieler weiterer Fragen.

Obwohl Prometheus und Grafana hervorragende Lösungen für die Überwachung, Warnmeldungen und Visualisierung sind, bieten sie keine Möglichkeit zum Aktualisieren von Konfigurationen und Richtlinien. Um auf Grundlage dieser Erkenntnisse Maßnahmen zu ergreifen, müssen Sie sich zum Vornehmen von Änderungen weiterhin bei einzelnen NGINX Plus-Instanzen anmelden, was zeitaufwändig und fehleranfällig sein kann – insbesondere bei großen und komplexen NGINX Plus-Bereitstellungen.

NGINX Controller bietet tiefe Einblicke und Analysen zu den über 200 NGINX Plus-Metriken, einschließlich Anfragen pro Sekunde, CPU-Auslastung, 4xx und 5xx- Fehler, Integritätsprüfungsfehler und vieles mehr – alles präsentiert auf einer app-zentrierten, intuitiven und einheitlichen Plattform. Sie können dann tief in die Daten eintauchen, sie in Berichte exportieren und die erforderlichen Konfigurations- und Richtlinienänderungen vornehmen. Dazu nutzen Sie automatisierte, rollenspezifische Workflows, die von NGINX-Experten zur Abstraktion der Komplexität entwickelt wurden.

Mit NGINX Controller behalten Sie den Überblick über Ihre App-Bereitstellungen und können im großen Maßstab die Kontrolle über NGINX Plus-Instanzen und Konfigurationsobjekte (z. B. Umgebungen, Gateways und Apps) übernehmen. Und Sie müssen nicht auf die Nutzung Ihrer bevorzugten Überwachungs- und Warnlösungen verzichten. Das API-First-Design des Controllers macht die Integration mit Lösungen von Drittanbietern sehr einfach und unkompliziert.

Erste Schritte mit NGINX Plus und NGINX Controller

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

Und wenn Sie meinen, dass NGINX Controller die richtige Möglichkeit zum Visualisieren und Überwachen Ihrer NGINX Plus-Flotte sein könnte, probieren Sie die kostenlose 30-Tage-Testversion aus, die sowohl die Module „Application Delivery“ als auch „API Management“ mit Controller App Security umfasst.


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."