Zabbix 监控 SAP Host Agent:基于 Zabbix Agent 2 原生插件模板的部署、配置与告警实战

原创2026-10-15 16:24:451,900 阅读

Zabbix 监控 SAP Host Agent:基于 Zabbix Agent 2 原生插件模板的部署、配置与告警实战

本指南围绕 community-templates 仓库中 Template SAP Host Agent by Zabbix agent 2(对应 6.4 版说明文档)展开,系统讲解如何借助 Zabbix Agent 2 的原生自定义插件对接 SAP Host Agent 的 Web 服务接口,实现 CPU、内存、Swap、磁盘 I/O、文件系统、网络接口、实例进程与操作系统信息的一站式监控。读完本文,你将掌握该模板的安装导入流程、全部宏参数与监控项语义、六类自动发现规则的用法,以及各触发器表达式的告警逻辑与调优方法。

模板概述:为什么需要专门的 SAP Host Agent 监控

SAP Host Agent 是 SAP 系统中负责承载各类管理服务与监控基础设施的核心组件。常规的 Zabbix 系统监控模板(如 Linux/Windows 原生模板)虽然能覆盖操作系统层面的基础指标,却无法直接感知 SAP 实例进程的运行状态、SAP 视角下的主机性能视图以及随 SAP 应用一同变化的多实例环境。

该模板的设计目标是:用 Zabbix Agent 2 配合原生(native)自定义插件,直接读取 SAP Host Agent 暴露的 Web 服务数据,从而让监控指标与 SAP 自身的性能模型保持一致。从 6.4 模板 XML 的 <description> 可以看到,模板版本标识为 Version: 8-36e3d05,归属于 Templates/Applications 模板组,其监控覆盖面包括:

  • CPU:利用率、负载均值、上下文切换、中断、各核细分状态
  • 内存与 Swap:物理内存可用/空闲/总量、虚拟内存、交换空间进出与占用
  • 磁盘 I/O 与文件系统:按块设备发现 IO 速率、队列长度、服务时间、吞吐、利用率、等待时间
  • 网络接口:入站/出站流量、错误数与数据包速率
  • 实例进程:按 SAP 实例发现进程 PID、启动时间与运行状态
  • 平台信息:操作系统名称/版本、SAP Agent 版本与连通性(ping)

工作原理与数据采集链路

模板的全部监控项(Items)都基于 sap.agent.* 系列键值(Key)。以 README 中的 <common_params> 占位符为例,它实际在 XML 中被展开为三个宏参数:

sap.agent.ping["{$SAP.AGENT.URI}","{$SAP.AGENT.USER}","{$SAP.AGENT.PASSWORD}"]

其中:

  • {$SAP.AGENT.URI}:SAP Host Agent Web 服务地址,默认 http://localhost:1128(HTTPS 对应 1129 端口)
  • {$SAP.AGENT.USER}:基础认证用户名,默认 sapadm
  • {$SAP.AGENT.PASSWORD}:基础认证密码,模板中以 SECRET_TEXT 类型宏存储(见 模板 XML 宏定义)

整条数据链路为:SAP Host Agent Web 服务 → 原生 Zabbix 插件(运行在 Zabbix Agent 2 所在主机)→ Zabbix Agent 2 → Zabbix Server/Proxy。因此,Zabbix Agent 2 既可以与被监控的 SAP 主机同机部署,也可以部署在能够通过网络访问 SAP Host Agent 接口的任何其他主机上。

模板内部大量使用 DEPENDENT(依赖型) 与 CALCULATED(计算型) 监控项,将插件返回的原始数据转换为可直接展示的指标:

  • CPU 利用率(sap.agent.cpu.util)是依赖型监控项,主监控项为 sap.agent.cpu.util<a href="https://link.gitcode.com/i/b848e0f474f4a1513ee296c739be3353" target="_blank">... ,"all","idle"],并通过 JAVASCRIPT 预处理步骤 return (100 - value) 用空闲率反推利用率(见 [模板 XML)。
  • 内存利用率(sap.agent.mem.util)与 Swap 利用率(sap.agent.swap.util)是计算型监控项,公式分别为 (1 - available/size) * 100 与 (1 - free/total) * 100。
  • 进程的 pid、starttime、status 均为依赖型监控项,主监控项 sap.agent.proc.get[...] 返回 JSON,通过 JSONPATH 预处理($.pid、$.starttime、$.textstatus)抽取字段。

这类"一个主采集 + 多个依赖项解析"的设计可以显著降低对 SAP Host Agent 接口的请求频率,是阅读与扩展该模板时需要重点理解的结构。

前置要求

使用该模板前需满足以下条件(与 README 要求章节 一致):

  1. Zabbix Agent 2:必须安装在运行 SAP Host Agent 的主机上,或安装在可经网络访问该主机的其他机器上。
  2. 原生 SAP Host Agent Zabbix 插件:必须与 Zabbix Agent 2 安装在同一主机上,该插件负责解析 sap.agent.* 键值并调用 SAP Host Agent 接口。
  3. SAP Host Agent 处于活动状态:需配置对 Web 服务接口的读取权限,默认端口为 HTTP 1128 或 HTTPS 1129,并使用 sapadm 账户完成基础认证。

安装部署步骤

1. 安装 Zabbix Agent 2 插件

插件有两种获取方式(README 仅给出途径说明,具体安装命令以插件官方发布说明为准):

  • 使用预编译原生包:面向 Debian/Ubuntu、SUSE(SLES)与 Red Hat(RHEL/CentOS)生态提供预编译软件包,按官方文档添加软件源后安装即可。
  • 从源码构建:也可以直接从插件源码仓库拉取代码自行编译,适用于需要定制或官方源尚未覆盖的发行版。

2. 导入模板

  1. 从仓库 6.4 目录 下载 template_sap_host_agent.xml 文件。
  2. 登录 Zabbix Web 前端,进入 Configuration(配置)→ Templates(模板)→ Import(导入),选择并导入该 XML 文件。

模板 XML 为标准的 Zabbix 6.4 导出格式(<zabbix_export><version>6.4</version>),包含模板、监控项、发现规则、触发器、图形、仪表板与值映射的完整定义,导入后即可在模板列表中看到 Template SAP Host Agent by Zabbix agent 2。

3. 链接模板并配置宏

  1. 在目标主机上链接该模板。
  2. 按实际环境覆盖用户宏:至少需要修改 {$SAP.AGENT.URI}(指向真实 SAP Host Agent 地址,默认 localhost:1128 仅适用于同机部署)、{$SAP.AGENT.USER}(默认 sapadm)与 {$SAP.AGENT.PASSWORD}(基础认证密码)。

仓库同时提供 5.0、5.2、5.4、6.0、6.2、7.0、7.2、7.4 等多个 Zabbix 大版本的模板副本,结构保持一致,可按目标 Zabbix Server 版本选用对应目录下的 XML。

宏参数详解

模板共定义 14 个用户宏,前 3 个为连接参数,其余为告警阈值参数。下表完整继承 README 的宏说明,并补充其在 XML 中的实际类型与默认值:

宏名称 默认值 类型 说明
{$SAP.AGENT.PASSWORD} (空) SECRET_TEXT SAP Host Agent 基础认证密码,以密文形式存储
{$SAP.AGENT.URI} http://localhost:1128 字符串 SAP Host Agent API 的 URI
{$SAP.AGENT.USER} sapadm 字符串 SAP Host Agent 基础认证用户名
{$CPU.UTIL.CRIT} 90 数值 CPU 利用率告警(critical)阈值
{$IF.ERRORS.WARN} 2 数值 网络接口错误数告警(warning)阈值
{$LOAD_AVG_PER_CPU.MAX.WARN} 1.5 数值 每 CPU 可持续负载上限
{$MEMORY.AVAILABLE.MIN} 20M 容量 可用内存告警下限
{$MEMORY.UTIL.MAX} 90 数值 内存利用率告警上限
{$SWAP.PFREE.MIN.WARN} 50 数值 空闲交换空间百分比告警下限
{$VFS.DEV.AWAIT.WARN} 20 数值 磁盘平均等待时间(毫秒)告警阈值
{$VFS.FS.FREE.MIN.CRIT} 5G 容量 文件系统剩余空间 critical 阈值
{$VFS.FS.FREE.MIN.WARN} 10G 容量 文件系统剩余空间 warning 阈值
{$VFS.FS.PUSED.MAX.CRIT} 90 数值 文件系统空间使用率 critical 阈值
{$VFS.FS.PUSED.MAX.WARN} 80 数值 文件系统空间使用率 warning 阈值

调优建议:宏可在模板级批量设置,也可在主机级覆盖,甚至支持针对发现出的单个实体覆盖(例如 {$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"} 按文件系统名覆盖、{$VFS.DEV.AWAIT.WARN:"{#DEVNAME}"} 按设备名覆盖)。在生产环境,建议结合容量规划评估:内存紧张型系统可调低 {$MEMORY.UTIL.MAX},日志盘等写入密集文件系统可单独收紧 {$VFS.FS.FREE.MIN.CRIT}。

监控项体系(Items)

模板预定义 25 个常规监控项,全部继承自 README 并补充 XML 中的单位与类型信息。按主题分组如下:

CPU 相关

监控项名称 类型 键值 单位
Interrupts per second Zabbix agent sap.agent.cpu.intr[<common_params>] —
Load average (1m avg) Zabbix agent sap.agent.cpu.load[<common_params>,avg1] —
Load average (5m avg) Zabbix agent sap.agent.cpu.load[<common_params>,avg5] —
Load average (15m avg) Zabbix agent sap.agent.cpu.load[<common_params>,avg15] —
Number of CPUs Zabbix agent sap.agent.cpu.num[<common_params>] —
Context switches per second Zabbix agent sap.agent.cpu.switches[<common_params>] sps
CPU utilization DEPENDENT sap.agent.cpu.util %
CPU idle / iowait / steal / system / user time Zabbix agent sap.agent.cpu.util[<common_params>,all,idle|iowait|steal|system|user] %

其中 Number of CPUs、Operating system name/version、Version of SAP agent 等低频变化项在 XML 中均配置了 DISCARD_UNCHANGED_HEARTBEAT 预处理(心跳 1 天),避免重复入库相同值,同时保证触发表达式仍能引用到最新数据。

内存与 Swap 相关

监控项名称 类型 键值 单位
Memory utilization CALCULATED sap.agent.mem.util %
Available / Free / Total physical memory Zabbix agent sap.agent.mem[<common_params>,phy,available|free|size] B
Total virtual memory Zabbix agent sap.agent.mem[<common_params>,virt,size] B
Swap-in / Swap-out bytes per second Zabbix agent sap.agent.swap.in|out[<common_params>,bytes] Bps
Swap-in / Swap-out pages per second Zabbix agent sap.agent.swap.in|out[<common_params>,pages] pps
Free / Total / Used swap space Zabbix agent sap.agent.swap.size[<common_params>,free|total|used] B
Swap utilization CALCULATED sap.agent.swap.util %

平台与连通性

监控项名称 类型 键值 备注
Operating system name Zabbix agent sap.agent.os.name[<common_params>] 字符型,心跳去重,不保留趋势
Operating system version Zabbix agent sap.agent.os.version[<common_params>] 字符型,心跳去重,不保留趋势
SAP agent ping Zabbix agent sap.agent.ping[<common_params>] 值映射 Service state:0=Down,1=Up
Version of SAP agent running Zabbix agent sap.agent.version[<common_params>] 字符型,心跳去重

SAP agent ping 是模板的"心跳哨兵",对应的值映射 Service state 定义在 模板 XML 值映射,当 SAP Host Agent 无法访问时立即触发告警。

自动发现规则(Discovery Rules)

模板内置 6 条发现规则,前 5 条在 6.4 模板 XML 的 discovery_rules 段 中有完整实现(发现间隔统一为 1 小时),第 6 条为扩展接口。

CPU discovery

  • 键值:sap.agent.cpu.discovery[<common_params>]
  • 说明:发现所有 CPU 核心
原型名称 类型 键值
CPU {#CPU.ID} utilization DEPENDENT sap.agent.cpu.util["{#CPU.ID}"]
CPU {#CPU.ID} idle time Zabbix agent sap.agent.cpu.util[<common_params>,{#CPU.ID},idle]
CPU {#CPU.ID} iowait time Zabbix agent sap.agent.cpu.util[<common_params>,{#CPU.ID},iowait]
CPU {#CPU.ID} system time Zabbix agent sap.agent.cpu.util[<common_params>,{#CPU.ID},system]
CPU {#CPU.ID} user time Zabbix agent sap.agent.cpu.util[<common_params>,{#CPU.ID},user]

(README 原型表中存在引号省略,实际键值应以 XML 为准,例如依赖项为 sap.agent.cpu.util["{#CPU.ID}"]。)

Block devices discovery

  • 键值:sap.agent.dev.discovery[<common_params>]
  • 说明:发现块设备
原型名称 类型 键值 单位
Device {#DEVNAME}: IO rate Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},io] io/s
Device {#DEVNAME}: Queue length Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},queue] —
Device {#DEVNAME}: Service time Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},svc] s(预处理 ×0.001 由毫秒转秒)
Device {#DEVNAME}: Throughput Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},tput] bps
Device {#DEVNAME}: Utilization Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},util] %
Device {#DEVNAME}: Wait time Zabbix agent sap.agent.dev[<common_params>,{#DEVNAME},wait] s(预处理 ×0.001 由毫秒转秒)

该规则还内置触发器原型:当设备 15 分钟平均等待时间超过 {$VFS.DEV.AWAIT.WARN:"{#DEVNAME}"} 时触发 WARNING 告警,提示磁盘可能饱和,且需手动关闭(manual_close=YES)。

Mounted filesystem discovery

  • 键值:sap.agent.fs.discovery[<common_params>]
  • 说明:发现不同类型的已挂载文件系统
原型名称 类型 键值
Filesystem {#FSNAME}: Free space Zabbix agent sap.agent.fs.size[<common_params>,{#FSNAME},free](单位 B)
Filesystem {#FSNAME}: Total space Zabbix agent sap.agent.fs.size[<common_params>,{#FSNAME},total](单位 B)
Filesystem {#FSNAME}: Space utilization CALCULATED sap.agent.fs.util["{#FSNAME}"](%)

空间利用率采用计算型实现,公式为 100*(total-free)/total。该规则带两条触发器原型(WARNING 与 AVERAGE),表达式采用"双条件与"逻辑(详见下文触发器章节)。

Network interface discovery

  • 键值:sap.agent.net.discovery[<common_params>]
  • 说明:发现网络接口
原型名称 类型 键值 单位
Interface {#IFNAME}: Incoming traffic Zabbix agent sap.agent.net.in[<common_params>,{#IFNAME},bytes] bps
Interface {#IFNAME}: Incoming errors Zabbix agent sap.agent.net.in[<common_params>,{#IFNAME},errors] —
Interface {#IFNAME}: Incoming packets Zabbix agent sap.agent.net.in[<common_params>,{#IFNAME},packets] —
Interface {#IFNAME}: Outgoing traffic Zabbix agent sap.agent.net.out[<common_params>,{#IFNAME},bytes] bps
Interface {#IFNAME}: Outgoing errors Zabbix agent sap.agent.net.out[<common_params>,{#IFNAME},errors] —
Interface {#IFNAME}: Outgoing packets Zabbix agent sap.agent.net.out[<common_params>,{#IFNAME},packets] —

Process discovery

  • 键值:sap.agent.proc.discovery[<common_params>]
  • 说明:发现 SAP 实例进程,宏包括 {#INSTANCE.NAME}、{#PROCESS.NAME}、{#PROCESS.DESC}
原型名称 类型 键值
Process {#PROCESS.DESC}: Get info Zabbix agent sap.agent.proc.get[<common_params>,{#INSTANCE.NAME},{#PROCESS.NAME}](TEXT 型,不保留历史与趋势)
Process {#PROCESS.DESC} pid DEPENDENT sap.agent.proc["{#INSTANCE.NAME}","{#PROCESS.NAME}","pid"]
Process {#PROCESS.DESC} start time DEPENDENT sap.agent.proc["{#INSTANCE.NAME}","{#PROCESS.NAME}","starttime"]
Process {#PROCESS.DESC} status DEPENDENT sap.agent.proc["{#INSTANCE.NAME}","{#PROCESS.NAME}","status"]

(同样,README 中 sap.agent.proc["{#INSTANCE.NAME},{#PROCESS.NAME},pid] 为省略写法,XML 中每个参数均以独立双引号包裹。)

SAP Database discovery

  • 键值:sap.agent.db.discovery[<common_params>]
  • 说明:发现主机上运行的所有 SAP 数据库,返回包含 {#DB.NAME}、{#DB.PROTOCOL}、{#DB.HOST}、{#DB.PORT} 的 JSON 数组。

该规则是模板提供的扩展点:模板本身未预置任何 item prototypes,可按 README 说明,利用这条发现规则为每个被发现的数据库自定义监控项(例如按 {#DB.NAME} 分别添加端口连通性检查或数据库专用指标)。需要说明的是,当前 6.4 版模板 XML 中并未内置该规则的原型定义,使用前需确认你所使用的插件版本确实支持 sap.agent.db.discovery 键值。

触发器与告警策略

模板的告警体系在 模板 XML 触发器段 与各发现规则内定义,可按主题归纳如下:

主机级触发器

触发器名称 表达式要点 优先级 说明
SAP agent is unreachable last(sap.agent.ping[...])=0 AVERAGE SAP Host Agent 不可达,接入层故障的最高优先级信号
High CPU utilization min(sap.agent.cpu.util,5m)>{$CPU.UTIL.CRIT} WARNING 5 分钟均值超过 90%
Load average is too high min(avg1,5m)/last(cpu.num)>{$LOAD_AVG_PER_CPU.MAX.WARN} 且 avg5/avg15 均大于 0 AVERAGE 按核数归一化的每 CPU 负载超限,避免多核误报
High memory utilization min(sap.agent.mem.util,5m)>{$MEMORY.UTIL.MAX} AVERAGE 5 分钟内存利用率均值超限
Lack of available memory max(available,5m)<{$MEMORY.AVAILABLE.MIN} 且 total>0 AVERAGE 可用内存低于 20M
High swap space usage 100-max(swap.util,5m)<{$SWAP.PFREE.MIN.WARN} 且 total>0 WARNING 空闲交换空间低于 50%;无 swap 配置时因 total>0 条件自动忽略

模板还利用了 Zabbix 的**触发器依赖(dependency)**机制:High CPU utilization 依赖 Load average is too high,High memory utilization 依赖 Lack of available memory。即当负载/内存不足的根因告警已存在时,其上层的利用率告警自动抑制,避免同一故障产生多条噪音告警。

发现规则内的触发器原型

  • 磁盘等待过高(WARNING):min(sap.agent.dev[...,{#DEVNAME},wait],15m) > {$VFS.DEV.AWAIT.WARN:"{#DEVNAME}"},提示设备饱和,需手动关闭。

  • 文件系统空间不足(WARNING/AVERAGE 两级):核心表达式为

    last(sap.agent.fs.util["{#FSNAME}"]) > {$VFS.FS.PUSED.MAX.*:"{#FSNAME}"} and
    ( last(fs.size free) < {$VFS.FS.FREE.MIN.*:"{#FSNAME}"}
      or timeleft(sap.agent.fs.util["{#FSNAME}"],1h,100) < 1d )
    

    即"使用率超限"与"剩余空间低于阈值 或 按当前增长趋势 24 小时内写满"两个条件同时成立才告警;WARNING 级依赖 AVERAGE 级,AVERAGE 级可手动关闭。

  • 网络接口错误率过高(WARNING):入站或出站 5 分钟错误数超过 {$IF.ERRORS.WARN:"{#IFNAME}"} 即触发,并配置了恢复表达式——当错误数回落到阈值的 80% 以下时自动恢复(带回滞,防止抖动)。

  • 进程已重启(INFO):last(pid,#1)<>last(pid,#2),即进程 PID 发生变化,用于感知 SAP 进程的意外重启。

  • 进程状态异常(HIGH):find(sap.agent.proc[...,"status"],,"regexp","^Running$")=0,即进程文本状态不再是 Running。

图形与仪表板

模板自带 5 张主机级图形与多组图形原型,开箱即得可视化:

  • 主机级图形(见 模板 XML 图形段):CPU usage(system/user/iowait/steal 堆叠图)、CPU utilization、Memory usage(总量 vs 可用)、Swap usage(已用 vs 总量)、System load(1m/5m/15m 负载曲线叠加 CPU 数,右轴)。
  • 图形原型:CPU {#CPU.ID} usage / CPU {#CPU.ID} utilization、Device {#DEVNAME}: Disk IO rate(IO 速率 + 服务时间 + 等待时间双轴)、Disk throughput、Disk utilization and queue、{#FSNAME}: Filesystem space usage(总量 vs 剩余)、Interface {#IFNAME}: Network traffic 与 Network packets(含错误曲线)。

同时模板内置 3 个仪表板(见 模板 XML 仪表板段):

  • Block devices:磁盘利用率与队列、IO 速率、吞吐三组原型图并排展示
  • Network interfaces:网络流量与数据包/错误曲线
  • System performance:系统负载、内存使用、CPU 使用、Swap 使用四宫格

部署与使用建议

  1. 连通性先行:导入并链接模板后,先观察 SAP agent ping 是否返回 1(Up)。若为 0,依次排查 Zabbix Agent 2 插件是否加载、{$SAP.AGENT.URI} 是否可达、sapadm 认证是否通过、SAP Host Agent Web 服务是否已启用。
  2. 先调阈值再上生产:模板默认阈值(如 CPU 90%、内存 90%、磁盘 80% 警告)适合通用场景,上线前应按业务特征覆盖宏,尤其是存储类阈值({$VFS.FS.FREE.MIN.*} 与 {$VFS.FS.PUSED.MAX.*})。
  3. 善用实体级宏覆盖:对关键文件系统或磁盘,可通过 {$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}、{$VFS.DEV.AWAIT.WARN:"{#DEVNAME}"} 形式单独收紧阈值,而不影响全局配置。
  4. 理解依赖型监控项:修改 sap.agent.* 主监控项时,需同步检查其 DEPENDENT 子项(如 sap.agent.cpu.util、sap.agent.proc[...] 系列)的预处理与主监控项引用,避免数据链路断裂。
  5. 版本匹配:仓库按 Zabbix 大版本分目录存放模板(5.0 至 7.4),请选择与你的 Zabbix Server 主版本一致的 XML 导入,跨大版本导入可能出现兼容性告警。
  6. 扩展 SAP 数据库监控:如需按 sap.agent.db.discovery 结果自定义数据库监控项,可在模板上新增 item prototype 并引用 {#DB.NAME}、{#DB.PORT} 等宏,无需修改模板本体。

通过上述配置,运维团队即可在 Zabbix 中建立起一套与 SAP 自身视角一致的完整主机监控体系,覆盖从基础设施资源到 SAP 实例进程的全链路可观测性。

登录后查看全文
community-templates