nginx : nginx에서 내 500이 아닌 임의의 500을 어떻게 추적합니까? 잠재적으로로드와 관련이 있습니까?


9

우리는 최근에 nginx 자체에서 약 500 개의 로그를 얻었습니다 (우리는 스크린 샷이 있지만 로그에는 아무것도 없습니다). 일반적으로 오류가 표시되기 때문에 그 자체가 이상합니다. 어쨌든, 연결 풀 크기와 같은 것이 최대가되면 500이되는 것이 궁금합니다. 최근 트래픽 급증과 관련이 있었지만 결정적인 것은 아닙니다.

누구나 그러한 문제에 접근하기 시작하는 방법에 대한 아이디어가 있습니까?


당신이해야 할 첫 번째 두 가지는이 오류를 재현하고 Nginx가 로그인하지 않는 이유를 찾는 것 error_log입니다. 구성 파일도 게시하십시오.
quanta

답변:


6

우리는 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_cacher 에서 : $ http_cookie " '

요청을 처리 한 업스트림 서버와 같은 유용한 진단 정보를 많이 캡처 할 수있을뿐만 아니라 상태를 전면에 배치하여 로그가 매우 빠르게 스크롤 되어도 쉽게 읽을 수 있습니다.

LMON을 사용하여 이러한 로그를보고 로그에 500, 503, 400과 같은 오류가 표시되면 경고 (전자 메일 / 전자 메일)를 알려줍니다.

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.conf 대신 example.com 임) 포함되지 않았습니다. 어쨌든 이것은 'Nginx에 오신 것을 환영합니다'가 아니라 기록되지 않은 HTTP 500 오류를 초래했습니다. 글쎄, 실제로 기록되었지만 특정 URL에서 작동하지 않는 다른 가상 호스트의 오류 파일에 기록되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.