Zabbix 实时采集 Nginx Worker 状态并触发告警的核心路径是:Nginx 启用 stub_status 暴露指标 → Zabbix Agent 通过 UserParameter 解析采集 → 基于连接、读写、等待等量化指标设置阈值告警,辅以进程数和错误日志监控增强可靠性。

要让 Zabbix 实时采集 Nginx Worker 状态并触发告警,关键不是直接监控进程名或 ps 输出,而是通过 Nginx 自身暴露的指标 + Zabbix 主动拉取/被动接收机制完成闭环。核心路径是:Nginx 提供可量化状态(连接、请求、错误等)→ Zabbix 获取这些数据 → 基于阈值触发告警。
启用 Nginx stub_status 并开放访问
这是最轻量、兼容性最强的基础方案,适用于所有标准 Nginx(无需 OpenResty 或编译模块):
- 在 nginx.conf 的 http 或 server 块中添加如下配置:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 10.0.1.0/24; # Zabbix Server 所在网段
deny all;
}
- 重载 Nginx:
nginx -s reload - 验证是否生效:
curl http://localhost/nginx_status,应返回类似:
Active connections: 124
server accepts handled requests
123456 123456 789012
Reading: 2 Writing: 6 Waiting: 116
配置 Zabbix Agent 主动采集 stub_status 数据
Zabbix Agent 可通过 curl 或内置 web.page.get 监控项解析该页面,推荐使用自定义 UserParameter 方式,更稳定可控:
- 编辑 Zabbix Agent 配置文件(如
/etc/zabbix/zabbix_agentd.d/nginx.conf):
UserParameter=nginx.status.active,curl -s http://127.0.0.1/nginx_status 2>/dev/null | grep 'Active connections' | awk '{print $3}'
UserParameter=nginx.status.accepts,curl -s http://127.0.0.1/nginx_status 2>/dev/null | awk 'NR==3 {print $1}'
UserParameter=nginx.status.handled,curl -s http://127.0.0.1/nginx_status 2>/dev/null | awk 'NR==3 {print $2}'
UserParameter=nginx.status.requests,curl -s http://127.0.0.1/nginx_status 2>/dev/null | awk 'NR==3 {print $3}'
UserParameter=nginx.status.reading,curl -s http://127.0.0.1/nginx_status 2>/dev/null | grep 'Reading:' | awk '{print $2}'
UserParameter=nginx.status.writing,curl -s http://127.0.0.1/nginx_status 2>/dev/null | grep 'Writing:' | awk '{print $2}'
UserParameter=nginx.status.waiting,curl -s http://127.0.0.1/nginx_status 2>/dev/null | grep 'Waiting:' | awk '{print $2}'
- 重启 Zabbix Agent:
systemctl restart zabbix-agent - 在 Zabbix Web 界面中,为对应主机添加监控项,类型选 Zabbix agent,键值填如
nginx.status.active,更新间隔建议 10–30 秒
定义 Worker 状态相关告警规则
Zabbix 告警不基于“worker 进程数”本身,而是基于其行为反映的异常——比如连接堆积、请求积压、错误突增。重点关注以下几类:
-
连接过载:Active connections 持续 > 90% 的
worker_connections配置值(例如配置为 4096,则告警阈值设为 3700) - 写连接异常升高:Writing 数值长期 > 10 且持续上升,可能表示后端响应慢或阻塞
- 等待连接堆积:Waiting 数值突增(如 5 分钟内增长 300%),说明请求排队严重,需检查 upstream 或应用层延迟
-
拒绝率上升:结合 error.log 中
accept() failed (24: Too many open files)或no live upstreams关键词,用 Zabbix 的日志监控项捕获并触发告警
(可选)增强:用 Zabbix 直接监控 worker 进程状态
若需感知 worker 异常退出(如 shutdown 堆积、aborting),可补充进程级监控:
- 添加 Zabbix 监控项,键值:
proc.num[nginx],用于统计 nginx worker 进程总数(master 不计入) - 添加日志监控项,键值:
log[/var/log/nginx/error.log,"aborting|open socket left in connection",,skip],匹配关键词并告警 - 设置触发器表达式示例:
{HOSTNAME:proc.num[nginx].last()}


















