Zabbix 监控 SAP Host Agent:基于 Zabbix Agent 2 原生插件模板的部署、配置与告警实战
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 要求章节 一致):
- Zabbix Agent 2:必须安装在运行 SAP Host Agent 的主机上,或安装在可经网络访问该主机的其他机器上。
- 原生 SAP Host Agent Zabbix 插件:必须与 Zabbix Agent 2 安装在同一主机上,该插件负责解析
sap.agent.*键值并调用 SAP Host Agent 接口。 - SAP Host Agent 处于活动状态:需配置对 Web 服务接口的读取权限,默认端口为 HTTP
1128或 HTTPS1129,并使用sapadm账户完成基础认证。
安装部署步骤
1. 安装 Zabbix Agent 2 插件
插件有两种获取方式(README 仅给出途径说明,具体安装命令以插件官方发布说明为准):
- 使用预编译原生包:面向 Debian/Ubuntu、SUSE(SLES)与 Red Hat(RHEL/CentOS)生态提供预编译软件包,按官方文档添加软件源后安装即可。
- 从源码构建:也可以直接从插件源码仓库拉取代码自行编译,适用于需要定制或官方源尚未覆盖的发行版。
2. 导入模板
- 从仓库 6.4 目录 下载
template_sap_host_agent.xml文件。 - 登录 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. 链接模板并配置宏
- 在目标主机上链接该模板。
- 按实际环境覆盖用户宏:至少需要修改
{$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 使用四宫格
部署与使用建议
- 连通性先行:导入并链接模板后,先观察
SAP agent ping是否返回 1(Up)。若为 0,依次排查 Zabbix Agent 2 插件是否加载、{$SAP.AGENT.URI}是否可达、sapadm认证是否通过、SAP Host Agent Web 服务是否已启用。 - 先调阈值再上生产:模板默认阈值(如 CPU 90%、内存 90%、磁盘 80% 警告)适合通用场景,上线前应按业务特征覆盖宏,尤其是存储类阈值(
{$VFS.FS.FREE.MIN.*}与{$VFS.FS.PUSED.MAX.*})。 - 善用实体级宏覆盖:对关键文件系统或磁盘,可通过
{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}、{$VFS.DEV.AWAIT.WARN:"{#DEVNAME}"}形式单独收紧阈值,而不影响全局配置。 - 理解依赖型监控项:修改
sap.agent.*主监控项时,需同步检查其 DEPENDENT 子项(如sap.agent.cpu.util、sap.agent.proc[...]系列)的预处理与主监控项引用,避免数据链路断裂。 - 版本匹配:仓库按 Zabbix 大版本分目录存放模板(5.0 至 7.4),请选择与你的 Zabbix Server 主版本一致的 XML 导入,跨大版本导入可能出现兼容性告警。
- 扩展 SAP 数据库监控:如需按
sap.agent.db.discovery结果自定义数据库监控项,可在模板上新增 item prototype 并引用{#DB.NAME}、{#DB.PORT}等宏,无需修改模板本体。
通过上述配置,运维团队即可在 Zabbix 中建立起一套与 SAP 自身视角一致的完整主机监控体系,覆盖从基础设施资源到 SAP 实例进程的全链路可观测性。