【免费下载链接】community-templates
Zabbix Community Templates repository
本文以 community-templates 仓库中 Databases/Oracle/template_3.0_for_pyora 目录下的模板文档与导入文件为对象,完整解析名为Pyora active send的 Zabbix 模板:它如何基于 PyOra 的主动发送(active send)机制,通过 trapper 与低级别发现(LLD)实现对 Oracle 实例、表空间、临时表空间、ASM 卷和数据库用户的全面监控。读完本文,你将掌握该模板的宏配置、发现规则、采集项与触发器体系,并能在 Zabbix 5.0/5.4/6.0 环境中正确导入、配置与调优这套 Oracle 监控方案。
模板背景:为什么需要一个"修复版" PyOra 模板
PyOra(PyOra for Zabbix)是社区中广泛使用的 Oracle 监控工具:它用 Python 脚本查询 Oracle 动态性能视图,再把结果通过zabbix_sender主动推送给 Zabbix Server 的 trapper 监控项(Item)。这种"脚本采集 + 主动推送"的架构,避免了在数据库主机上长期占用 Zabbix Agent 轮询连接,也天然适配"只读账号 + 单向出站"的安全环境。
然而,原版模板是为旧版本 Zabbix 设计的,直接导入新版本会出现兼容性问题。本模板的作者在 Overview 中明确说明:
This is the fixed template for Zabbix PyOra to work on 3.0. I remove the unsupported tags and downgraded version. Note you will most likely have to update the triggers manually.
即:该模板去掉了新版 Zabbix 不支持的标签(tags),并降级了导出版本,使其能稳定工作在 Zabbix 3.0 上;同时提醒使用者——触发器(triggers)大概率需要根据实际环境手动更新。
值得注意的是,这个"面向 3.0 的修复版"模板,在仓库中同时以三种导出格式存放:
| 目录 | 格式 | 文件 |
|---|---|---|
| 5.0 | XML | template_3.0_for_pyora.xml |
| 5.4 | YAML | template_3.0_for_pyora.yaml |
| 6.0 | YAML | template_3.0_for_pyora.yaml |
三份文件的导出时间均为2021-11-21T21:26:5xZ,且 YAML 中模板 UUID 一致(7eae89aae9d747498d89b12d7f25df33),说明它们是同一模板针对不同 Zabbix 版本生成的导出物,可按需选用。仓库根 README.md 的模板索引中也收录了该模板(Pyora active send)。
模板总体结构:一个纯 trapper 的"主动发送"模板
导入后,模板名为Pyora active send,归属于Pyora与Templates两个模板组,共定义了 5 个应用(Application):Oracle、ASM Volumes、Tablespaces、Temp Tablespaces、Database Users。
从 5.4 YAML 与 5.0 XML 的实现看,模板呈现三个鲜明特征:
- 几乎全部采用 Zabbix trapper(TRAP)类型:普通指标项(如
commits、uptime、version)与 LLD 原型项(如tablespace[{#TABLESPACE}])均为 trapper,delay为0,完全依赖 PyOra 脚本主动推数,Zabbix 侧不做轮询。 - 少量辅助项用 Zabbix agent 类型:仅
Zabbix items list(pyora-items-list[...])为 agent 项,更新周期 3600 秒,用于校验 PyOra 脚本是否成功在 Zabbix 中创建了完整条目清单。 - 无模板链接(Template links):README 明确标注 "There are no template links in this template.",该模板不依赖任何其他模板。
数据流
Oracle 数据库 │ (只读账号查询 v$ 视图) ▼ PyOra Python 脚本(在数据库主机或独立采集机上运行) │ zabbix_sender 主动推送(trapper items,delay=0) ▼ Zabbix Server ── trapper items ── 预处理器 ── 历史/趋势 ── 触发器告警 ▲ └── Zabbix Agent 每 3600s 轮询 pyora-items-list 做完整性自检宏定义(Macros):接入前必须配置的变量
模板在 README 宏表 中列出了 6 个宏,与 XML 宏定义 一一对应:
| 宏名 | 说明 | 默认值 | 类型 |
|---|---|---|---|
{$ASMHIGH} | ASM 卷使用率告警阈值(%) | 85 | Text macro |
{$DATABASE} | 被监控的 Oracle 数据库名(如ORCL) | 空 | Text macro |
{$HIGH} | 表空间使用率告警阈值(%) | 80 | Text macro |
{$ZABBIXPASSWORD} | 用于调用 Zabbix API 的密码 | 空 | Text macro |
{$ZABBIXURL} | Zabbix API 地址(如http://zabbix/api_jsonrpc.php) | 空 | Text macro |
{$ZABBIXUSER} | 用于调用 Zabbix API 的用户名 | 空 | Text macro |
此外,模板中的 item 键还引用了一个未在宏表中列出但实际被使用的宏{$ADDRESS}(出现在所有pyora-discovery[...]与pyora-items-list[...]键中,指 Oracle 实例地址)以及{$ARCHIVE}(用于check_archive[{$ARCHIVE}]监控项)。在 5.4/6.0 YAML 的宏区 中同样只能看到{$ASMHIGH}、{$DATABASE}、{$HIGH}、{$ZABBIXPASSWORD}、{$ZABBIXURL}、{$ZABBIXUSER}六个宏定义,因此{$ADDRESS}、{$ARCHIVE}需要在主机级或模板级手动补充。部署时建议在主机上统一设置,否则带{$ADDRESS}的发现规则与自检项会因宏未解析而失效。
低级别发现(LLD)规则:自动盘点 Oracle 对象
模板通过 4 条发现规则实现"自动发现、自动建项"(详见 README Discovery rules):
| 发现规则名称 | 键(key) | 类型 | 更新周期 | 过滤器宏 |
|---|---|---|---|---|
| Discovery Oracle temp tablespaces | pyora-discovery[{$ADDRESS},{$DATABASE},show_tablespaces_temp] | Zabbix agent | 3600 | {#TABLESPACE_TEMP} |
| Discovery Oracle tablespaces | pyora-discovery[{$ADDRESS},{$DATABASE},show_tablespaces] | Zabbix agent | 3600 | {#TABLESPACE} |
| Discovery Oracle ASM volumes | pyora-discovery[{$ADDRESS},{$DATABASE},show_asm_volumes] | Zabbix agent | 3600 | {#ASMVOLUME} |
| Discovery Oracle users | pyora-discovery[{$ADDRESS},{$DATABASE},show_users] | Zabbix agent | 3600 | {#DBUSER} |
这些规则由 PyOra 脚本的 discovery 输出驱动:脚本按show_*参数分别返回临时表空间、表空间、ASM 卷、数据库用户清单,Zabbix 据此生成对应的 LLD 原型项。需要特别注意:5.4 YAML 与 6.0 YAML 中,Discovery Oracle tablespaces与Discovery Oracle users两条规则的状态为DISABLED(5.0 XML 中同样标注status>DISABLED),意味着导入后默认不会执行发现,需要按需启用。
各规则生成的原型项如下:
- ASM 卷发现(应用
ASM Volumes):asm_volume_free[{#ASMVOLUME}](ASM Volume Free,单位 B)asm_volume_size[{#ASMVOLUME}](ASM Volume Size,单位 B)asm_volume_use[{#ASMVOLUME}](ASM Volume Use,单位 %)
- 表空间发现(应用
Tablespaces):tablespace[{#TABLESPACE}](Tablespace percentual use,单位 %,FLOAT)tablespace_abs[{#TABLESPACE}](Tablespace free,单位 bytes)
- 临时表空间发现(应用
Temp Tablespaces):tablespace_temp[{#TABLESPACE_TEMP}](Temp Tablespace Use,单位 %,FLOAT)
- 用户发现(应用
Database Users):user_status[{#DBUSER}]({#DBUSER} user status,TEXT 类型,原型本身状态为 DISABLED)
所有 LLD 原型项同样都是 trapper(TRAP),delay=0,等待 PyOra 按{#宏}展开后的具体键推送数据。
采集指标(Items):47 个 trapper 指标 + 7 个 LLD 原型
模板的采集项几乎覆盖了 Oracle 性能监控的核心维度(完整清单见 README Items collected 与 XML items 区)。除Zabbix items list外,全部为Zabbix trapper、Update: 0。按监控维度可归纳为以下几组:
实例与运行状态
| 指标名 | 键 | 说明 |
|---|---|---|
| Oracle/Instance is active and open on {$DATABASE} | check_active | 实例存活与打开状态(CHAR) |
| Oracle/Uptime on {$DATABASE} | uptime | 实例运行时长(单位 s) |
| Oracle/Version on {$DATABASE} | version | Oracle 版本(CHAR) |
| Oracle/Logonscurrent on {$DATABASE} | logonscurrent | 当前登录会话数 |
| Oracle/Active user count on {$DATABASE} | activeusercount | 活跃用户数 |
性能与等待事件
| 指标名 | 键 |
|---|---|
| Oracle/Read Cache hit ratio on {$DATABASE} | rcachehit(% ) |
| Oracle/Hard parse ratio on {$DATABASE} | hparsratio(% ) |
| Oracle/Disk sorts ratio on {$DATABASE} | dsksortratio(% ) |
| Oracle/Buffer busy waits on {$DATABASE} | bufbusywaits |
| Oracle/Latchfree on {$DATABASE} | latchfree |
| Oracle/Enqueue on {$DATABASE} | enqueue(默认 DISABLED) |
| Oracle/freebufwaits on {$DATABASE} | freebufwaits(默认 DISABLED) |
| Oracle/Netresv / Netroundtrips / Netsent | netresv/netroundtrips/netsent |
| Oracle/dbseqread / dbscattread / directread / dbsnglwrite / dbprllwrite | 各类物理 I/O 计数 |
事务、日志与锁
| 指标名 | 键 |
|---|---|
| Oracle/User Commits on {$DATABASE} | commits |
| Oracle/Redo Writes on {$DATABASE} | redowrites |
| Oracle/Deadlocks on {$DATABASE} | deadlocks |
| Oracle/Logfilesync / Logprllwrite / Logswcompletion | logfilesync/logprllwrite/logswcompletion |
| Oracle/Lastarclog / Lastapplarclog | lastarclog/lastapplarclog(后者默认 DISABLED) |
| Oracle/Query Lock / Query Lock list | query_lock/query_lock_list2(TEXT) |
| Oracle/Query Redologs / Query Rollbacks / Query Sessions | query_redologs/query_rollbacks/query_sessions |
容量与增长
| 指标名 | 键 |
|---|---|
| Oracle/Size of user data (without temp) on {$DATABASE} | dbsize(单位 B) |
| Oracle/Size of all datafiles on {$DATABASE} | dbfilesize(单位 B) |
| Oracle/fra_use on {$DATABASE} | fra_use(Fast Recovery Area 使用率,默认 DISABLED) |
| Oracle/Archive {$ARCHIVE} on {$DATABASE} | check_archive[{$ARCHIVE}](% ,默认 DISABLED) |
系统指标(sysmetrics)
| 指标名 | 键 |
|---|---|
| Oracle/Database CPU Time Ratio on {$DATABASE} | query_sysmetrics[Database_CPU_Time_Ratio](% ) |
| Oracle/Database Wait Time Ratio on {$DATABASE} | query_sysmetrics[Database_Wait_Time_Ratio](% ) |
| Oracle/User Transaction Per Sec on {$DATABASE} | query_sysmetrics[User_Transaction_Per_Sec] |
这三个指标直接对应 Oracle AWR 中的经典比率指标,PyOra 通过query_sysmetrics[指标名]参数化的键按名称取数,FLOAT 类型存储。
自检与完整性
| 指标名 | 键 | 类型/周期 |
|---|---|---|
| Zabbix items list | pyora-items-list[{$ZABBIXURL},{$ZABBIXUSER},{$ZABBIXPASSWORD},{HOST.HOST},{$ADDRESS},{$DATABASE}] | Zabbix agent,3600s,CHAR |
| Zabbix failed checks on {$DATABASE} | failedchecks | trapper,PyOra 上报失败的推送计数 |
其中Zabbix items list会调用 Zabbix API(URL/用户名/密码均来自宏),把当前主机上应存在的条目清单写入该 item;若输出中不包含关键字OK,将触发Can't create items list告警(详见下节),是这套模板"安装是否正确"的体检指标。
预处理器(Preprocessing):让原始计数变成可读指标
从 YAML items 定义 可以看到模板为不同指标配置了三种预处理器:
| 预处理器 | 作用 | 应用到的键 |
|---|---|---|
CHANGE_PER_SECOND | 将累计计数换算为每秒变化率(速率) | commits、deadlocks、indexffs、netresv、redowrites、tblrowsscans、tblscans |
BOOL_TO_DECIMAL | 将布尔值(true/false)转为 1/0 数值 | dbprllwrite、dbseqread、lastarclog |
MULTIPLIER×1048576 | 将 MB 单位数值放大为字节(B) | asm_volume_free[{#ASMVOLUME}]、asm_volume_size[{#ASMVOLUME}](见 YAML LLD 区) |
这三类预处理器正是 PyOra"原始值上报、Zabbix 侧加工"思路的体现:脚本只负责把 Oracle 视图里的计数值、布尔标志和 MB 尺寸推过来,速率、归一化和单位换算全部交给 Zabbix 预处理完成,从而保持采集端脚本简单、可移植。
触发器体系:从灾难告警到容量预警
模板内置的触发器在 README Triggers 中公开了 4 条,而 XML 与 YAML 实际内置了更多,按严重级别汇总如下:
| 严重级别 | 触发器名称 | 表达式(以 5.4/6.0 新语法为例) | 说明 |
|---|---|---|---|
| DISASTER | Database {$DATABASE} is down or ORA error found | find(/Pyora active send/check_active,,"regexp","ORA")=1 | check_active返回内容中出现ORA即告警,提示联系 DBA |
| HIGH | Database {$DATABASE} is not responding | nodata(/Pyora active send/check_active,800s)=1 | 800 秒无数据,判定实例无响应 |
| HIGH | fra_use used on {$DATABASE} > 90% | last(/Pyora active send/fra_use)>90 | Fast Recovery Area 使用率超 90% |
| AVERAGE | ASM Volume {#ASMVOLUME} used > {$ASMHIGH}% | (last(...asm_volume_size...) - last(...asm_volume_free...)) / last(...asm_volume_size...) *100 > {$ASMHIGH} | 由 size/free 计算使用率后与{$ASMHIGH}比较 |
| AVERAGE | Tablespace {#TABLESPACE} used on {$DATABASE} > {$HIGH} % | last(/Pyora active send/tablespace[{#TABLESPACE}])>{$HIGH} | 表空间使用率超{$HIGH} |
| AVERAGE | Zabbix sender failed checks count: {ITEM.LASTVALUE1} | last(/Pyora active send/failedchecks)<>0 | 上报失败计数非零 |
| AVERAGE | Query Sessions on {$DATABASE} > 250 | last(/Pyora active send/query_sessions)>250 | 会话数超 250 |
| AVERAGE | Query Lock on {$DATABASE} > 1 | last(/Pyora active send/query_lock)>0 and length(last(/Pyora active send/query_lock_list2))>3 | 锁数大于 0 且锁清单文本长度大于 3(该触发器在 XML 中为全局触发器,YAML 中位于文件末尾 triggers 区) |
| AVERAGE | Query Lock list on {$DATABASE} not empty | length(last(/Pyora active send/query_lock_list2))>3 | 锁清单非空 |
| AVERAGE | Can't create items list | find(/Pyora active send/pyora-items-list[...],,"regexp","OK")=0 | 条目清单中找不到OK |
新旧版本表达式语法的差异(README 提醒"需手动更新触发器"的由来)
对比三个版本的导出文件,能直观看到 Zabbix 触发器语法的演进:
- 5.0 XML 使用 Zabbix 3.x 时代的旧式简写:如
{Pyora active send:asm_volume_size[{#ASMVOLUME}].last()}、{regexp(ORA)}=1、{nodata(800)}=1、{last()}>80。 - 5.4/6.0 YAML 已改写为新式函数语法:
last(/Pyora active send/... )、find(/Pyora active send/check_active,,"regexp","ORA")=1、nodata(/Pyora active send/check_active,800s)=1、length(last(...))。
这就是作者在 Overview 中提示 "you will most likely have to update the triggers manually" 的原因:模板从旧版迁移而来,跨版本导入后,旧式表达式在新版 Zabbix 中可能无法直接解析,需要按下表对照改写。README 的 Triggers 表中表达式仍保留硬编码阈值(> 85、> 80),而 YAML/XML 中的触发器原型已改用宏(>{$ASMHIGH}、>{$HIGH}),配置时建议统一以宏为准,便于批量调整阈值。
部署步骤:导入、配置与验证
1. 选择版本并导入
按目标 Zabbix 版本选择导入文件(通过 Zabbix 前端Configuration → Templates → Import):
| Zabbix 版本 | 导入文件 |
|---|---|
| 5.0 | Databases/Oracle/template_3.0_for_pyora/5.0/template_3.0_for_pyora.xml |
| 5.4 | Databases/Oracle/template_3.0_for_pyora/5.4/template_3.0_for_pyora.yaml |
| 6.0 | Databases/Oracle/template_3.0_for_pyora/6.0/template_3.0_for_pyora.yaml |
2. 配置宏
在主机(或模板)上设置以下宏:
{$DATABASE}:Oracle 实例名(如ORCL){$ADDRESS}:Oracle 实例地址(发现规则与 items-list 键使用){$ZABBIXURL}/{$ZABBIXUSER}/{$ZABBIXPASSWORD}:Zabbix API 三要素,供pyora-items-list自检使用- 阈值宏
{$HIGH}(默认 80)、{$ASMHIGH}(默认 85)可按业务调整 - 如启用归档检查,还需
{$ARCHIVE}
3. 挂载主机并启用需要的规则
把模板链接到 Oracle 主机后,按需启用默认 DISABLED 的发现规则(show_tablespaces、show_users)与指标项(enqueue、fra_use、freebufwaits、lastapplarclog、check_archive、user_status原型等)。
4. 验证数据流
- 确认 PyOra 脚本能连接 Oracle 并以只读账号取数;
- 确认脚本通过
zabbix_sender推送的键名与模板 item 键一一对应; - 观察
Zabbix items list项的值是否包含OK,若触发Can't create items list,则说明 API 宏配置或脚本侧条目生成存在问题; - 检查
failedchecks是否为 0,非 0 时触发Zabbix sender failed checks count告警,提示存在推送失败的键。
注意事项与适用前提
- 版本适配:本模板名为 "3.0",实际为适配 Zabbix 3.0 的修复版,仓库以 5.0/5.4/6.0 导出格式提供。导入前请确认目标 Zabbix 版本,5.0 版本使用 XML,5.4/6.0 使用 YAML;旧式触发器表达式跨版本导入后可能需要手动改写(参见上文新旧语法对照)。
- 默认禁用项:多条发现规则、指标与原型(
show_tablespaces、show_users、fra_use、enqueue、freebufwaits、lastapplarclog、check_archive、user_status)默认 DISABLED,需按监控需求启用;query_lock的触发器在 XML 中状态亦为 DISABLED。 - 宏完整性:
{$ADDRESS}、{$ARCHIVE}未出现在模板宏表中,必须自行补充,否则相关键无法解析。 - 采集前提:所有 trapper 指标依赖 PyOra 脚本主动推送,若脚本未运行或数据库账号权限不足,Zabbix 侧只会呈现"无数据",不会主动报错,需结合
nodata类触发器与failedchecks综合判断。 - 阈值合理性:触发器阈值(表空间 80%、ASM 85%、FRA 90%、会话 250、无数据 800s 等)均为模板默认值,生产环境请结合实例规格与容量规划调整,并优先通过宏
{$HIGH}、{$ASMHIGH}管理,避免直接改动硬编码表达式。
小结
Pyora active send模板完整呈现了一套"PyOra 主动推送 + Zabbix trapper 接收 + LLD 自动发现 + 预处理加工"的 Oracle 监控范式:47 个常规 trapper 指标覆盖实例状态、等待事件、事务日志、锁与容量维度,7 个 LLD 原型实现表空间、临时表空间、ASM 卷与用户的自动盘点,而pyora-items-list与failedchecks则为整套链路提供了自我校验能力。对于仍在维护 Zabbix 3.0 时代 PyOra 方案、或希望在新版 Zabbix 上复用该采集架构的团队,仓库中 README 与三份导入文件是可直接落地的参考实现;跨版本迁移时,请重点核对触发器表达式语法与默认禁用项,即可快速复现这套 Oracle 监控体系。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Zabbix「Windows by Zabbix agent active」模板实战指南:基于主动式 Agent 的 Windows 全栈监控
Zabbix「Windows by Zabbix agent active」模板实战指南:基于主动式 Agent 的 Windows 全栈监控 导读 本文以 Z
指标监控可观测性告警运维使用 Zabbix 6.0 模板监控 Oracle Linux 上的 Focco ERP:115 个监控项实战解析
使用 Zabbix 6.0 模板监控 Oracle Linux 上的 Focco ERP:115 个监控项实战解析 本文基于 Zabbix Community
Zabbix 8.0 官方模板解析:使用 Zabbix agent active 监控 Podman 容器与宿主机
Zabbix 8.0 官方模板解析:使用 Zabbix agent active 监控 Podman 容器与宿主机 本指南以仓库内 Podman by Zabb
指标监控可观测性告警运维
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考