Integration · NGINX

NGINX Monitoring: Verbindungen, Requests, Latenz und Fehler

Kombinieren Sie stub_status-Metriken, Latenz und Statuscodes aus Access Logs sowie OpenTelemetry-Traces, um zu sehen, wie NGINX und die Upstreams dahinter jeden Request bedienen.
Obseria Apps und Funktionen: Observability, APM, Infrastruktur und Integrationen
Obseria Home-Dashboard mit Service-Zustand, offenen Problemen, SLO-Erfüllung und Ingestion
Obseria Trace-Explorer mit Span-Liste und Span-Attributen
Überblick

Warum NGINX mit Obseria überwachen

Golden Signals am Edge

Request-Rate, Fehlerrate aus Statuscodes und Latenz aus request_time ergeben eine SLO-taugliche Sicht auf jeden Virtual Host.

Proxy oder Upstream?

upstream_response_time neben request_time zeigt, ob Zeit in NGINX, im Netzwerk oder im Backend-Service vergeht.

Requests nachverfolgen

Mit dem NGINX-OpenTelemetry-Modul wird jeder weitergeleitete Request zu einem Span, der im Trace des Upstream-Service weiterläuft.

Abdeckung

NGINX-Komponenten, die Obseria überwacht

  • stub_status. Angenommene, bearbeitete und aktuelle Verbindungen nach Zustand sowie Requests gesamt über den nginx-Receiver.
  • Access Logs. Statuscodes, gesendete Bytes, request_time und upstream_response_time aus den Access Logs.
  • Error Logs. Upstream-Timeouts, abgewiesene Verbindungen und Konfigurationsfehler aus dem NGINX Error Log.
  • Upstreams. Latenz und Fehler pro Upstream aus Access-Log-Feldern und aus Traces der Backend-Services.
  • Tracing. Spans für weitergeleitete Requests aus dem ngx_otel_module mit W3C-Trace-Context-Propagation.
  • Kubernetes Ingress. NGINX-basierte Ingress Controller mit Prometheus-Metriken, gescrapt vom Obseria Agent.
Auf einen Blick

Die NGINX-Kennzahlen, auf die es ankommt

Obseria erfasst diese Werte automatisch und zeigt sie in fertigen Dashboards und Alerts.

Aufkommen an Besuchern

Zeigt, wie viele Anfragen Ihre Website im Zeitverlauf erhält, damit Sie Spitzen, Kampagnen und ungewöhnliche Einbrüche erkennen.

  • nginx.requests

Zuverlässige Verbindungen

Zeigt, ob jeder Besucher tatsächlich bedient wird oder ob unter Last Verbindungen verloren gehen.

  • nginx.connections_accepted
  • nginx.connections_handled

Aktuelle Aktivität

Macht sichtbar, wie viele Besucher gerade bedient werden und wie viele Verbindungen ruhen oder warten.

  • nginx.connections_current{state=active}
  • nginx.connections_current{state=reading}
  • nginx.connections_current{state=writing}
  • nginx.connections_current{state=waiting}

Tempo der Antworten

Zeigt, wie lange Besucher auf eine Seite warten und wie viel dieser Zeit in Ihren dahinterliegenden Anwendungen entsteht.

  • $request_time
  • $upstream_response_time
Alle 9 Metriken im Detail anzeigen
MetrikEinheitAussage
nginx.requests{requests}Client-Requests gesamt; die Rate ist der Request-Durchsatz.
nginx.connections_accepted{connections}Von NGINX angenommene Client-Verbindungen.
nginx.connections_handled{connections}Bearbeitete Verbindungen; weniger als angenommen heißt, ein Ressourcenlimit wurde erreicht.
nginx.connections_current{state=active}{connections}Offene Client-Verbindungen inklusive inaktiver Keep-Alive-Verbindungen.
nginx.connections_current{state=reading}{connections}Verbindungen, bei denen NGINX den Request-Header liest.
nginx.connections_current{state=writing}{connections}Verbindungen, bei denen NGINX die Antwort schreibt; wächst bei langsamen Upstreams.
nginx.connections_current{state=waiting}{connections}Inaktive Keep-Alive-Verbindungen, die auf den nächsten Request warten.
$request_timesAccess-Log-Variable: Gesamtzeit eines Requests vom ersten gelesenen bis zum letzten gesendeten Byte.
$upstream_response_timesAccess-Log-Variable: Wartezeit auf die Antwort des Upstreams.
Einrichtung

NGINX-Monitoring in wenigen Minuten einrichten

  1. Schritt 1

    stub_status aktivieren

    Stellen Sie stub_status auf einer nur lokal erreichbaren Location wie 127.0.0.1:8080/nginx_status bereit und laden Sie NGINX neu.

  2. Schritt 2

    Metriken und Logs konfigurieren

    Ergänzen Sie den nginx-Receiver und einen filelog-Receiver für Access Logs im OpenTelemetry Collector oder Obseria Agent.

  3. Schritt 3

    Tracing ergänzen

    Laden Sie das NGINX-OpenTelemetry-Modul und richten Sie es auf den lokalen Collector, damit weitergeleitete Requests in Traces erscheinen.

Beispielkonfiguration · YAML
receivers:
  nginx:
    endpoint: http://127.0.0.1:8080/nginx_status
    collection_interval: 10s
  filelog/nginx_access:
    include: [/var/log/nginx/access.log]
    start_at: end
exporters:
  otlphttp:
    endpoint: ${env:OBSERIA_OTLP_ENDPOINT}
    headers:
      Authorization: "Bearer ${env:OBSERIA_TOKEN}"
service:
  pipelines:
    metrics:
      receivers: [nginx]
      exporters: [otlphttp]
    logs:
      receivers: [filelog/nginx_access]
      exporters: [otlphttp]

Sofort einsatzbereit

Dashboards, Alerts und SLOs, die bereitstehen, sobald die ersten Daten ankommen.

  • NGINX-Übersicht: Requests, Verbindungen nach Zustand
  • Statuscodes und 5xx-Rate pro Host
  • Request Time im Vergleich zur Upstream Response Time
  • Alert: 5xx-Rate über 1 % für 5 Minuten
  • Alert: weniger bearbeitete als angenommene Verbindungen
Leitfaden

NGINX-Monitoring: Darauf kommt es an

Warum NGINX Monitoring wichtig ist

NGINX ist für viele Anwendungen die Eingangstür: Webserver, Reverse Proxy, Load Balancer und TLS-Terminierung. Jeder Nutzer-Request läuft hindurch, und genau deshalb lässt sich hier am besten messen, was Nutzer tatsächlich erleben. Gleichzeitig werden Probleme hier oft zuerst sichtbar, als 502- und 504-Antworten, selbst wenn die Ursache in einem Upstream-Service liegt. NGINX Monitoring hat daher zwei Aufgaben: NGINX selbst überwachen und es als Aussichtspunkt auf die Services dahinter nutzen.

Obseria erfasst NGINX-Metriken mit dem nginx-Receiver des OpenTelemetry Collectors, parst Access und Error Logs mit dem filelog-Receiver und empfängt Spans aus dem NGINX-OpenTelemetry-Modul.

Die NGINX-Metriken, auf die es ankommt

stub_status-Metriken

Das Open-Source-Modul stub_status liefert wenige, aber nützliche Zähler. nginx.requests ergibt den Request-Durchsatz. nginx.connections_accepted und nginx.connections_handled sollten im gleichen Tempo wachsen; bleibt handled hinter accepted zurück, hat NGINX ein Limit wie worker_connections erreicht. nginx.connections_current teilt offene Verbindungen in reading, writing und waiting auf. Eine wachsende Zahl von writing-Verbindungen bedeutet meist langsame Upstreams, denn NGINX hält die Verbindung, während es auf die Antwort wartet.

Aktivieren Sie das Modul auf einem nur lokal erreichbaren Listener:

server {
    listen 127.0.0.1:8080;
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

Signale aus dem Access Log

Latenz und Fehler stammen aus dem Access Log. Ergänzen Sie $request_time und $upstream_response_time in Ihrem Log-Format. Die Differenz zeigt, ob die Zeit in NGINX und der Client-Verbindung oder im Backend vergeht. Statuscodes liefern die Fehlerrate: 5xx für serverseitige Fehler, 499 für Clients, die vor der Antwort aufgegeben haben.

log_format timed '$remote_addr "$request" $status $body_bytes_sent '
                 'rt=$request_time urt=$upstream_response_time';
access_log /var/log/nginx/access.log timed;

Typische Probleme und wie Sie sie erkennen

  • 502 Bad Gateway: Der Upstream hat die Verbindung abgelehnt oder geschlossen. Suchen Sie im Error Log nach "connect() failed" und prüfen Sie den Zustand des Upstream-Service.
  • 504 Gateway Timeout: Der Upstream hat nicht innerhalb von proxy_read_timeout geantwortet. Eine Upstream Response Time nahe am Timeout ist die Frühwarnung.
  • Verbindungslimits: Bearbeitete Verbindungen bleiben hinter angenommenen zurück, oder das Error Log meldet "worker_connections are not enough".
  • Steigende 499er: Clients brechen Requests ab, oft wegen langsamer Antworten oder knapper Client-Timeouts.
  • TLS- und Zertifikatsprobleme: Handshake-Fehler im Error Log; kombinieren Sie sie mit synthetischen Checks, die den Ablauf von Zertifikaten prüfen.

Best Practices für NGINX Monitoring

  1. Lassen Sie stub_status auf einem lokalen Listener und machen Sie es nie öffentlich erreichbar.
  2. Nutzen Sie ein strukturiertes oder Key-Value-Format für Access Logs mit Zeitfeldern, damit Logs zuverlässig geparst werden.
  3. Definieren Sie SLOs auf Erfolgsrate und Latenz pro Virtual Host oder Route, gemessen an NGINX.
  4. Geben Sie den W3C-Trace-Context von NGINX an die Upstreams weiter, damit sich ein langsamer Request Ende zu Ende verfolgen lässt.
  5. Verwerfen Sie Logzeilen von Health Checks und statischen Assets in der Pipeline, wenn Sie sie nicht brauchen, um das Logvolumen zu begrenzen.

So unterstützt Obseria Ihr NGINX Monitoring

Obseria führt NGINX-Metriken, geparste Access und Error Logs sowie Traces in Obseria Lake zusammen. TopoGraph platziert NGINX vor den Services, die es weiterleitet, sodass eine 5xx-Spitze direkt auf den betroffenen Upstream zeigt. Obseria Intelligence korreliert Änderungen bei Fehlern und Latenz mit Deployments, Upstream-Zustand und Host-Metriken und erklärt die wahrscheinliche Ursache mit einer Beweiskette. Die Obseria Pipeline verwirft verrauschte Logzeilen und maskiert IP-Adressen oder Query Strings vor der Speicherung; gefilterte Logs kosten nur den Ingest. Dashboards, Alerts und SLOs sind enthalten, und synthetische Checks von mehr als 50 Standorten ergänzen die Außensicht auf Ihre Endpunkte.

Beginnen Sie mit stub_status und dem Access Log auf einem Host, ergänzen Sie Tracing für die wichtigsten Routen und rollen Sie dieselbe Collector-Konfiguration auf jede NGINX-Instanz aus. So erhalten Sie Request-Rate, Fehlerrate und Latenz pro Route, die Sie direkt in SLOs überführen können.

Häufige Fragen zum NGINX-Monitoring

Der OpenTelemetry-nginx-Receiver liest stub_status: Requests, angenommene und bearbeitete Verbindungen sowie aktuelle Verbindungen nach Zustand. Latenz und Statuscodes stammen aus Access Logs, Traces aus dem NGINX-OpenTelemetry-Modul.

Nein. stub_status, Access Logs und das OpenTelemetry-Modul stehen für Open-Source-NGINX zur Verfügung.

Ergänzen Sie $request_time und $upstream_response_time in Ihrem Access-Log-Format. Obseria parst die Felder, sodass Sie Perzentile pro Host, Route und Upstream darstellen können.

Ja. Das NGINX-OpenTelemetry-Modul erzeugt Spans für weitergeleitete Requests und gibt den W3C-Trace-Context an Upstream-Services weiter, die den Trace fortsetzen.

Ja. Betreiben Sie den Obseria Agent als DaemonSet, um Container-Logs zu sammeln und Metriken zu scrapen. NGINX-basierte Ingress Controller mit Prometheus-Metriken werden ebenfalls erfasst.

Starten Sie heute mit dem NGINX-Monitoring

Binden Sie NGINX in Minuten per OpenTelemetry oder Obseria Agent an. 14 Tage kostenlos.