Zabbix7.4.8(二):通过http监控Nginx相关指标
一、概述
使用 Zabbix 监控 Nginx 是确保 Web 服务稳定性的关键。其核心原理是通过 Nginx 的 stub_status 模块获取服务器的实时状态信息,然后由 Zabbix Agent 采集并上报给 Zabbix Server。
Nginx 自带一个名为 ngx_http_stub_status_module 的模块,启用后可通过一个特定 URL(如 /nginx_status)返回简洁的状态数据。
下面直接通过http获取服务器的实时状态信息。
二、操作过程
2.1在 Nginx 服务器上启用 stub_status 模块
1.进入nginx容器:
docker exec -it nginx /bin/bash
2.确认模块已编译:
执行 nginx -V 2>&1 | grep -o with-http_stub_status_module
如果有输出,说明模块已包含。如果没有,需要重新编译 Nginx 并添加 --with-http_stub_status_module 参数。
3.编辑 Nginx 配置文件(通常在 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下)。
在 server 块中添加以下 location 配置:
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
allow 172.22.0.0/16;
allow 172.17.0.0/16;
deny all;
}
允许192.168.1.0/24、172.22.0.0/16整个子网访问
allow 172.17.0.0/16; # ✅ 允许 Docker 网桥网段
4.重启nginx
#docker restart nginx
5.测试状态页面:
在 Nginx 服务器上执行:
curl http://192.168.1.204:7001/nginx_status
监控指标解释
指标 含义
Active connections 当前活动的 TCP 连接总数
accepts Nginx 接受的连接总数
handled Nginx 处理的连接总数
requests Nginx 处理的请求数总数
Reading Nginx 正在读取客户端请求头的连接数
Writing Nginx 正在向客户端发送响应的连接数
Waiting 空闲的 keep-alive 连接数
2.2在 Zabbix Web 中调整参数
1.数据采集——模版
2.监测——主机——创建主机
模版群组:Templates/Applications
主机群组:Applications
2.3监控效果
三、问题
3.1问题1
执行apk add curl报如下错误:
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied
解决方案:
从宿主机以 root 身份进入容器
docker exec -it --user root zabbix-server-pgsql /bin/sh
apk add curl
3.2问题2
在另外一台服务器中执行curl http://192.168.1.204:7001/nginx_status,报
curl http://192.168.1.204:7001/nginx_status
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.27.5</center>
</body>
</html>
原因:
Docker 容器网络模型导致源 IP 被 NAT。
从这台 172.22.0.6 的机器上执行:
curl http://192.168.1.204:7001/nginx_status
这个请求的路径是:
[容器 A: 172.22.0.6]
→ 经过 Docker 网络 NAT
→ 到达 [Nginx 容器]
在 Nginx 容器看来,这个请求的源 IP 并不是 172.22.0.6,而是 Docker 网桥的 IP(如 172.17.0.1 )。
解决方案:
在default.conf增加allow 172.17.0.0/16;