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
error_log
. Veröffentlichen Sie auch Ihre Konfigurationsdatei.