nginx: bagaimana cara melacak 500 acak dari nginx (bukan aplikasi saya). Berpotensi ada hubungannya dengan memuat?

9

Kami baru-baru ini memiliki sekitar 500-an dari nginx itu sendiri yang entah bagaimana tidak masuk (kami memiliki tangkapan layar, tetapi tidak ada dalam log). Itu aneh dalam dirinya sendiri, karena biasanya kesalahan muncul di sana. Apapun, saya bertanya-tanya apakah ada sesuatu seperti ukuran koneksi kolam yang jika dimaksimalkan akan menghasilkan 500? Kami telah menghubungkannya secara potensial dengan lonjakan lalu lintas baru-baru ini, tetapi itu tidak konklusif.

Adakah yang punya ide bagaimana mulai mendekati masalah seperti itu?

kaleidomedallion
sumber
Dua hal pertama yang harus Anda lakukan adalah mereproduksi kesalahan ini dan mencari tahu alasan mengapa Nginx tidak masuk error_log. Posting juga file konfigurasi Anda.
quanta

Jawaban:

6

Kami menggunakan kombinasi format log di nginx dan lmon untuk menangkap hal-hal seperti ini. Format log NGINX seperti:

log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ connection $ remote_addr $ host $ remote_user [$ time_lfer] "$ request" "$ http_referer" "$ http_user_agent" "$ http_x_forwarded_ untuk $ upstream_status_ upst_studst_studst_stent dalam: $ http_cookie "'

Akan menangkap banyak informasi diagnostik yang bermanfaat, seperti server upstream yang menangani permintaan, serta menempatkan status di depan sehingga mudah dibaca bahkan jika log bergulir dengan sangat cepat.

Kami menggunakan LMON untuk menonton log ini dan kemudian memberi tahu kami (pager / email) jika ada kesalahan, seperti 500, 503, 400, dalam log:

http://www.bsdconsulting.no/tools/lmon-README

Ini dapat membantu Anda diberitahu tentang masalah ketika itu terjadi yang merupakan waktu termudah untuk men-debug itu.

Hal lain yang mungkin harus Anda pertimbangkan jika Anda belum melakukannya adalah bahwa secara default nginx menganggap 500 sebagai kondisi yang fatal dan tidak mencoba hulu yang lain. Jika Anda memiliki beberapa upstreams, Anda dapat mengonfigurasinya untuk menggunakan yang lain jika mendapat 500, semoga mengaburkan kegagalan dari pengguna:

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream

jumlahnya banyak
sumber
Ini jawaban yang sangat membantu, terima kasih! Berangkat ke implemenet proxy_next_upstream ...
kaleidomedallion
4

error_log $filename debug; akan mengaktifkan debug level login ke log kesalahan - ini akan memberi Anda banyak dan banyak detail status internal nginx pada saat kesalahan, dan jika dikompilasi dengan --dengan-debug (yang beberapa distro lakukan secara default) itu akan memberi lebih banyak lagi.

Berhati-hatilah bahwa level "debug" benar-benar menghasilkan banyak output, hingga Anda mungkin ingin melihat ruang disk Anda ...

Shish
sumber
1

Dalam kasus saya, file conf tidak diberi nama dengan benar (example.com bukan example.com.conf) dan tidak disertakan. Entah bagaimana ini tidak menghasilkan 'Welcome to nginx' tetapi dalam kesalahan HTTP 500 yang tidak dicatat. Yah, itu sebenarnya dicatat, tetapi dalam file kesalahan dari virtual host yang berbeda yang tidak dapat bekerja dengan url tertentu.

jujur
sumber