nginx: jak wyśledzić losowe 500 z nginx (nie moja aplikacja). Potencjalnie ma to coś wspólnego z obciążeniem?

9

Niedawno mieliśmy około 500 z samego nginx, które jakoś nie zostały zarejestrowane (mamy zrzuty ekranu, ale nic w dziennikach). To samo w sobie dziwne, ponieważ zwykle pojawiają się tam błędy. Niezależnie od tego, zastanawiam się, czy istnieje coś takiego jak wielkość puli połączeń, która jeśli zostanie zmaksymalizowana, spowoduje 500? Potencjalnie skorelowaliśmy to z ostatnim wzrostem natężenia ruchu, ale nie jest to rozstrzygające.

Czy ktoś ma jakieś pomysły, jak zacząć podejść do takiego problemu?

kalejdomedallion
źródło
Dwie pierwsze rzeczy, które musisz zrobić, to odtworzyć ten błąd i dowiedzieć się, dlaczego Nginx się nie loguje error_log. Opublikuj również plik konfiguracyjny.
kwanta

Odpowiedzi:

6

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

wielomian
źródło
To bardzo pomocna odpowiedź, dziękuję! Off to implemenet proxy_next_upstream ...
kaleidomedallion
4

error_log $filename debug; włączy dziennik poziomu debugowania do dziennika błędów - to da ci wiele szczegółów dotyczących wewnętrznego statusu nginx w momencie wystąpienia błędu, a jeśli zostanie skompilowany z --with-debug (który domyślnie robi kilka dystrybucji) Dam jeszcze więcej.

Ostrzegamy, że poziom „debugowania” naprawdę generuje dużo danych wyjściowych, do tego stopnia, że ​​możesz chcieć oglądać miejsce na dysku ...

Shish
źródło
1

W moim przypadku plik conf nie został poprawnie nazwany (był example.com zamiast example.com.conf) i nie został dołączony. W jakiś sposób nie spowodowało to „Witamy w nginx”, ale wystąpił błąd niezalogowanego HTTP 500. Cóż, to było faktycznie zarejestrowane, ale w pliku błędu z innego wirtualnego hosta, który nie mógł pracować z tym konkretnym adresem URL.

Szczery
źródło