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》

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

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

相关推荐
王志来137944730081 小时前
从分散到集成:工控服务器机箱采购如何实现“一站式”破局
运维·服务器·人工智能·python
暖核1 小时前
Linux实战入门:从零编写第一个Bash Shell脚本
linux·运维·bash
云原生指北1 小时前
Docker Sandboxes 的隔离例外:共享 Skills 与宿主机 MCP
运维·docker·ai·容器·agent
2301_786756601 小时前
不做分子仿真、不布局自动化实验室,垂直科研智能平台同样跑通 AI for Science 可持续变现
运维·人工智能·自动化
志栋智能2 小时前
超自动化安全如何提升合规与审计效率?
运维·安全·自动化
March.s2 小时前
深入理解 Linux 系统启动原理
linux·运维·服务器
zbyyd2 小时前
Linux 基础与 Shell 命令
linux·运维·arm开发
起名真的太难了2 小时前
Linux系统运维与远程管理核心命令速查指南
linux·运维·服务器
xiaoye-duck2 小时前
《Linux网络编程》吃透 Linux 网络传输全流程:完整梳理局域网通信、封装解包与跨网络传输原理
linux·网络