nginx: як я відстежую випадковий 500 з nginx (не моя програма). Потенційно щось стосується навантаження?


9

Нещодавно у нас було близько 500 з самого nginx, які якось не входили в систему (у нас є скріншоти, але нічого в журналах). Це само по собі дивно, адже там зазвичай виявляються помилки. Незважаючи на те, мені цікаво, чи є щось на зразок розміру пулу підключень, що, якщо змішано, це призведе до 500? Ми потенційно співвідносимо це з недавнім стрибком трафіку, але це не є остаточним.

У когось є ідеї, як почати підходити до такого питання?


Перші дві речі, які вам потрібно зробити, - це відтворити цю помилку та з’ясувати причину, через яку Nginx не входить у систему error_log. Опублікуйте також файл конфігурації.
кванта

Відповіді:


6

Ми використовуємо комбінацію форматів журналів у 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


Це дуже корисна відповідь, дякую! Вимкнено, щоб Implemenet proxy_next_upstream ...
kaleidomedallion

4

error_log $filename debug; увімкне вхід рівня налагодження в журнал помилок - це дасть вам багато і багато деталей внутрішнього стану nginx на момент помилки, і якщо буде складено з --with-debug (що за замовчуванням робить кілька дистрибутивів), це Я дам ще більше.

Попереджуйте, що рівень "налагодження" дійсно генерує багато виводу, до того, що ви можете переглянути місце на своєму диску ...


1

У моєму випадку файл conf не був названий правильно (був example.com замість example.com.conf) і не був включений. Так чи інакше це не призвело до "Ласкаво просимо до nginx", але до помилки HTTP 500, яка не була зареєстрована. Ну, він був зареєстрований фактично, але у файлі помилок з іншого віртуального хоста, який не міг працювати з цим конкретним URL-адресою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.