zabbix监控nginx需打通数据采集→服务暴露→指标解析→规则触发四环节:启用stub_status模块并安全暴露状态页;agent端用脚本+userparameter解析html指标;服务端配置模板、关键监控项与触发器;最后配置告警通道并验证。

Zabbix 监控 Nginx 的核心运行指标,关键不在“装完就告警”,而在于打通数据采集 → 服务暴露 → 指标解析 → 规则触发这四个环节。只要每一步配置准确,告警就能稳定、及时、有依据。
Nginx 必须启用 status 模块并安全暴露
这是整个监控链路的起点。Zabbix 不直接连 Nginx 进程,而是通过 HTTP 抓取其内置状态页(stub_status)。
- 确认编译时已启用:
--with-http_stub_status_module(yum/apt 安装的主流包通常默认包含) - 在 server 或 http 块中添加 location 配置,例如:
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.10.5; # Zabbix Agent 所在 IP
deny all;
}
重启 Nginx 后,用 curl http://localhost/nginx_status 能看到类似
Active connections: 3<br>server accepts handled requests<br> 42 42 128<br>Reading: 0 Writing: 1 Waiting: 2的输出,说明已就绪。
Agent 端需用脚本+UserParameter 解析原始状态
Zabbix Agent 无法直接理解 HTML 文本,必须靠脚本提取数字。推荐将脚本统一放在 /etc/zabbix/scripts/ngx_status.sh,内容含多个函数(active、accepts、handled、requests、reading、writing、waiting)。
- 脚本开头定义 HOST 和 PORT(如
HOST="127.0.0.1",PORT="80") - 每个函数用
curl获取页面,再用awk或grep + awk提取对应字段值 - 在
/etc/zabbix/zabbix_agentd.conf中启用自定义 key:
UserParameter=nginx.status[*],/etc/zabbix/scripts/ngx_status.sh "$1"
保存后重启 agent,并用 zabbix_get -s 127.0.0.1 -k "nginx.status[active]" 测试是否返回纯数字(如 3),成功即代表采集通路跑通。
服务端配置模板+关键监控项与触发器
Zabbix 官方或社区模板(如 Template App Nginx 或第三方 zabbix_monitor_nginx_template)可大幅减少手动配置。导入后,重点检查和调整以下几类监控项及对应触发器:
-
活跃连接数:监控项 key 为
nginx.status[active],建议设置触发器表达式:{last()}>1000(根据实际并发阈值调整) -
请求处理异常:对比
nginx.status[accepts]和nginx.status[handled],若差值持续增长(如{nginx.status[accepts].last()}-{nginx.status[handled].last()}>50),说明连接被丢弃,可能因 worker_connections 不足或系统资源瓶颈 -
进程存活:用内置 key
proc.num[nginx],触发器设为{last()}=0,实现宕机秒级告警 -
Waiting 连接突增:key
nginx.status[waiting],若长期高于nginx.status[active]的 70%,常意味着后端响应慢或 upstream 阻塞
告警通道与验证不能跳过
配置好触发器只是第一步,还需确保通知能真正触达:
- 在 Zabbix Web 界面「Administration → Media types」中配置邮件、微信或钉钉机器人等媒介
- 为用户(如 Admin)绑定对应 media,并开启「Notifications」
- 手动触发测试:临时把触发器阈值调低(如 active > 1),观察是否收到告警;再恢复原值
- 模拟故障:停掉 nginx,确认告警生成;启动后,检查告警是否自动恢复(依赖问题严重性设置与恢复表达式)











