nginx: Wie finde ich zufällige 500 von nginx (nicht meine Anwendung). Hat möglicherweise etwas mit Last zu tun?


9

Wir hatten kürzlich ungefähr 500 von Nginx selbst, die irgendwie nicht protokolliert wurden (wir haben Screenshots, aber nichts in den Protokollen). Das ist an sich schon komisch, weil dort normalerweise Fehler auftauchen. Unabhängig davon frage ich mich, ob es so etwas wie eine Verbindungspoolgröße gibt, die bei maximaler Auslastung zu 500 führen würde. Wir haben es möglicherweise mit einem jüngsten Anstieg des Verkehrsaufkommens korreliert, aber es ist nicht schlüssig.

Hat jemand eine Idee, wie man anfangen kann, sich einem solchen Problem zu nähern?


Die ersten beiden Dinge, die Sie tun müssen, sind, diesen Fehler zu reproduzieren und den Grund herauszufinden, warum sich der Nginx nicht anmeldet error_log. Veröffentlichen Sie auch Ihre Konfigurationsdatei.
Quanten

Antworten:


6

Wir verwenden eine Kombination von Protokollformaten in Nginx und Lmon, um solche Dinge zu erfassen. Ein NGINX-Protokollformat wie:

log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ connection $ remote_addr $ host $ remote_user [$ time_local] "$ request" "$ http_referer" "$ http_user_agent" "$ http_x_forwarded_for" $ upstream_addr_ upstream_ in: $ http_cookie "'

Erfasst viele hilfreiche Diagnoseinformationen, z. B. den Upstream-Server, der die Anforderung bearbeitet hat, und setzt den Status in den Vordergrund, sodass das Lesen auch dann einfach ist, wenn die Protokolle ziemlich schnell durchlaufen.

Wir verwenden LMON, um diese Protokolle zu überwachen und uns dann zu benachrichtigen (Pager / E-Mail), wenn Fehler wie 500s, 503s, 400s in den Protokollen angezeigt werden:

http://www.bsdconsulting.no/tools/lmon-README

Dies kann Ihnen helfen, auf ein Problem aufmerksam zu machen, wenn es auftritt. Dies ist der einfachste Zeitpunkt, um es zu debuggen.

Die andere Sache, die Sie wahrscheinlich in Betracht ziehen sollten, wenn Sie dies noch nicht getan haben, ist, dass nginx eine 500 standardmäßig als schwerwiegenden Zustand betrachtet und keinen anderen Upstream versucht. Wenn Sie mehrere Upstreams haben, können Sie es so konfigurieren, dass es einen anderen verwendet, wenn es 500 erhält, was hoffentlich den Fehler des Benutzers verdeckt:

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream


Dies ist eine sehr hilfreiche Antwort, danke! Aus, um proxy_next_upstream zu implementieren ...
kaleidomedallion

4

error_log $filename debug; Aktiviert die Protokollierung auf Debug-Ebene im Fehlerprotokoll. Auf diese Weise erhalten Sie viele Details zum internen Status von nginx zum Zeitpunkt des Fehlers und, falls mit --with-debug kompiliert (was standardmäßig von mehreren Distributionen ausgeführt wird) Ich werde noch mehr geben.

Seien Sie gewarnt, dass die "Debug" -Ebene wirklich viel Ausgabe generiert , bis zu dem Punkt, an dem Sie möglicherweise Ihren Speicherplatz überwachen möchten ...


1

In meinem Fall wurde die conf-Datei nicht korrekt benannt (war example.com anstelle von example.com.conf) und war nicht enthalten. Irgendwie führte dies nicht zu "Willkommen bei Nginx", sondern zu einem nicht protokollierten HTTP 500-Fehler. Nun, es wurde tatsächlich protokolliert, aber in der Fehlerdatei von einem anderen virtuellen Host, der mit dieser bestimmten URL nicht funktionieren konnte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.