Nginx Munin插件未显示数据


9

我想通过Munin监视NGinx的统计信息,但Nginx插件未显示任何数据。是否可以诊断为什么只有munin nginx插件之一有效?

Nginx Munin

服务器在CentOS 5.3上运行

Answers:


14

Nginx插件依赖以下URL来获取状态信息:

http://127.0.0.1/nginx_status

通常,nginx没有将此URL配置为显示状态数据。

从插件的文档中,我看到需要将nginx配置为以特殊的URL显示状态数据。

您需要通过将以下行添加到站点的配置中来启用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插件问题的日志。
Thomas Urban

另一个注意事项:由于现在服务器上支持http://localhost/IPv6,因此使用的nginx_ *插件的默认URL 可能更喜欢IPv6,因此将与仅允许IPv4本地主机的nginx配置不匹配。通过修复URL /etc/munin/plugin-conf.d/munin-nodehttp://127.0.0.1/nginx_status最终使插件正常工作。
Thomas 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或从其他源安装(在我的情况下,默认Debian存储库具有正确的版本)。

2.检查nginx配置

我假设您已经放置并启用了所需的config。要查看其是否正常运行,可以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

(请注意,插件必须“打开”-符号链接必须位于/etc/munin/plugins- 如果没有,请阅读手册

如果您遇到LWP库错误(例如LWP::UserAgentLWP::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(服务器名/127.0.0.1:4949上的服务nginx_status未返回任何用于标签等待的数据)中的错误消息,我可能已经搜索了多年才能发现libwww-perl丢失的消息。非常感谢您的广泛回答。
BurninLeo

2

可能有帮助:

cd /etc/munin/plugins
munin-run PLUGINNAME

另外,使用debug选项进行munin运行。

检查插件文件中是否有任何硬编码路径,并验证它们是否适合您的系统:

grep '/' PLUGINNAME

Nginx插件可能依赖于使用某些模块编译的Nginx或以某种格式的日志输出。插件有任何文档页面吗?


2

关键是munin config中的url。

你会需要

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

注意

nginx_status

nginx-status

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.