Мы используем комбинацию форматов журналов в nginx и lmon, чтобы поймать подобные вещи. Формат журнала NGINX, такой как:
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_adache в: $ http_cookie "'
Будет собирать много полезной диагностической информации, например, о вышестоящем сервере, который обработал запрос, а также отображать статус в передней части, чтобы его было легко прочитать, даже если журналы прокручиваются довольно быстро.
Мы используем LMON, чтобы просмотреть эти журналы, а затем предупредить нас (пейджеры / электронная почта), если он обнаружит ошибки, такие как 500, 503, 400, в журналах:
http://www.bsdconsulting.no/tools/lmon-README
Это может помочь вам быть предупрежденным о проблеме, когда она возникает, что является самым простым временем для ее устранения.
Еще одна вещь, которую вы, вероятно, должны учитывать, если вы еще этого не сделали, - это то, что по умолчанию nginx считает 500 фатальным состоянием и не пробует другой апстрим. Если у вас есть несколько восходящих потоков, вы можете настроить его на использование другого, если он получает 500, надеюсь, скрывая сбой от пользователя:
http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream
error_log
. Также опубликуйте свой файл конфигурации.