Nginx Munin 插件没有显示数据

Mik*_*iko 12 munin nginx

我想通过 Munin 监控 NGinx 统计数据,但 Nginx 插件没有显示数据。是否可以诊断为什么只有一个 munin nginx 插件似乎在工作?

Nginx 穆宁

服务器在 CentOS 5.3 上运行

Tom*_*ner 16

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

http://127.0.0.1/nginx_status
Run Code Online (Sandbox Code Playgroud)

通常,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;
       }
 }
Run Code Online (Sandbox Code Playgroud)

添加此配置后不要忘记重新启动服务器,并确保 stus URL 返回状态数据。

对于每个插件的完整文档,您可以运行:

munindoc nginx_request
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


bad*_*dew 5

根据我的经验,由于 nginx 配置错误,这些插件可能无法正常工作。这是在这种情况下要做什么的候选清单:

1.检查nginx安装

Nginx 必须与HttpStubStatusModule模块一起编译。您可以通过运行以下命令(在 sudo 或 root 下)来检查:

nginx -V 2>&1 | grep -o with-http_stub_status_module
Run Code Online (Sandbox Code Playgroud)

如果您看到以下输出,则可以继续。

with-http_stub_status_module
Run Code Online (Sandbox Code Playgroud)

否则,您必须重新编译 nginx 并启用所需的模块或从不同的源安装(在我的情况下,默认的 Debian 存储库具有正确的版本)。

2.检查nginx配置

我假设您已经放置并启用了所需的 config。要查看它是否正常工作,您可以ssh到您的服务器并运行

wget http://localhost/nginx_status
Run Code Online (Sandbox Code Playgroud)

如果这里没有错误,那么问题是插件配置。如果服务器在此处返回错误,您可以通过修改配置进行调试:

location /nginx_status {
    stub_status on;
    access_log   off;
    error_log    /var/log/nginx/status.error.log;
    allow 127.0.0.1;
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

之后,在文件中/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"
Run Code Online (Sandbox Code Playgroud)

在我的情况下(如您从日志中看到的)问题是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;
        }
}
Run Code Online (Sandbox Code Playgroud)

(注意我也换成listen: 127.0.0.1了80端口(ipv4+ipv6),因为前者也不行)

3.检查系统配置和依赖项

要检查插件本身是否正常工作,请运行

munin-run nginx_status
Run Code Online (Sandbox Code Playgroud)

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

如果您遇到LWP库错误(例如LWP::UserAgentLWP::VERSION),则您的系统缺少nginx_status插件所需的包。

在 Debian / Ubuntu 上,运行

apt install libwww-perl
Run Code Online (Sandbox Code Playgroud)

在 CentOS 上

yum install perl-libwww-perl
Run Code Online (Sandbox Code Playgroud)

之后再次使用munin-run. 预期输出(数字会有所不同):

total.value 1
reading.value 0
writing.value 1
waiting.value 0
Run Code Online (Sandbox Code Playgroud)