Używamy kombinacji formatów dziennika w nginx i lmon, aby przechwytywać takie rzeczy. Format dziennika NGINX, taki jak:
log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ połączenie $ remote_addr $ host $ remote_user [$ time_local] "$ request" "$ http_referer" "$ http_user_agent" "$ http_x_forwarded_for" $ upstream_addrus $ upstream_addrus $ upstream_addrus $ upstream_addrus $ upstream_addrus w: $ http_cookie "'
Przechwytuje wiele pomocnych informacji diagnostycznych, takich jak serwer nadrzędny, który obsłużył żądanie, a także umieszcza status z przodu, dzięki czemu można go łatwo odczytać, nawet jeśli dzienniki przewijają się dość szybko.
Używamy LMON do oglądania tych dzienników, a następnie powiadamiamy nas (pager / e-mail), jeśli zobaczy w dzienniku błędy, takie jak 500s, 503s, 400s:
http://www.bsdconsulting.no/tools/lmon-README
Może to pomóc Ci zostać powiadomionym o problemie, który się wydarzy, co jest najłatwiejszym momentem na jego debugowanie.
Inną rzeczą, którą prawdopodobnie powinieneś rozważyć, jeśli jeszcze tego nie zrobiłeś, jest to, że domyślnie nginx uważa 500 za fatalny warunek i nie próbuje kolejnego. Jeśli masz wiele strumieni upstime, możesz skonfigurować go tak, aby używał innego, jeśli otrzyma 500, miejmy nadzieję, że przesłania awarię od użytkownika:
http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream
error_log
. Opublikuj również plik konfiguracyjny.