ปลั๊กอิน Nginx Munin ไม่แสดงข้อมูลใด ๆ


9

ฉันต้องการตรวจสอบสถิติ NGinx ผ่าน Munin แต่ปลั๊กอิน Nginx ไม่แสดงข้อมูล เป็นไปได้ไหมที่จะวินิจฉัยว่าทำไมปลั๊กอินเดียวของ munin nginx จึงดูเหมือนว่าใช้งานได้

nginx munin

เซิร์ฟเวอร์ทำงานบน CentOS 5.3

คำตอบ:


14

ปลั๊กอิน 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

หวังว่านี่จะช่วยได้


1
หมายเหตุด้านข้าง: การเปิดใช้งาน Ubuntu 16.04 การเปิดใช้งาน nginx ตามที่ระบุไว้ที่นี่ไม่เพียงพอในกรณีของฉัน นอกจากนี้ฉันยังต้องapt install libwww-perl timeบนโหนด munin สำหรับบันทึกการระบุปัญหากับUse of uninitialized value $LWP::VERSIONปลั๊กอิน nginx
โทมัส Urban

หมายเหตุด้านอื่น: เนื่องจาก IPv6 ได้รับการสนับสนุนบนเซิร์ฟเวอร์ในปัจจุบัน URL เริ่มต้นของปลั๊กอิน nginx_ * ที่ใช้http://localhost/อาจต้องการ IPv6 และจะไม่ตรงกับการกำหนดค่า nginx ซึ่งอนุญาตให้ใช้ IPv4 localhost เท่านั้น โดยการแก้ไข URL ใน/etc/munin/plugin-conf.d/munin-nodeเพื่อhttp://127.0.0.1/nginx_statusทำให้ปลั๊กอินทำงานได้ในที่สุด
โทมัส Urban

4

จากประสบการณ์ของฉันปลั๊กอินเหล่านี้มีแนวโน้มที่จะไม่ทำงานเนื่องจากการกำหนดค่า nginx ไม่ถูกต้อง นี่คือรายการย่อของสิ่งที่ต้องทำในกรณีนี้:

1. ตรวจสอบการติดตั้ง nginx

Nginx จะต้องรวบรวมด้วยโมดูลHttpStubStatusModule คุณสามารถตรวจสอบได้โดยการรันคำสั่งต่อไปนี้ (ภายใต้ sudo หรือ root):

nginx -V 2>&1 | grep -o with-http_stub_status_module

หากคุณเห็นผลลัพธ์ต่อไปนี้คุณยินดีที่จะไปข้างหน้า

with-http_stub_status_module

มิฉะนั้นคุณต้องคอมไพล์ nginx อีกครั้งโดยเปิดใช้งานโมดูลที่ต้องการหรือติดตั้งจากแหล่งอื่น (ในกรณีของฉัน repo Debian ที่เป็นค่าเริ่มต้นมีรุ่นที่ถูกต้อง)

2. ตรวจสอบการกำหนดค่า nginx

ฉันสมมติว่าคุณได้วางและเปิดใช้งานการตั้งค่าที่จำเป็น หากต้องการดูว่าใช้งานได้หรือไม่คุณสามารถ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) เพราะอดีตยังไม่ทำงาน)

3. ตรวจสอบการกำหนดค่าระบบและการอ้างอิง

หากต้องการตรวจสอบว่าปลั๊กอินทำงานหรือไม่ให้เรียกใช้

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มีอะไรขาดหายไป ขอบคุณมากสำหรับคำตอบที่กว้างขวางนี้
BurninLeo

2

อาจเป็นประโยชน์:

cd /etc/munin/plugins
munin-run PLUGINNAME

นอกจากนี้ใช้ตัวเลือกการแก้ปัญหาเพื่อทำงานแบบ munin

ตรวจสอบไฟล์ปลั๊กอินสำหรับเส้นทางฮาร์ดโค้ดใด ๆ และตรวจสอบว่าถูกต้องสำหรับระบบของคุณ:

grep '/' PLUGINNAME

ปลั๊กอิน nginx อาจขึ้นอยู่กับ Nginx ที่ถูกคอมไพล์ด้วยโมดูลหรือเอาต์พุตบันทึกในรูปแบบที่แน่นอน มีหน้าเอกสารสำหรับปลั๊กอินหรือไม่?


2

สิ่งสำคัญคือ url ในการกำหนดค่า munin

คุณจะต้องการ

[nginx*]
env.url http://localhost/nginx_status

บันทึก

nginx_status

ไม่

nginx-status

0

ติดตั้งlibwww-perlจากนั้นเรียกใช้คำสั่งmunin-run nginx_statusเพื่อดูสถิติ
รีสตาร์ทเซอร์วิส muni-node

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