前言
在Web服务架构中,Apache和Nginx占据了绝大部分市场份额。对这两款核心Web服务器进行实时监控,是保障业务系统稳定运行的关键环节。Zabbix提供了完善的模板支持,通过开启Web服务器自带的状态页,结合Zabbix Agent的主动采集能力,我们可以轻松实现对Apache和Nginx的性能监控。
本文将分别详细介绍如何使用Zabbix监控Apache和Nginx,涵盖状态页开启、监控指标解读、模板配置及宏变量修改等全流程。
一、监控Apache Web服务器
1.1 实验环境说明
| 组件 | 配置 |
|---|---|
| Apache服务器 | AlmaLinux 9.1(IP: 192.168.38.23) |
| Zabbix Server | 192.168.38.30 |
| Zabbix Agent 2 | 已安装并正常运行 |
| Apache端口 | 80(默认) |
1.2 开启Apache Server Status状态页
Apache自带了Server Status模块,可以实时输出服务器运行状态信息。需要在Apache配置文件中启用该功能。
操作步骤:
编辑Apache主配置文件
httpd.conf(或conf.d/目录下的配置文件)在配置文件末尾添加以下代码段:
ExtendedStatus On <location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 127.0.0.1 192.168.38.30 </location>配置说明:
ExtendedStatus On:开启扩展状态信息,提供更详细的统计数据
<location /server-status>:定义状态页访问路径
SetHandler server-status:指定使用server-status处理器
Allow from:设置允许访问的IP地址,建议仅允许Zabbix Server和相关运维IP
重启Apache服务使配置生效:
systemctl restart httpd # 或 systemctl reload httpd1.3 验证状态页是否生效
在Zabbix Server端通过curl或浏览器访问状态页,测试能否正常获取数据:
curl http://192.168.38.23/server-status?auto如果配置正确,将返回类似以下格式的状态信息:
Total Accesses: 12345 Total kBytes: 67890 Uptime: 86400 ReqPerSec: 0.142857 BytesPerSec: 0.785714 BytesPerReq: 5.5 BusyWorkers: 2 IdleWorkers: 481.4 Apache监控指标详解
访问http://192.168.38.23/server-status?auto后,输出各项指标的含义如下:
| 指标 | 说明 | 监控意义 |
|---|---|---|
| Total Accesses | 服务器累计处理的请求总数 | 反映服务器总负载量,如果长时间不变说明请求未到达 |
| Total kBytes | 服务器累计传输的字节总数 | 反映流量总量 |
| Uptime | Apache服务运行时间(秒) | 监控服务稳定性,重启会重置该值 |
| ReqPerSec | 每秒处理的请求数(QPS) | 核心性能指标,反映当前吞吐量 |
| BytesPerSec | 每秒传输的字节数 | 反映当前带宽使用情况 |
| BytesPerReq | 每个请求平均传输字节数 | 反映请求平均大小 |
| BusyWorkers | 正在处理请求的工作线程数 | 反映当前并发处理中的请求数 |
| IdleWorkers | 空闲工作线程数 | 关键告警指标,为0时表示线程池耗尽 |
⚠️ 告警阈值参考:当
IdleWorkers持续为0时,说明所有工作线程都在忙碌,新的请求将进入排队等待,最终可能因超时而失败。建议设置触发器:当IdleWorkers < 10时发出预警。
1.5 Apache工作线程状态码解读
在状态页的详细视图中,每个工作线程会显示一个状态字符,含义如下:
| 状态码 | 含义 | 说明 |
|---|---|---|
_ | 等待连接 | 线程空闲,等待新请求 |
S | 准备连接 | 正在准备建立连接 |
R | 读取请求 | 正在读取客户端请求头 |
W | 发送响应 | 正在向客户端发送响应数据 |
K | 保持连接 | 长连接保持状态(Keep-Alive) |
D | DNS查询 | 正在执行DNS解析 |
C | 关闭连接 | 正在关闭连接 |
L | 写日志 | 正在写入访问日志 |
G | 退出完成 | 线程正在优雅退出 |
I | 空闲释放 | 线程已释放,等待复用 |
. | 未使用 | 该槽位当前未使用 |
1.6 配置Apache监控模板宏变量
Zabbix官方提供了Apache by Zabbix agent模板,在链接到主机前,需要先配置模板中的宏变量。
操作步骤:
登录Zabbix Web管理界面
进入数据采集(Data collection)→模板(Templates)
搜索找到Apache by Zabbix agent模板
切换到宏(Macros)选项卡
修改以下宏变量:
如下图所示:
| 宏变量 | 默认值 | 修改为 | 说明 |
|---|---|---|---|
{$APACHE.STATUS.PATH} | /server-status | /server-status | 状态页访问路径 |
{$APACHE.STATUS.PORT} | 80 | 80 | Apache服务端口 |
{$APACHE.STATUS.SCHEME} | http | http | 协议类型(http/https) |
如果需要使用HTTPS访问状态页,需将{$APACHE.STATUS.SCHEME}修改为https,同时调整端口为443。
1.7 链接Apache监控模板
进入数据采集(Data collection)→主机(Hosts)
选择需要监控的Apache主机(192.168.38.23)
切换到模板(Templates)选项卡
点击链接新模板(Link new templates)
搜索并选择Apache by Zabbix agent
点击更新(Update)保存配置
1.8 验证Apache监控数据
模板链接完成后,稍等片刻,进入监控(Monitoring)→最新数据(Latest data),筛选该主机,应能看到Apache相关的监控项数据在正常采集。
二、监控Nginx Web服务器
2.1 实验环境说明
| 组件 | 配置 |
|---|---|
| Nginx服务器 | AlmaLinux 9.1(IP: 192.168.38.28) |
| Zabbix Server | 192.168.38.30 |
| Zabbix Agent 2 | 已安装并正常运行 |
| Nginx端口 | 80(默认) |
2.2 开启Nginx Stub Status状态页
Nginx提供了ngx_http_stub_status_module模块,编译安装时默认已包含该模块。需要在配置文件中启用状态页功能。
操作步骤:
编辑Nginx配置文件nginx.conf,在server段中添加以下配置:
location /nginx-status { stub_status on; access_log off; allow 127.0.0.1; allow 192.168.38.30; deny all; }配置说明:
stub_status on:开启状态页功能
access_log off:关闭状态页访问日志,避免日志膨胀
allow/deny:设置访问控制,仅允许Zabbix Server访问
检查Nginx配置是否正确:
nginx -t重新加载Nginx配置:
nginx -s reload # 或 systemctl reload nginx2.3 验证Nginx状态页
在Zabbix Server端访问状态页,测试能否正常获取数据:
curl http://192.168.38.28/nginx-status如果配置正确,将返回类似以下格式的状态信息:
Active connections: 1 server accepts handled requests 1942 1942 2254 Reading: 0 Writing: 1 Waiting: 02.4 Nginx监控指标详解
Nginx状态页输出的各项指标含义如下:
| 指标 | 说明 | 监控意义 |
|---|---|---|
| Active connections | 当前活跃的连接数(包括Reading、Writing、Waiting) | 反映实时并发连接数 |
| accepts | Nginx总共接受的连接数 | 累计连接数,反映总访问量 |
| handled | Nginx成功完成握手的连接数 | 与accepts对比可判断连接丢失情况 |
| requests | Nginx总共处理的请求数 | 累计请求数,结合accepts可计算请求/连接比 |
| Reading | 正在读取客户端请求头的连接数 | 反映网络接收效率 |
| Writing | 正在向客户端发送响应的连接数 | 反映响应输出效率 |
| Waiting | 空闲长连接数(Keep-Alive等待) | 反映长连接复用情况 |
📊 关键指标解读:
accepts vs handled:正常情况下两者应接近相等。如果
accepts > handled,说明有连接握手失败,可能存在网络问题或客户端异常。QPS计算:通过两次采集
requests值的差值除以时间间隔,可计算出每秒请求数。Active connections:如果该值持续接近Nginx配置的
worker_connections上限,说明需要扩容。
2.5 配置Nginx监控模板宏变量
Zabbix官方提供了Nginx by Zabbix agent模板,同样需要先配置宏变量。
操作步骤:
进入数据采集(Data collection)→模板(Templates)
搜索找到Nginx by Zabbix agent模板
切换到宏(Macros)选项卡
修改以下宏变量:
| 宏变量 | 默认值 | 修改为 | 说明 |
|---|---|---|---|
{$NGINX.STATUS.PATH} | /nginx-status | /nginx-status | 状态页访问路径 |
{$NGINX.STATUS.PORT} | 80 | 80 | Nginx服务端口 |
{$NGINX.STATUS.SCHEME} | http | http | 协议类型 |
2.6 链接Nginx监控模板
进入数据采集(Data collection)→主机(Hosts)
选择需要监控的Nginx主机(192.168.38.28)
切换到模板(Templates)选项卡
点击链接新模板(Link new templates)
搜索并选择Nginx by Zabbix agent
点击更新(Update)保存配置
2.7 验证Nginx监控数据
模板链接完成后,进入监控(Monitoring)→最新数据(Latest data),筛选该主机,应能看到Nginx相关的监控项数据在正常采集。
三、常见问题排障
3.1 Apache状态页无法访问
| 问题现象 | 排查步骤 |
|---|---|
| 404 Not Found | 检查mod_status模块是否加载:httpd -M | grep status |
| 403 Forbidden | 检查状态页配置中的Allow指令是否包含Zabbix Server IP |
| 无数据返回 | 检查防火墙是否放行80端口,确认Apache服务运行状态 |
3.2 Nginx状态页无法访问
| 问题现象 | 排查步骤 |
|---|---|
| 404 Not Found | 检查ngx_http_stub_status_module是否编译:nginx -V 2>&1 | grep stub |
| 403 Forbidden | 检查状态页配置中的allow指令是否包含Zabbix Server IP |
| 无数据返回 | 检查防火墙配置,确认Nginx服务运行状态 |
3.3 Zabbix模板无数据
| 问题现象 | 排查方向 |
|---|---|
| 模板应用后无数据 | 检查Zabbix Agent 2是否正常运行,端口10050是否通 |
| 部分监控项显示不支持 | 检查宏变量配置是否正确,特别是路径和端口 |
| 数据采集延迟 | 检查Zabbix Server与Agent之间的网络延迟 |
四、监控告警建议
4.1 Apache关键告警指标
| 告警项 | 建议阈值 | 说明 |
|---|---|---|
| IdleWorkers 过低 | < 10 | 线程池即将耗尽 |
| BusyWorkers 持续高位 | > 80%总线程数 | 请求并发过大 |
| ReqPerSec 异常波动 | 环比变化 > 200% | 可能存在流量突增或DDoS攻击 |
| 服务不可用 | 状态页返回非200 | 服务进程崩溃或端口被占用 |
4.2 Nginx关键告警指标
| 告警项 | 建议阈值 | 说明 |
|---|---|---|
| Active connections 过高 | > worker_connections的80% | 连接数即将达到上限 |
| accepts vs handled 差值 | 连续差值 > 100 | 存在连接握手失败 |
| 服务不可用 | 状态页返回非200 | Nginx进程异常或端口不通 |
结语
本文通过详细的步骤演示了如何使用Zabbix监控Apache和Nginx Web服务器。核心要点总结如下:
状态页开启:Apache和Nginx均内置了状态页功能,通过简单的配置即可开启
指标采集:通过Zabbix Agent定期抓取状态页数据,实现自动化监控
模板化配置:利用Zabbix官方模板,大幅降低了配置复杂度
宏变量管理:通过宏变量实现模板的灵活复用
在实际生产环境中,建议同时关注Web服务器与应用业务的关联监控,将Web服务器性能指标与应用响应时间、错误率等结合分析,构建完整可观测性体系。
📌相关文章推荐:
《Zabbix监控Windows应用实践》
《Zabbix利用SNMP协议监控群晖NAS》
如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。
原创文章,转载请注明出处。