Zabbix 官方 Apache 监控模板深度解析:基于 Zabbix agent 主动模式与 mod_status 的零脚本采集方案

发布时间:2026/10/4 16:29:27
Zabbix 官方 Apache 监控模板深度解析:基于 Zabbix agent 主动模式与 mod_status 的零脚本采集方案 指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载本文以 Zabbix 开源仓库中的官方模板Apache by Zabbix agent activeREADME.md为核心结合其可导入的模板定义template_app_apache_agent_active.yaml与 Zabbix agent 源码系统讲解该模板的采集原理、部署步骤、宏配置、监控项、触发器与低级别发现LLD规则。读完本文你将掌握如何在 5 分钟内完成 Apache 服务器的开箱监控并能按需修改宏与扩展监控项。一、模板概览数据从哪里来该模板的设计目标是零外部脚本不需要为监控 Apache 而编写任何自定义脚本全部数据由 Zabbix agent主动模式采集后交给 Zabbix server 处理。模板的数据来源有两个mod_status 模块Zabbix agent 通过内置键web.page.get在本机默认127.0.0.1:80轮询 Apache 的server-status?auto页面获取机器可读的运行状态文本Linux 进程统计通过proc.get、proc.cpu.util等内置键采集 Apache 进程的 CPU 占用、内存占用、进程存活数量等指标。mod_status返回的是一段纯文本模板通过预处理阶段内置的 JavaScript 将其解析为 JSON再交给各派生监控项按 JSONPath 提取具体数值。一次采集即可驱动 20 个监控项开销极小。典型的server-status?auto输出如下来自模板 README127.0.0.1 ServerVersion: Apache/2.4.41 (Unix) ServerMPM: event Server Built: Aug 14 2019 00:35:10 CurrentTime: Friday, 16-Aug-2019 12:38:40 UTC RestartTime: Wednesday, 14-Aug-2019 07:58:26 UTC ParentServerConfigGeneration: 1 ParentServerMPMGeneration: 0 ServerUptimeSeconds: 189613 ServerUptime: 2 days 4 hours 40 minutes 13 seconds Load1: 4.60 Load5: 1.20 Load15: 0.47 Total Accesses: 27860 Total kBytes: 33011 Total Duration: 54118 CPUUser: 18.02 CPUSystem: 31.76 CPUChildrenUser: 0 CPUChildrenSystem: 0 CPULoad: .0262535 Uptime: 189613 ReqPerSec: .146931 BytesPerSec: 178.275 BytesPerReq: 1213.33 DurationPerReq: 1.9425 BusyWorkers: 7 IdleWorkers: 93 Processes: 4 Stopping: 0 BusyWorkers: 7 IdleWorkers: 93 ConnsTotal: 13 ConnsAsyncWriting: 0 ConnsAsyncKeepAlive: 5 ConnsAsyncClosing: 0 Scoreboard: ...二、版本要求与兼容性Zabbix 版本8.0 及以上模板 YAML 头部声明的导出版本为8.0属于 Zabbix 官方开箱即用模板体系需按 Zabbix 官方手册中Templates out of the box的指引导入与使用测试版本模板官方测试环境为 Apache 2.4.41由于采集依赖的是mod_status的?auto文本格式其他 2.x 版本在格式兼容的前提下同样适用。三、部署与配置Setup3.1 启用 Apache mod_status首先确认目标 Apache 服务器已加载status_module命令行检查方式httpd -M 2/dev/null | grep status_module若无输出说明模块未加载需在 Apache 配置中启用mod_status并开放本机可访问的 status 端点。以下是一个最小化配置示例来自模板 READMELocation /server-status SetHandler server-status Require host example.com /Location要点说明SetHandler server-status将该 URL 路径交由mod_status处理Require host example.com限制来源主机生产环境务必收紧访问控制仅允许 Zabbix agent 所在主机访问如果修改了默认路径必须同步修改模板宏{$APACHE.STATUS.PATH}否则 agent 将请求错误地址mod_status页面需以?auto参数请求才能返回上述机器可读文本模板宏{$APACHE.STATUS.PATH}的默认值server-status?auto已内置该参数。3.2 安装并配置 Zabbix agent在被监控的 Apache 主机上安装 Zabbix agent主动模式无需 agent 监听端口开放给 server只需 agent 能访问 Zabbix server 的 trapper 端口即可并确保 agent 配置中ServerActive指向正确的 Zabbix server。随后在 Zabbix 前端将该主机链接到Apache by Zabbix agent active模板即可。四、宏Macros详解模板的全部可调参数集中在 7 个宏中其中{$APACHE.STATUS.HOST}、{$APACHE.STATUS.PORT}、{$APACHE.STATUS.PATH}在模板 YAML 中标注为必填required: YES且{$APACHE.STATUS.PORT}带正则校验1–65535。完整清单如下宏说明默认值{$APACHE.STATUS.HOST}Apache status 页的主机名或 IP127.0.0.1{$APACHE.STATUS.PORT}Apache status 页的端口80{$APACHE.STATUS.PATH}Apache status 页的 URL 路径server-status?auto{$APACHE.STATUS.SCHEME}请求协议HTTP 或 HTTPShttp{$APACHE.RESPONSE_TIME.MAX.WARN}触发响应时间过高告警的阈值秒表达式校验为非负数10{$APACHE.PROCESS_NAME}Apache 进程发现LLD的进程名过滤正则(httpd\|apache2){$APACHE.PROCESS.NAME.PARAMETER}用于proc.get键的进程名参数当知道确切进程名时可显式指定空使用建议若 Apache 使用 HTTPS将{$APACHE.STATUS.SCHEME}改为https宏定义在 YAML 中为 LIST 类型仅允许http/https两个选项若 Apache 以httpd或apache2之外的进程名运行例如自定义编译路径先设置{$APACHE.PROCESS.NAME.PARAMETER}为确切进程名再把{$APACHE.PROCESS_NAME}调整为对应的正则宏可在模板级别覆盖全局生效也可在主机级别覆盖仅对单台主机生效。五、监控项Items全解模板共定义 20 个监控项分三层结构主动采集项ZABBIX_ACTIVE→ 解析中间项TEXT→ 派生监控项DEPENDENT。下面按采集链路分类说明。5.1 主动采集主监控项监控项名称类型键预处理Get statusZabbix agent (active)web.page.get[{$APACHE.STATUS.SCHEME}://{$APACHE.STATUS.HOST}:{$APACHE.STATUS.PORT}/{$APACHE.STATUS.PATH}]JavaScript将 mod_status 文本解析为 JSON见下文Service pingZabbix agent (active)net.tcp.service[http,{$APACHE.STATUS.HOST},{$APACHE.STATUS.PORT}]Discard unchanged心跳 10m配合值映射Service state0Down1UpService response timeZabbix agent (active)net.tcp.service.perf[http,{$APACHE.STATUS.HOST},{$APACHE.STATUS.PORT}]无单位为秒Get processes summaryZabbix agent (active)proc.get[{$APACHE.PROCESS.NAME.PARAMETER},,,summary]无TEXThistory 为 0仅作中间数据其中Get status是最核心的采集项其 JavaScript 预处理完整定义见 template_app_apache_agent_active.yaml完成三件事将Key: Value文本逐行解析为 JSON 对象数值型字段自动转为数字兼容处理字段差异ServerUptimeSeconds缺失时回退到UptimeServerVersion缺失时回退到Server解析Scoreboard字符串把其中每个字符对应的 worker 状态_等待、S启动、R读请求、W发送响应、Kkeepalive、DDNS 查询、C关闭、L日志、G完成、I清理、.空闲槽位分别计数聚合成Workers子对象输出。解析后的 JSON 结构大致为{ServerVersion: ..., ServerMPM: event, ServerUptimeSeconds: 189613, Total Accesses: ..., Total kBytes: ..., BusyWorkers: ..., IdleWorkers: ..., Workers: {waiting: ..., reading: ..., ...}}。5.2 派生监控项Dependent items所有派生项都以Get status为 master item通过 JSONPath 提取字段构成完整的 Apache 指标集监控项名称键JSONPath / 附加处理Total bytesapache.bytes$[Total kBytes]× 1024单位 BBytes per secondapache.bytes.rate$[Total kBytes]× 1024 Change per second单位 BpsTotal requestsapache.requests$[Total Accesses]Requests per secondapache.requests.rate$[Total Accesses] Change per secondUptimeapache.uptime$.ServerUptimeSeconds单位 uptimeVersionapache.version$.ServerVersion Discard unchanged1dTotal workers busyapache.workers_total.busy$.BusyWorkersTotal workers idleapache.workers_total.idle$.IdleWorkersWorkers waiting for connectionapache.workers.waiting$.Workers.waitingWorkers reading requestapache.workers.reading$.Workers.readingWorkers sending replyapache.workers.sending$.Workers.sendingWorkers keepalive (read)apache.workers.keepalive$.Workers.keepaliveWorkers DNS lookupapache.workers.dnslookup$.Workers.dnslookupWorkers closing connectionapache.workers.closing$.Workers.closingWorkers loggingapache.workers.logging$.Workers.loggingWorkers finishingapache.workers.finishing$.Workers.finishingWorkers idle cleanupapache.workers.cleanup$.Workers.cleanupWorkers starting upapache.workers.starting$.Workers.startingWorkers slot with no current processapache.workers.slot$.Workers.slot设计细节值得注意BytesPerSec与ReqPerSec字段被刻意弃用因为它们是 Apache 自上次启动以来的平均值无法反映瞬时吞吐模板改为对Total kBytes/Total Accesses做Change per second差分得到实时的字节速率与请求速率这是对 mod_status 原始指标的一个重要工程化取舍。5.3 进程相关监控项经 Apache process discovery 生成进程指标由proc.get[...,summary]汇总数据派生详见第七节 LLD 部分。六、触发器Triggers模板内置两条固定触发器均可在前端调整触发器名称表达式严重级别说明Apache: Service has been restartedlast(/Apache by Zabbix agent active/apache.uptime)10mInfoUptime 小于 10 分钟提示服务刚重启需手动关闭Apache: Version has changedlast(.../apache.version,#1)last(.../apache.version,#2) and length(last(.../apache.version))0Info版本号发生变化升级/回滚检测需手动关闭其余告警服务宕机、status 页拉取失败、响应时间过高、进程不运行以触发器原型形式随 LLD 动态生成见下一节。七、低级别发现LLD规则与原型模板包含两条 LLD 规则实现指标随环境自适应。7.1 Event MPM discoveryevent 多进程模块专用指标该规则用于检测 Apache 是否使用event MPM并动态生成连接级与异步指标。其发现逻辑YAML 中为依赖 Get status 的派生项apache.mpm.event.discovery通过 JavaScript 判断return JSON.stringify(JSON.parse(value).ServerMPM event ? [{{#SINGLETON}: }] : []);即仅当ServerMPM字段为event时输出一个 LLD 条目{#SINGLETON}宏否则输出空数组并配以 3h 心跳去重避免频繁触发发现。当 Apache 使用 prefork/worker MPM 时以下原型不会产生实例Connections async closing—apache.connections[async_closing{#SINGLETON}]JSONPath$.ConnsAsyncClosingConnections async keepalive—apache.connections[async_keep_alive{#SINGLETON}]JSONPath$.ConnsAsyncKeepAliveConnections async writing—apache.connections[async_writing{#SINGLETON}]JSONPath$.ConnsAsyncWritingConnections total—apache.connections[total{#SINGLETON}]JSONPath$.ConnsTotalBytes per request—apache.bytes[per_request{#SINGLETON}]JSONPath$.BytesPerReq平均每个请求的字节数Number of async processes—apache.process[num{#SINGLETON}]JSONPath$.Processes异步进程数。该规则还附带两张图形原型Apache: Current async connections{#SINGLETON}折线/粗线对比三种异步连接状态与总连接数与Apache: Current async processes{#SINGLETON}渐变线。7.2 Apache process discovery进程发现该规则以proc.get[{$APACHE.PROCESS.NAME.PARAMETER},,,summary]为 master item通过 LLD 宏路径$.name提取每个进程名作为{#APACHE.NAME}并用过滤器{$APACHE.PROCESS_NAME}默认(httpd|apache2)做正则筛选。由此为每个发现的进程生成原型名称键预处理与说明CPU utilizationproc.cpu.util[{#APACHE.NAME}]Zabbix agent (active)进程 CPU 占用百分比Get process dataapache.proc.get[{#APACHE.NAME}]从进程汇总中按name {#APACHE.NAME}用 JSONPath 过滤出单条记录失败时置为Failed to retrieve process {#APACHE.NAME} dataMemory usage (rss)apache.proc.rss[{#APACHE.NAME}]JSONPath$.rss附加 In range0 以上校验失败丢弃Memory usage (vsize)apache.proc.vmem[{#APACHE.NAME}]JSONPath$.vsize同上Memory usage, %apache.proc.pmem[{#APACHE.NAME}]JSONPath$.pmem百分比失败丢弃Number of running processesapache.proc.num[{#APACHE.NAME}]JSONPath$.processes失败置 01h 去重对应的触发器原型全部作用于{#APACHE.NAME}触发器名称表达式级别依赖关系Apache: Process is not runninglast(.../apache.proc.num[{#APACHE.NAME}])0High无Apache: Service is downnet.tcp.service[http,...]0 and apache.proc.num[{#APACHE.NAME}]0Average手动关闭Apache: Failed to fetch status pagenodata(...web.page.get...,30m)1 and apache.proc.num[{#APACHE.NAME}]0Warning依赖Service is down手动关闭Apache: Service response time is too highmin(...net.tcp.service.perf...,5m){$APACHE.RESPONSE_TIME.MAX.WARN} and apache.proc.num[{#APACHE.NAME}]0Warning依赖Service is down手动关闭值得注意的告警逻辑Service is down 只有在 TCP 探测失败且进程仍存活时才触发避免进程退出场景下重复告警Failed to fetch status page 则处理进程在、TCP 通、但 30 分钟无数据的异常例如 status 路径配置错误或模块被禁用。八、可视化图形与仪表盘模板自带 3 张固定图形与 1 张仪表盘导入后即可直接使用Apache: Worker states11 条序列叠加展示各状态 worker 数量waiting/reading/sending/keepalive/dnslookup/closing/logging/finishing/starting/cleanup/slot是判断 Apache 并发瓶颈的核心视图Apache: Workers total堆叠图Busy IdleApache: Requests per second渐变线反映实时请求吞吐Apache performance仪表盘dashboards定义于 YAML将上述图形与 Event MPM 的异步连接/进程图原型按页面布局组合包含 General 页与多张 widget 引用导入模板后自动可用。九、源码级原理佐证模板依赖的采集键均为 Zabbix agent 内置实现可在仓库源码中直接验证web.page.get注册于 src/libs/zbxsysinfo/common/http_metrics.c{web.page.get, CF_HAVEPARAMS, web_page_get, localhost,,80}。它接收 URL 参数并执行 HTTP 请求返回页面内容模板正是在此之上叠加 JavaScript 预处理完成 mod_status 文本解析——这也是无需外部脚本承诺的技术根基proc.get的summary参数在 src/libs/zbxsysinfo/linux/proc.c 中处理当末位参数为summary且未指定进程名时返回聚合汇总数据模板的进程发现与派生项均基于该汇总链路模板中proc.cpu.util[{#APACHE.NAME}]使用 agent 内置进程 CPU 采集键与proc.get共用同一进程发现结果保证 LLD 宏命名一致。由此可以确认整条链路agent 采集 → 文本解析 → JSON 提取 → 派生指标 → 告警与可视化全部由 Zabbix 内置能力完成模板本身只做配置编排不依赖任何第三方脚本或外部程序。十、模板文件与导入当前仓库中该模板由两个文件组成templates/app/apache_agent_active/README.md本模板的官方说明文档本文的骨架来源templates/app/apache_agent_active/template_app_apache_agent_active.yaml可导入的模板定义Zabbix 8.0 导出格式包含全部监控项、触发器、LLD 规则、宏、图形与仪表盘。导入方式在 Zabbix 前端的Data collection → Templates中点击导入并选择上述 YAML 文件模板归属Templates/Applications分组wizard_ready: YES支持宿主配置向导。若使用被动模式的代理主机环境仓库还提供对等的Apache by Zabbix agent模板templates/app/apache_agent/README.md两者指标定义一致仅采集方式主动/被动不同可按网络拓扑选择。结语Apache by Zabbix agent active模板演示了 Zabbix 官方模板的典型工程范式以少量主动采集键为锚点配合 JavaScript 文本解析、JSONPath 提取、Change per second 差分与 LLD 动态发现构建出一套覆盖吞吐、并发、进程资源与可用性的完整监控方案。理解其数据链路后无论是调参、排障还是仿照此模式开发自定义模板都有据可依。赞分享指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载相关推荐UFO Dataflow 实战指南面向 LAM 训练数据收集的实例化-执行一体化流水线UFO Dataflow 实战指南面向 LAM 训练数据收集的实例化 执行一体化流水线 本指南系统讲解 UFO 项目中 Dataflow 数据流水线的完整使用指标监控可观测性告警运维Zabbix 监控 Kubernetes API Server 实战基于 HTTP 的官方模板深入解析Zabbix 监控 Kubernetes API Server 实战基于 HTTP 的官方模板深入解析 本文基于仓库 templates/app/kubern指标监控可观测性告警运维InvenTree 开源库存管理系统零件、采购、生产全在一个网页管起来InvenTree 开源库存管理系统零件、采购、生产全在一个网页管起来 如果你管过一个仓库哪怕只是实验室的元器件货架一定被这两个问题折磨过这个零件现在还指标监控可观测性告警运维上一篇TDengine 网络与 FQDN 配置实战IPv6 连接与 TLS 双向加密传输下一篇Flink State Backends 完全指南HashMapStateBackend 与 EmbeddedRocksDBStateBackend 的选型与配置实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考