zabbix监控nginx需打通状态接口→agent采集→server存储→可视化告警链路,核心是启用stub status模块、配置受限访问、定义userparameter解析指标、web端创建监控项与触发器,并结合日志补充qps及错误率分析。

要用 Zabbix 监控 Nginx 的关键指标,核心是打通“Nginx 提供状态数据 → Zabbix Agent 采集 → Zabbix Server 存储分析 → 可视化与告警”这条链路。重点不在装一堆插件,而在于确保状态接口可用、采集脚本稳定、监控项定义准确。
启用并验证 Nginx Stub Status 接口
Nginx 自带的 ngx_http_stub_status_module 是最轻量、最可靠的指标来源,但默认不编译进二进制文件。
- 先确认模块已启用:
nginx -V 2>&1 | grep -o with-http_stub_status_module,有输出才说明支持 - 若无输出,需重新编译安装,关键参数是
--with-http_stub_status_module - 在任意 server 块中添加配置(推荐限制访问):
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.8.0/24; # Zabbix Server 所在网段
deny all;
}
重启 Nginx 后,用 curl http://127.0.0.1/nginx-status 应返回类似:
server accepts handled requests
262648 262648 48
Reading: 0 Writing: 1 Waiting: 2
这说明接口就绪,后续所有监控都基于此原始输出解析。
编写 Zabbix Agent 自定义监控项
Zabbix 默认不识别 Nginx 状态页内容,需通过 UserParameter 定义采集逻辑。编辑 /etc/zabbix/zabbix_agentd.conf 或放入 /etc/zabbix/zabbix_agentd.d/nginx.conf:
UserParameter=nginx.accepts, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==4 {print $2}'
UserParameter=nginx.handled, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==4 {print $3}'
UserParameter=nginx.requests, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==4 {print $4}'
UserParameter=nginx.reading, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==5 {print $2}'
UserParameter=nginx.writing, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==5 {print $4}'
UserParameter=nginx.waiting, curl -s http://127.0.0.1/nginx-status 2>/dev/null | awk 'NR==5 {print $6}'
重启 agent:systemctl restart zabbix-agent,然后在 Zabbix Server 上测试采集是否成功:
能返回数字(如 3),代表采集通路已跑通。
在 Zabbix Web 界面配置监控项与触发器
登录 Zabbix 前端,进入对应 Nginx 主机的「配置 → 监控项 → 创建监控项」:
- 名称:如 “Nginx 活跃连接数”
-
键值:填上面定义的
nginx.active - 类型:Zabbix agent(非主动)
- 更新间隔:建议 30 秒或 60 秒,太短会增加 Nginx 负担
- 应用集:新建 “Nginx Status” 方便归类
对每个指标(accepts、handled、requests、reading、writing、waiting)重复创建。之后可建图形展示趋势,再加触发器实现告警:
- 活跃连接数 > 1000 持续 2 分钟 → 触发 “Nginx 连接过载” 告警
- Writing 数长期为 0 或突降 → 可能后端服务异常或响应阻塞
- Requests 增速远高于 Accepts → 出现大量重试或客户端异常请求
补充:QPS 与错误率的间接监控
Stub Status 不直接提供 QPS 和错误码统计,需结合 access log 分析:
- 启用
$request_time和$status记录到日志,例如:
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
再用定时任务 + awk 统计每分钟 4xx/5xx 数量、平均响应时间,通过 Zabbix 的 log[] 或自定义脚本方式上报。这类指标虽非实时,但对容量评估和故障复盘至关重要。











