Zabbix监控Apache与Nginx应用实践完整指南
2026/8/20 15:13:26 网站建设 项目流程

前言

在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 Server192.168.38.30
Zabbix Agent 2已安装并正常运行
Apache端口80(默认)

1.2 开启Apache Server Status状态页

Apache自带了Server Status模块,可以实时输出服务器运行状态信息。需要在Apache配置文件中启用该功能。

操作步骤:

  1. 编辑Apache主配置文件httpd.conf(或conf.d/目录下的配置文件)

  2. 在配置文件末尾添加以下代码段:

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 httpd

1.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: 48

1.4 Apache监控指标详解

访问http://192.168.38.23/server-status?auto后,输出各项指标的含义如下:

指标说明监控意义
Total Accesses服务器累计处理的请求总数反映服务器总负载量,如果长时间不变说明请求未到达
Total kBytes服务器累计传输的字节总数反映流量总量
UptimeApache服务运行时间(秒)监控服务稳定性,重启会重置该值
ReqPerSec每秒处理的请求数(QPS)核心性能指标,反映当前吞吐量
BytesPerSec每秒传输的字节数反映当前带宽使用情况
BytesPerReq每个请求平均传输字节数反映请求平均大小
BusyWorkers正在处理请求的工作线程数反映当前并发处理中的请求数
IdleWorkers空闲工作线程数关键告警指标,为0时表示线程池耗尽

⚠️ 告警阈值参考:当IdleWorkers持续为0时,说明所有工作线程都在忙碌,新的请求将进入排队等待,最终可能因超时而失败。建议设置触发器:当IdleWorkers < 10时发出预警。

1.5 Apache工作线程状态码解读

在状态页的详细视图中,每个工作线程会显示一个状态字符,含义如下:

状态码含义说明
_等待连接线程空闲,等待新请求
S准备连接正在准备建立连接
R读取请求正在读取客户端请求头
W发送响应正在向客户端发送响应数据
K保持连接长连接保持状态(Keep-Alive)
DDNS查询正在执行DNS解析
C关闭连接正在关闭连接
L写日志正在写入访问日志
G退出完成线程正在优雅退出
I空闲释放线程已释放,等待复用
.未使用该槽位当前未使用

1.6 配置Apache监控模板宏变量

Zabbix官方提供了Apache by Zabbix agent模板,在链接到主机前,需要先配置模板中的宏变量。

操作步骤:

  1. 登录Zabbix Web管理界面

  2. 进入数据采集(Data collection)模板(Templates)

  3. 搜索找到Apache by Zabbix agent模板

  4. 切换到宏(Macros)选项卡

  5. 修改以下宏变量:

如下图所示:

宏变量默认值修改为说明
{$APACHE.STATUS.PATH}/server-status/server-status状态页访问路径
{$APACHE.STATUS.PORT}8080Apache服务端口
{$APACHE.STATUS.SCHEME}httphttp协议类型(http/https)

如果需要使用HTTPS访问状态页,需将{$APACHE.STATUS.SCHEME}修改为https,同时调整端口为443。

1.7 链接Apache监控模板

  1. 进入数据采集(Data collection)主机(Hosts)

  2. 选择需要监控的Apache主机(192.168.38.23)

  3. 切换到模板(Templates)选项卡

  4. 点击链接新模板(Link new templates)

  5. 搜索并选择Apache by Zabbix agent

  6. 点击更新(Update)保存配置

1.8 验证Apache监控数据

模板链接完成后,稍等片刻,进入监控(Monitoring)最新数据(Latest data),筛选该主机,应能看到Apache相关的监控项数据在正常采集。

二、监控Nginx Web服务器

2.1 实验环境说明

组件配置
Nginx服务器AlmaLinux 9.1(IP: 192.168.38.28)
Zabbix Server192.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 nginx

2.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: 0

2.4 Nginx监控指标详解

Nginx状态页输出的各项指标含义如下:

指标说明监控意义
Active connections当前活跃的连接数(包括Reading、Writing、Waiting)反映实时并发连接数
acceptsNginx总共接受的连接数累计连接数,反映总访问量
handledNginx成功完成握手的连接数与accepts对比可判断连接丢失情况
requestsNginx总共处理的请求数累计请求数,结合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模板,同样需要先配置宏变量。

操作步骤:

  1. 进入数据采集(Data collection)模板(Templates)

  2. 搜索找到Nginx by Zabbix agent模板

  3. 切换到宏(Macros)选项卡

  4. 修改以下宏变量:

宏变量默认值修改为说明
{$NGINX.STATUS.PATH}/nginx-status/nginx-status状态页访问路径
{$NGINX.STATUS.PORT}8080Nginx服务端口
{$NGINX.STATUS.SCHEME}httphttp协议类型

2.6 链接Nginx监控模板

  1. 进入数据采集(Data collection)主机(Hosts)

  2. 选择需要监控的Nginx主机(192.168.38.28)

  3. 切换到模板(Templates)选项卡

  4. 点击链接新模板(Link new templates)

  5. 搜索并选择Nginx by Zabbix agent

  6. 点击更新(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存在连接握手失败
服务不可用状态页返回非200Nginx进程异常或端口不通

结语

本文通过详细的步骤演示了如何使用Zabbix监控Apache和Nginx Web服务器。核心要点总结如下:

  • 状态页开启:Apache和Nginx均内置了状态页功能,通过简单的配置即可开启

  • 指标采集:通过Zabbix Agent定期抓取状态页数据,实现自动化监控

  • 模板化配置:利用Zabbix官方模板,大幅降低了配置复杂度

  • 宏变量管理:通过宏变量实现模板的灵活复用

在实际生产环境中,建议同时关注Web服务器与应用业务的关联监控,将Web服务器性能指标与应用响应时间、错误率等结合分析,构建完整可观测性体系。


📌相关文章推荐

  • 《Zabbix监控Windows应用实践》

  • 《Zabbix利用SNMP协议监控群晖NAS》

如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。

原创文章,转载请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询