Oracle数据库作为企业核心系统的数据底座,其运行状态直接关系到业务连续性。通过Zabbix实现对Oracle的精细化监控,能够提前发现表空间不足、性能下降、锁等待等隐患,避免小问题演变成大故障。本文将手把手完成一整套Zabbix监控Oracle的模板配置,借助自定义脚本和Agent用户参数,将数据库内部指标无缝接入Zabbix。

一、环境准备与前提条件
在开始配置之前,需要确保Zabbix Server或Proxy已经正常运行,并且目标Oracle服务器上安装了Zabbix Agent。Agent版本建议与Server保持一致,否则可能出现键值不兼容的情况。Oracle数据库版本从11g到19c均可支持,本文以Linux环境下的Oracle 19c为例进行说明。
此外,需要准备一个具有查询权限的Oracle数据库用户,专门用于监控。该用户只需具备SELECT ANY DICTIONARY或细粒度的动态性能视图查询权限,以及访问相关数据字典的权限即可,不建议直接使用SYS或SYSTEM账号。同时,服务器上需要安装Oracle客户端工具,例如sqlplus,确保能够在命令行中执行SQL查询并返回结果。
二、创建Oracle监控脚本
Zabbix Agent本身无法直接连接数据库执行SQL,因此需要借助外部脚本将数据库查询结果转换为Agent可以读取的文本格式。我们可以在Oracle服务器上创建一个Shell脚本,通过sqlplus连接数据库并执行预定义的查询,将输出打印到标准输出。
脚本的核心思路是:接收一个参数,根据参数决定执行哪一条查询,Zabbix Agent的自定义键值会调用该脚本并传入参数。例如,可以定义以下监控项:
| 参数 | 监控内容 | SQL示例 |
|---|---|---|
| dbstatus | 数据库实例状态 | SELECT status FROM v$instance |
| tbs_usage | 表空间使用率 | SELECT round((1 - free/total)*100,2) FROM dba_data_files... |
| sessions | 当前会话数 | SELECT count(*) FROM v$session |
| buffer_hit | 缓冲区命中率 | SELECT (1 - physical_reads/(db_block_gets+consistent_gets))*100 FROM v$buffer_pool_statistics |
编写脚本时要注意设置Oracle环境变量(如ORACLE_HOME、ORACLE_SID),并处理sqlplus连接失败的情况,返回ZBX_NOTSUPPORTED或特定错误码,以便Zabbix能识别到异常状态。脚本存放路径建议为/usr/local/zabbix/scripts/oracle_monitor.sh,并赋予zabbix用户执行权限。
三、配置Zabbix Agent自定义键值
脚本准备完毕后,需要让Zabbix Agent能够通过键值触发脚本。编辑Agent配置文件/etc/zabbix/zabbix_agentd.conf,添加UserParameter参数。例如:
UserParameter=oracle.status[*],/usr/local/zabbix/scripts/oracle_monitor.sh $1
这里的[*]表示该键值可以接收参数,Agent会将参数传递给脚本。如果脚本中需要多个参数,可以继续使用$2、$3等占位符。配置完成后重启zabbix-agent服务,并使用zabbix_get命令在Server端测试键值是否能够正常返回数据:zabbix_get -s
如果Agent运行在主动模式,还需要检查ServerActive配置项是否指向了正确的Zabbix Server地址,并且Agent所在服务器的防火墙允许对应端口通信。
四、导入并配置监控模板
Zabbix官方社区提供了多种Oracle监控模板,可以直接下载XML文件并导入。也可根据自身需求创建自定义模板。本文以自定义模板为例,在Zabbix前端创建名为Template Oracle DB Monitor的模板,然后逐一添加监控项。
每个监控项的类型选择Zabbix客户端(主动式)或被动式,键值填写为之前定义的oracle.status[dbstatus]这样的形式,并设置合适的数据类型和更新间隔。对于表空间使用率这类需要告警的指标,可以建立触发器,例如当使用率超过90%时触发严重告警。同时,将监控项组合成图形,直观展示数据库负载、命中率等变化趋势。
除了基础状态和空间指标,还可以扩充监控项,例如:等待事件数量、归档日志切换频率、PGA和SGA使用情况等。每增加一个监控项,只需在脚本中补充对应的SQL分支,并在模板中添加对应键值即可,扩展非常灵活。
五、验证监控数据与常见问题处理
将模板链接到Oracle数据库对应的主机后,稍等片刻到最新数据页面查看是否有数据上报。如果出现ZBX_NOTSUPPORTED提示,通常是因为脚本执行权限不足、环境变量缺失或sqlplus无法连接。可以通过su - zabbix手动执行脚本,检查报错信息。
另一个常见问题是Agent主动模式下Server IP限制,需确认zabbix_agentd.conf中的Server参数是否包含了Zabbix Server的IP,被动模式下需确保该IP可以访问Agent的10050端口。若Oracle连接字符串中使用的是服务名而非SID,需要在脚本中指定sqlplus user/pass@tnsname的方式连接。
整体部署完成后,建议对关键指标设置触发器告警,并配置告警媒介如邮件、企业微信等,实现7x24小时不间断监控。通过定期回顾图表数据,还能为容量规划和SQL优化提供决策依据,让Oracle数据库始终保持在健康、高效的状态下运行。
Zabbix监控OracleOracle监控模板Zabbix模板配置修改时间:2026-08-12 06:27:35