Zabbix监控Apache与Nginx应用实践完整指南

前言

在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配置文件中启用该功能。

操作步骤:

  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

配置说明:

  • 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 服务器累计传输的字节总数 反映流量总量
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 模板,在链接到主机前,需要先配置模板中的宏变量。

操作步骤:

  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} 80 80 Apache服务端口
{$APACHE.STATUS.SCHEME} http http 协议类型(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 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 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) 反映实时并发连接数
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 模板,同样需要先配置宏变量。

操作步骤:

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

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

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

  4. 修改以下宏变量:

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

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
403 Forbidden 检查状态页配置中的Allow指令是否包含Zabbix Server IP
无数据返回 检查防火墙是否放行80端口,确认Apache服务运行状态

3.2 Nginx状态页无法访问

问题现象 排查步骤
404 Not Found 检查ngx_http_stub_status_module是否编译:`nginx -V 2>&1
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》

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

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

相关推荐
吹什么轩3 分钟前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
殷忆枫37 分钟前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
第404号工位44 分钟前
手机到底有没有偷听我们?我抓包了 72 小时,抓到了真凶
linux·人工智能·架构
老李IT笔记1 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
字节跳动开源1 小时前
ByteDance 2026 上半年 Linux 内核贡献回顾
linux·开源
小此方1 小时前
Linux网络(二十八):从NAT转换到正反向代理:图解内网通信、NAPT端口映射
linux·运维·网络
刚入门的大一新生1 小时前
Linux-进程池
linux·运维·服务器
数据库小学妹2 小时前
数据库运维五级成熟度:监控、备份、高可用怎么串起来
运维·数据库·监控
AliCloudROS2 小时前
从 1 万到 20 万:OOS Loop 任务规模提升 20 倍的攻坚记录
运维·性能优化
鱼很腾apoc2 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c