nginx: ฉันจะติดตามการสุ่ม 500 จาก nginx ได้อย่างไร (ไม่ใช่แอปพลิเคชันของฉัน) อาจมีบางอย่างที่เกี่ยวกับโหลด?


9

เมื่อเร็ว ๆ นี้เรามีบางส่วนจาก nginx ประมาณ 500 รายการซึ่งไม่ได้ถูกบันทึกไว้ (เรามีภาพหน้าจอ แต่ไม่มีอะไรในบันทึก) นั่นเป็นเรื่องแปลกในตัวเองเพราะมักจะมีข้อผิดพลาดปรากฏขึ้นที่นั่น ไม่ว่าฉันกำลังสงสัยว่ามีขนาดเหมือนพูลการเชื่อมต่อหรือไม่หาก maxed out จะส่งผลให้ 500 เรามีความสัมพันธ์กับความเป็นไปได้ที่จะเพิ่มขึ้นในการจราจร แต่ก็ไม่ได้ข้อสรุป

ใครมีแนวคิดใดบ้างที่จะเริ่มแนวทางแก้ไขปัญหาดังกล่าว


สองสิ่งแรกที่คุณต้องทำมีการทำซ้ำข้อผิดพลาดนี้และหาเหตุผลว่าทำไม Nginx error_logไม่ได้เข้าสู่ระบบเพื่อ โพสต์ไฟล์กำหนดค่าของคุณด้วย
quanta

คำตอบ:


6

เราใช้รูปแบบไฟล์บันทึกร่วมกันใน nginx และ lmon เพื่อตรวจจับสิ่งต่าง ๆ เช่นนี้ รูปแบบบันทึกของ NGINX เช่น:

log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ การเชื่อมต่อ $ remote_addr $ host_addr $ host $ remote_user [$ time_local] "$ http_referer" "$ http_user_agent" ใน: $ http_cookie "'

จะจับข้อมูลการวินิจฉัยที่เป็นประโยชน์มากมายเช่นเซิร์ฟเวอร์ต้นน้ำที่จัดการคำขอรวมทั้งวางสถานะไว้ด้านหน้าเพื่อให้ง่ายต่อการอ่านแม้ว่าบันทึกจะเลื่อนโดยเร็ว

เราใช้ LMON เพื่อดูบันทึกเหล่านี้จากนั้นแจ้งเตือนเรา (วิทยุติดตามตัว / อีเมล) หากพบข้อผิดพลาดเช่น 500s, 503s, 400s ในบันทึก:

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

วิธีนี้จะช่วยให้คุณได้รับการแจ้งเตือนถึงปัญหาเมื่อเกิดขึ้นซึ่งเป็นเวลาที่ง่ายที่สุดในการตรวจแก้จุดบกพร่อง

สิ่งอื่นที่คุณควรพิจารณาหากคุณยังไม่ได้ทำตามค่าเริ่มต้น nginx พิจารณาว่า 500 เป็นเงื่อนไขที่ร้ายแรงและไม่ลองอัปสตรีมอื่น หากคุณมี upstreams หลายรายการคุณสามารถกำหนดค่าให้ใช้อีกอันหากได้รับ 500 หวังว่าจะปิดบังความล้มเหลวจากผู้ใช้:

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


นี่เป็นคำตอบที่เป็นประโยชน์มากขอบคุณ! ไปที่ implemenet proxy_next_upstream ...
kaleidomedallion

4

error_log $filename debug; จะเปิดการบันทึกระดับการดีบักลงในบันทึกข้อผิดพลาด - สิ่งนี้จะให้รายละเอียดมากมายกับคุณเกี่ยวกับสถานะภายในของ nginx ณ เวลาที่เกิดข้อผิดพลาดและหากคอมไพล์ด้วย - ด้วย debug (ซึ่งหลาย distros ทำตามค่าเริ่มต้น) จะให้มากกว่านี้

ถูกเตือนว่าระดับ "ดีบั๊ก" จะสร้างเอาต์พุตจำนวนมากจนถึงจุดที่คุณอาจต้องการดูพื้นที่ดิสก์ของคุณ ...


1

ในกรณีของฉันไฟล์ conf ไม่ได้ตั้งชื่ออย่างถูกต้อง (เป็น example.com แทน example.com.conf) และไม่ได้รวมอยู่ ยังไงก็ไม่ได้ผลใน 'ยินดีต้อนรับสู่ nginx' แต่ในข้อผิดพลาด HTTP 500 ที่ไม่ได้เข้าสู่ระบบ มันถูกบันทึกไว้จริง ๆ แต่ในไฟล์ข้อผิดพลาดจากโฮสต์เสมือนอื่นซึ่งไม่สามารถทำงานกับ url นั้นได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.