Ми використовуємо комбінацію форматів журналів у nginx та lmon, щоб ловити такі речі. Формат журналу NGINX на зразок:
log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ з'єднання $ remote_addr $ host $ remote_user [$ time_local] "$ request" "$ http_referer" "$ http_user_agent" "$ http_x_forwarded_for" $ upstream_addcacherche в: $ http_cookie "'
Буде зафіксовано багато корисної діагностичної інформації, як, наприклад, сервер вище за течією, який обробляв запит, а також ставить статус спереду, щоб його легко було прочитати, навіть якщо журнали прокручуються досить швидко.
Ми використовуємо LMON для перегляду цих журналів, а потім попереджаємо нас (пейджери / електронна пошта), якщо в журналах він бачить помилки, як-от 500s, 503s, 400s:
http://www.bsdconsulting.no/tools/lmon-README
Це може допомогти вам отримати сповіщення про проблему, коли це відбувається, це найпростіший час налагодити її.
Інша річ, яку ви, мабуть, повинні врахувати, якщо ви цього ще не зробили, - це те, що nginx за замовчуванням вважає 500 смертельним станом і не намагається здійснити інший вгору за течією. Якщо у вас є кілька вхідних потоків, ви можете налаштувати його на використання іншого, якщо він отримує 500, сподіваємось, приховуючи помилку від користувача:
http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream
error_log
. Опублікуйте також файл конфігурації.