我想通过 Munin 监控 NGinx 统计数据,但 Nginx 插件没有显示数据。是否可以诊断为什么只有一个 munin 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)
希望这可以帮助。
根据我的经验,由于 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 存储库具有正确的版本)。
我假设您已经放置并启用了所需的 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),因为前者也不行)
要检查插件本身是否正常工作,请运行
munin-run nginx_status
Run Code Online (Sandbox Code Playgroud)
(请注意,插件必须“打开” - 必须存在符号链接/etc/munin/plugins
-如果没有,请阅读手册)
如果您遇到LWP
库错误(例如LWP::UserAgent
或LWP::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)
归档时间: |
|
查看次数: |
7601 次 |
最近记录: |