ฉันต้องการตรวจสอบสถิติ NGinx ผ่าน Munin แต่ปลั๊กอิน Nginx ไม่แสดงข้อมูล เป็นไปได้ไหมที่จะวินิจฉัยว่าทำไมปลั๊กอินเดียวของ munin nginx จึงดูเหมือนว่าใช้งานได้
เซิร์ฟเวอร์ทำงานบน CentOS 5.3
ฉันต้องการตรวจสอบสถิติ NGinx ผ่าน Munin แต่ปลั๊กอิน Nginx ไม่แสดงข้อมูล เป็นไปได้ไหมที่จะวินิจฉัยว่าทำไมปลั๊กอินเดียวของ munin nginx จึงดูเหมือนว่าใช้งานได้
เซิร์ฟเวอร์ทำงานบน CentOS 5.3
คำตอบ:
ปลั๊กอิน nginx ใช้ URL ต่อไปนี้เพื่อรับข้อมูลสถานะ:
http://127.0.0.1/nginx_status
โดยปกติแล้ว nginx จะไม่ได้กำหนดค่า URL นี้ให้แสดงข้อมูลสถานะ
จากเอกสารของปลั๊กอินฉันเห็นว่าจำเป็นต้องกำหนดค่า nginx เพื่อแสดงข้อมูลสถานะใน URL แบบ spesific
คุณต้องเปิดใช้งานสถานะ nginx โดยเพิ่มบรรทัดต่อไปนี้ในการกำหนดค่าของไซต์:
server {
listen 127.0.0.1;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
อย่าลืมรีสตาร์ทเซิร์ฟเวอร์หลังจากเพิ่มการกำหนดค่านี้และตรวจสอบให้แน่ใจว่า stus URL ส่งคืนข้อมูลสถานะ
สำหรับเอกสารประกอบที่สมบูรณ์ของแต่ละปลั๊กอินคุณสามารถเรียกใช้:
munindoc nginx_request
หวังว่านี่จะช่วยได้
http://localhost/
อาจต้องการ IPv6 และจะไม่ตรงกับการกำหนดค่า nginx ซึ่งอนุญาตให้ใช้ IPv4 localhost เท่านั้น โดยการแก้ไข URL ใน/etc/munin/plugin-conf.d/munin-node
เพื่อhttp://127.0.0.1/nginx_status
ทำให้ปลั๊กอินทำงานได้ในที่สุด
จากประสบการณ์ของฉันปลั๊กอินเหล่านี้มีแนวโน้มที่จะไม่ทำงานเนื่องจากการกำหนดค่า nginx ไม่ถูกต้อง นี่คือรายการย่อของสิ่งที่ต้องทำในกรณีนี้:
Nginx จะต้องรวบรวมด้วยโมดูลHttpStubStatusModule คุณสามารถตรวจสอบได้โดยการรันคำสั่งต่อไปนี้ (ภายใต้ sudo หรือ root):
nginx -V 2>&1 | grep -o with-http_stub_status_module
หากคุณเห็นผลลัพธ์ต่อไปนี้คุณยินดีที่จะไปข้างหน้า
with-http_stub_status_module
มิฉะนั้นคุณต้องคอมไพล์ nginx อีกครั้งโดยเปิดใช้งานโมดูลที่ต้องการหรือติดตั้งจากแหล่งอื่น (ในกรณีของฉัน repo Debian ที่เป็นค่าเริ่มต้นมีรุ่นที่ถูกต้อง)
ฉันสมมติว่าคุณได้วางและเปิดใช้งานการตั้งค่าที่จำเป็น หากต้องการดูว่าใช้งานได้หรือไม่คุณสามารถssh
ไปยังเซิร์ฟเวอร์และเรียกใช้
wget http://localhost/nginx_status
หากคุณไม่มีข้อผิดพลาดที่นี่แสดงว่าปัญหาคือการกำหนดค่าปลั๊กอิน หากเซิร์ฟเวอร์ส่งคืนข้อผิดพลาดที่นี่คุณสามารถดีบักได้โดยแก้ไขการกำหนดค่า:
location /nginx_status {
stub_status on;
access_log off;
error_log /var/log/nginx/status.error.log;
allow 127.0.0.1;
deny all;
}
หลังจากนั้นในไฟล์/var/log/nginx/status.error.log
คุณสามารถดูเหตุผลที่แน่นอนว่าเหตุใดเซิร์ฟเวอร์จึงส่งคืนข้อผิดพลาด:
[error] 2203#0: *1442 access forbidden by rule, client: ::1, server: localhost, request: "GET /nginx_status HTTP/1.1", host: "localhost"
ในกรณีของฉัน (ตามที่คุณเห็นจากบันทึก) ปัญหาคือclient: ::1
ในขณะที่การกำหนดค่าอนุญาตการเข้าถึงจาก127.0.0.1
ในการแก้ไขปัญหาคุณสามารถทำตามคำแนะนำของ cepharumหรือแก้ไขการกำหนดค่าโฮสต์เสมือน:
server {
listen 80;
listen [::]:80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
(โปรดสังเกตว่าฉันยังแทนที่listen: 127.0.0.1
ด้วยพอร์ต 80 (ipv4 + ipv6) เพราะอดีตยังไม่ทำงาน)
หากต้องการตรวจสอบว่าปลั๊กอินทำงานหรือไม่ให้เรียกใช้
munin-run nginx_status
(โปรดทราบว่าปลั๊กอินจะต้อง "เปิดใช้" - ต้องมี symlink อยู่ที่/etc/munin/plugins
- อ่านคู่มือหากไม่ได้)
หากคุณได้รับข้อผิดพลาดกับไลบรารี่LWP
(เช่นLWP::UserAgent
หรือLWP::VERSION
) ระบบของคุณจะขาดแพ็คเกจที่nginx_status
ปลั๊กอินต้องการ
บน Debian / Ubuntu ให้เรียกใช้
apt install libwww-perl
บน CentOS
yum install perl-libwww-perl
munin-run
หลังจากการทดสอบว่าปลั๊กอินอีกครั้งโดยใช้ ผลลัพธ์ที่คาดหวัง (ตัวเลขจะแตกต่างกัน):
total.value 1
reading.value 0
writing.value 1
waiting.value 0
/var/log/munin-update.log
(บริการ nginx_status บนชื่อเซิร์ฟเวอร์ / 127.0.0.1: 4949 ไม่ส่งคืนข้อมูลสำหรับการรอป้ายกำกับ) ฉันสามารถค้นหาข้อมูลเป็นเวลาหลายปีเพื่อค้นหาว่าlibwww-perl
มีอะไรขาดหายไป ขอบคุณมากสำหรับคำตอบที่กว้างขวางนี้
อาจเป็นประโยชน์:
cd /etc/munin/plugins
munin-run PLUGINNAME
นอกจากนี้ใช้ตัวเลือกการแก้ปัญหาเพื่อทำงานแบบ munin
ตรวจสอบไฟล์ปลั๊กอินสำหรับเส้นทางฮาร์ดโค้ดใด ๆ และตรวจสอบว่าถูกต้องสำหรับระบบของคุณ:
grep '/' PLUGINNAME
ปลั๊กอิน nginx อาจขึ้นอยู่กับ Nginx ที่ถูกคอมไพล์ด้วยโมดูลหรือเอาต์พุตบันทึกในรูปแบบที่แน่นอน มีหน้าเอกสารสำหรับปลั๊กอินหรือไม่?
สิ่งสำคัญคือ url ในการกำหนดค่า munin
คุณจะต้องการ
[nginx*]
env.url http://localhost/nginx_status
บันทึก
nginx_status
ไม่
nginx-status
ติดตั้งlibwww-perlจากนั้นเรียกใช้คำสั่งmunin-run nginx_status
เพื่อดูสถิติ
รีสตาร์ทเซอร์วิส muni-node
apt install libwww-perl time
บนโหนด munin สำหรับบันทึกการระบุปัญหากับUse of uninitialized value $LWP::VERSION
ปลั๊กอิน nginx