【免费下载链接】community-templates
Zabbix Community Templates repository
项目地址:
https://gitcode.com/gh_mirrors/co/community-templates
点击查看 免费下载
本篇技术指南围绕 Zabbix Community Templates 仓库中的 App Apache2 模板(Applications/template_apache_2_web_server_http_item)展开,讲解如何在不部署任何外部脚本的前提下,仅凭 Zabbix 自带的 HTTP agent 采集项 + 依赖项(Dependent item)+ 正则预处理,实现对 Apache 2 Web 服务器的版本、访问量、吞吐量、并发 worker、运行时长等指标的一站式监控。读完本文,你将掌握该模板的宏配置、采集链路、预处理正则、触发器逻辑与导入接入的完整实操方法,并能基于仓库源码(XML/YAML 导出文件)理解其底层实现。
模板定位:单 HTTP 请求驱动的轻量级 Apache 监控方案
App Apache2 模板的核心设计理念在 5.0 README 的 Overview 中表述得非常明确:
Zabbix template for apache 2 web server without external script. This template have macros for setting URL status page. This template uses only one http item as a master item and other items depend it.
即:无需外部脚本、通过宏定制状态页 URL、只有一个 HTTP 主采集项,其余指标全部由依赖项派生。整个模板不依赖 Zabbix agent、不依赖 SSH/SNMP,只要 Zabbix server/proxy 能通过 HTTP(S) 访问 Apache 的 mod_status 状态页即可工作,非常适合对纯 Web 服务器做"开箱即用"式监控。
从模板导出的元数据看,该模板定义在 Templates/Applications 组下,模板名为 App Apache2(5.0 版本使用传统 application Apache2 分组,5.4/6.0 版本则使用 Application: Apache2 标签),仓库同时提供了三种版本格式的导出文件:
- 5.0 XML(zabbix_export version 5.0)
- 5.4 YAML
- 6.0 YAML
三个版本的核心逻辑完全一致,仅导出格式与触发器表达式语法(5.0 使用 {str(…)},5.4/6.0 使用 find(…))存在差异。
部署前提:Zabbix 4+ 与启用 mod_status
README 明确列出了两项硬性要求:
在 Apache 侧启用 mod_status
Debian/Ubuntu 系通常通过 a2enmod 启用(模块配置位于 /etc/apache2/mods-available/status.conf):
sudo a2enmod status
sudo systemctl reload apache2
RHEL/CentOS 系则在 httpd.conf 中确认已加载 mod_status,并放置状态页 Location 配置:
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Require local
# 按需放行监控端网段,例如:
# Require ip 10.0.0.0/8
</Location>
# Apache 2.3.6 之前的版本需要显式开启扩展状态
ExtendedStatus On
说明:ExtendedStatus On 在较新版本 Apache 中已是默认行为,仅老版本需要显式配置;Require local 用于限制状态页只允许本机访问,若 Zabbix server 与 Apache 不在同一主机,请改为 Require ip <Zabbix server 的 IP> 或相应网段,避免状态信息对外泄露。
验证数据源可用
模板实际请求的 URL 由宏拼接而成,默认等价于 http://localhost:80/server-status?auto,其中 ?auto 让 mod_status 返回纯文本键值对格式而非 HTML 页面。上线前建议先手动验证:
curl -s "http://localhost/server-status?auto"
正常响应类似:
ServerVersion: Apache/2.4.52 (Ubuntu)
ServerMPM: event
Server Built: …
CurrentTime: …
RestartTime: …
ServerUptimeSeconds: 123456
ServerUptime: …
Total accesses: 1000 – Total Requests
Total kBytes: 2000 – Total kB
ReqPerSec: 1.234
BytesPerSec: 5678.90
BytesPerReq: 3713.73
BusyWorkers: 5
IdleWorkers: 95
这些字段正是模板各依赖项正则预处理的匹配目标。务必注意:不同 Apache 版本(2.2 与 2.4)以及不同发行版在字段名大小写、是否包含小数位等方面存在差异,建议先抓取真实输出核对,再决定是否需要微调下文表格中的正则。
模板结构:一个主采集项 + 九个依赖项
模板没有模板链接(Template links)、没有发现规则(Discovery rules),结构极其精简:1 个 HTTP agent 主采集项 + 9 个依赖项 + 1 个可用性触发器 + 3 个内置图形。
其工作流为:
Apache mod_status (?auto 纯文本)
│ HTTP GET(默认每 1 分钟一次)
▼
apache2.get (HTTP agent 主采集项,TEXT 类型,retrieve_mode=BOTH)
│ 依赖项继承原始文本
▼
9 个依赖项(delay=0,各自通过 REGEX 预处理提取字段)
│
▼
版本 / 访问量 / 字节数 / worker 数 / 速率 / 运行时长 等监控项
主采集项 apache2.get
主采集项是整条链路的"数据泵"(见 5.0 XML 与 6.0 YAML):
| 名称 | Apache2 server-status | — |
| 类型 | HTTP agent | Zabbix server/proxy 直接发起 HTTP 请求 |
| 键值 | apache2.get | 依赖项的 master_item 均指向它 |
| URL | {$STUB_STATUS_PROT}://{$STUB_STATUS_HOST}:{$STUB_STATUS_PORT}/{$STUB_STATUS_PATH} | 由四个宏动态拼接 |
| 更新间隔 | 1m(README 标注) | 整个模板唯一的周期性网络请求 |
| 值类型 | TEXT | 存储完整状态页文本 |
| 检索模式 | BOTH | 同时保存响应头与响应体,供触发器检索 HTTP/1.1 200 状态行 |
| 历史保留 | 1h / trends 关闭 | 原始文本只短暂保留 |
依赖项:delay=0 与正则提取
其余 9 个监控项全部是 DEPENDENT 类型,delay=0 表示不产生独立采集周期,完全继承主采集项的取值——这正是"一次 HTTP 请求、派生全部指标"的设计精髓,对被监控的 Apache 与网络带宽的开销都极小。每个依赖项通过 REGEX 预处理步骤从 apache2.get 的原始文本中抓取目标字段,预处理参数为 模式 + 输出格式 \\1(即输出第一个捕获组)。
依赖项完整清单如下(名称、键值、单位、正则均取自 5.0 XML / 5.4 YAML):
| Apache2 server version | apache2.Version | CHAR(不存趋势) | ServerVersion:\\s+(.+) |
| Apache2 total accesses | apache2.Accesses | 无符号数值 | Total Accesses:\\s+([0-9]+) |
| Apache2 total requests size | apache2.kBytes | 单位 B | Total Accesses:\\s+([0-9]+) |
| Apache2 workers idle | apache2.IdleWorkers | 无符号数值 | IdleWorkers:\\s+([0-9]+) |
| Apache2 workers busy | apache2.BusyWorkers | 无符号数值 | BusyWorkers:\\s+([0-9]+) |
| Apache2 request size | apache2.BytesPerReq | FLOAT / B | BytesPerReq:\\s+([0-9]+) |
| Apache2 bytes per second | apache2.BytesPerSec | FLOAT / Bps | BytesPerSec:\\s+([0-9]+) |
| Apache2 requests per second | apache2.ReqPerSec | FLOAT / rps | ReqPerSec:\\s+(.*\\.[0-9]+) |
| Apache2 server uptime | apache2.ServerUptimeSeconds | 单位 uptime | \\bUptime:\\s+([0-9.]+) |
其中值得注意的实战细节:
- apache2.kBytes 的正则与 apache2.Accesses 完全相同(均匹配 Total Accesses),从源码结构看疑似复制粘贴遗留;实际 mod_status 自动输出中总字节数对应的是 Total kBytes: 字段。若发现该监控项无数据,请核对真实输出并修正正则。
- 部分发行版/版本输出的是小写 Total accesses:,而模板正则中的 Total Accesses 是大小写敏感匹配;同样,ReqPerSec 正则需要字段值必须含小数点(.*\\.[0-9]+)。这些都属于"以当前仓库模板为准、实际环境需验证"的注意点——先 curl 确认字段名与格式,再决定是否调整预处理。
- apache2.ServerUptimeSeconds 项的正则匹配 Uptime: 标签后的首个数字串;不同 Apache 版本的 uptime 字段形态(ServerUptimeSeconds: / ServerUptime: / 老版本 Uptime:)略有差异,同样建议以真实输出为准。
宏配置:四个 {$STUB_STATUS_*} 宏定制状态页 URL
模板将状态页地址拆解为四个文本宏(README 的 "Macros used" 表格),默认值如下:
| {$STUB_STATUS_HOST} | localhost | 文本宏 | 目标 Apache 主机名/IP |
| {$STUB_STATUS_PATH} | server-status?auto | 文本宏 | 状态页路径(含 ?auto 参数) |
| {$STUB_STATUS_PORT} | 80 | 文本宏 | 服务端口 |
| {$STUB_STATUS_PROT} | http | 文本宏 | 协议(http 或 https) |
主采集项的 URL 即由这四个宏直接拼装:
{$STUB_STATUS_PROT}://{$STUB_STATUS_HOST}:{$STUB_STATUS_PORT}/{$STUB_STATUS_PATH}
宏在 5.0 XML 与各版本 YAML 的 macros 段中原样定义(如 {$STUB_STATUS_HOST} → localhost、{$STUB_STATUS_PATH} → server-status?auto、{$STUB_STATUS_PORT} → 80、{$STUB_STATUS_PROT} → http)。接入时只需在主机级别覆盖这四个宏,即可让模板监控任意地址、任意端口、HTTP 或 HTTPS 的 Apache 实例,无需改动模板本身。
典型覆盖场景:
- 监控远程服务器:{$STUB_STATUS_HOST} = 目标 IP/FQDN;
- Apache 监听 8080:{$STUB_STATUS_PORT} = 8080;
- 已配置 TLS:{$STUB_STATUS_PROT} = https,并注意 Zabbix 侧相应证书校验/跳过设置;
- 自定义状态页路径:{$STUB_STATUS_PATH} = custom-status?auto。
可用性触发器:Failed to fetch apache2 server status page
虽然 README 的 "Triggers" 一节标注"无触发器",但模板导出文件中实际内嵌了一个挂在主采集项上的触发器(README 表格未收录,这是阅读仓库时容易遗漏的点):
| 名称 | Failed to fetch apache2 server status page | 同左 |
| 问题表达式 | {str("HTTP/1.1 200")}=0 or {nodata(15m)}=1 | find(/App Apache2/apache2.get,,"like","HTTP/1.1 200")=0 or nodata(/App Apache2/apache2.get,15m)=1 |
| 恢复表达式 | {str("HTTP/1.1 200")}=1 | find(/App Apache2/apache2.get,,"like","HTTP/1.1 200")=1 |
| 恢复模式 | RECOVERY_EXPRESSION | 同左 |
| 优先级 | AVERAGE | 同左 |
| 手动关闭 | YES | 同左 |
其逻辑为:当主采集项保存的文本中检索不到 HTTP/1.1 200 状态行(页面无法正常获取),或连续 15 分钟无新数据(采集中断)时触发 AVERAGE 告警;一旦状态行恢复可见即自动恢复。之所以能检索到状态行,正是因为主采集项设置了 retrieve_mode=BOTH——TEXT 值类型的 HTTP 采集项会同时保留响应头与响应体,HTTP/1.1 200 便来自响应头的状态行。
这个触发器承担了"页面不可达、超时、认证失败、状态页被禁用"等场景的兜底告警,是模板中唯一的告警逻辑,建议在接入后通过停掉 Apache 或改错宏做一次告警演练。
内置图形:三张开箱即用的趋势图
模板在 graphs 段定义了三个图形(5.0 XML 与 5.4/6.0 YAML 完全一致):
| Apache2 requests | apache2.ReqPerSec(右轴)+ apache2.BytesPerSec | BOLD_LINE 1A7C11 / GRADIENT_LINE 2774A4 |
| Apache2 request size | apache2.Accesses + apache2.kBytes | BOLD_LINE E53935 / GRADIENT_LINE FFB300 |
| Apache2 workers | apache2.BusyWorkers + apache2.IdleWorkers | GRADIENT_LINE 1A7C11 / GRADIENT_LINE 2774A4 |
前两张图 ymin_type_1 均为 FIXED(从 0 起绘),分别反映请求/吞吐速率与累计访问/流量;Apache2 workers 图用于观察 worker 池的繁忙与空闲分布,是判断 Apache 是否"被打满"的直观依据。导入模板后这些图形会自动出现在主机的图形列表中,无需额外配置。
导入与接入 Zabbix 的完整步骤
参照仓库根 README 的通用流程,结合本模板特性,推荐按以下步骤接入:
源码级实现佐证速查
若想深入核对本文所述细节,可直接在仓库中查阅以下文件:
- 5.0 README:模板概览、宏表格、采集项清单的原始出处;
- 5.0 XML:完整定义了 1 个 HTTP agent 主项 + 9 个依赖项、全部 REGEX 预处理参数、4 个宏、内嵌触发器与 3 个图形;
- 5.4 YAML 与 6.0 YAML:同一模板的 5.4/6.0 导出形态,额外携带 uuid 与 Application: Apache2 标签,触发器表达式升级为 find(…) 语法。
需要说明的是,各版本导出文件中主采集项均未显式书写 delay(README 标注为 1m),依赖项 delay=0 意味着其更新周期完全跟随主采集项;如果你希望提高采集频率(如 30s),只需修改 apache2.get 的更新间隔即可,依赖项会自动跟随。
同类模板参考
仓库 Applications/Web-servers 下还维护了官方出品的 Apache 监控模板 template_apache_http_server:它以 10s 为周期采集 server-status,并通过 18 个依赖项覆盖更细粒度的 worker 状态(reading、writing、keepalive、DNS lookup、logging、closing 等)与 CPU 负载。相较之下,本模板(App Apache2)以 1m 周期、9 个依赖项提供更轻量的核心指标集,且通过宏把状态页地址完全参数化——两者可按监控密度需求取舍,也可互为参照理解"主采集项 + 依赖项"这一社区模板的常见设计范式。
结语
App Apache2 模板是 Zabbix 社区"极简监控"思路的典型样本:一个 HTTP agent 项、四个地址宏、九个正则依赖项,便完成了 Apache 2 服务器版本、访问量、吞吐、worker 与运行状态的完整监控闭环,全程无需外部脚本、无需在被监控端安装任何 Agent 组件。结合本文提供的正则核对要点、宏覆盖方法与告警验证步骤,你可以快速将其落地到生产环境,并依葫芦画瓢理解乃至自行编写同风格的 HTTP 依赖项模板。
赞
【免费下载链接】community-templates
Zabbix Community Templates repository
项目地址:
https://gitcode.com/gh_mirrors/co/community-templates
点击查看 免费下载
相关推荐
ParsecVDisplay完全指南:轻松创建高性能虚拟显示器
Windows驱动终极清理指南:3步释放C盘10GB空间
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网硕互联帮助中心


评论前必须登录!
注册