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》

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

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

相关推荐
半仙白桑8 分钟前
内核篇第十五讲:system-V共享内存
linux·共享内存·shmget·shmat·shmdt·shmctl
一条破秋裤26 分钟前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
s6516654962 小时前
IDT和GDT是什么
linux
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_decoder_set_estimate_rate调用流程与实战(四十五)
linux·gstreamer音视频·音视频进阶
FED_AF2 小时前
Linux运维“邪修”功法之通配符
linux·运维
箓维2 小时前
线程的概念和理解
linux
云杂项3 小时前
tmux指南:安装、配置与高效使用(Ubuntu上)
linux·服务器·ubuntu
YOLO数据集集合3 小时前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检
j7~3 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
分布式存储与RustFS3 小时前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准