Zabbix监控Oracle 19c数据库完整配置指南
一、环境准备
1.1 系统要求
- Zabbix Server 5.0或更高版本
- Oracle 19c数据库(版本19.3+)
- Oracle Instant Client(Linux系统)
- Zabbix Agent 2(推荐)或Zabbix Agent
1.2 软件下载
# Oracle Instant Client
wget https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
# Zabbix Agent 2
wget https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-agent2-6.0.0-release1.el8.x86_64.rpm
二、Oracle端配置
2.1 创建监控用户
-- 以sysdba身份登录
sqlplus / as sysdba
-- 创建监控用户
CREATE USER zabbix_mon IDENTIFIED BY "YourStrongPassword123";
-- 授予权限
GRANT CONNECT, CREATE SESSION TO zabbix_mon;
GRANT SELECT ANY DICTIONARY TO zabbix_mon;
GRANT SELECT ON V_$SYSSTAT TO zabbix_mon;
GRANT SELECT ON V_$SYSTEM_EVENT TO zabbix_mon;
GRANT SELECT ON V_$SESSION TO zabbix_mon;
GRANT SELECT ON V_$DATABASE TO zabbix_mon;
GRANT SELECT ON V_$LOG TO zabbix_mon;
GRANT SELECT ON V_$PARAMETER TO zabbix_mon;
GRANT SELECT ON DBA_DATA_FILES TO zabbix_mon;
GRANT SELECT ON DBA_TEMP_FILES TO zabbix_mon;
GRANT SELECT ON DBA_FREE_SPACE TO zabbix_mon;
GRANT SELECT ON V_$RECOVERY_FILE_DEST TO zabbix_mon;
GRANT SELECT ON V_$FLASH_RECOVERY_AREA_USAGE TO zabbix_mon;
GRANT SELECT ON V_$ARCHIVED_LOG TO zabbix_mon;
GRANT SELECT ON V_$BACKUP TO zabbix_mon;
GRANT SELECT ON V_$ASM_DISKGROUP TO zabbix_mon;
2.2 配置TNS
# 编辑tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora
# 添加监控连接
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
三、Zabbix Agent端配置
3.1 安装Oracle Instant Client
# 安装RPM包
rpm -ivh oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
# 设置环境变量
echo 'export ORACLE_HOME=/usr/lib/oracle/19.19/client64' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
3.2 安装Zabbix Agent 2
# 安装Zabbix Agent 2
rpm -ivh zabbix-agent2-6.0.0-release1.el8.x86_64.rpm
# 安装Oracle插件依赖
yum install -y unixODBC-devel
3.3 配置Zabbix Agent 2
# 编辑配置文件
vi /etc/zabbix/zabbix_agent2.conf
# 添加以下配置
Server=192.168.1.100 # Zabbix Server IP
ServerActive=192.168.1.100 # Zabbix Server IP
Hostname=oracle-db-server # 主机名(需与Zabbix Web中配置一致)
# 加载Oracle插件
Plugins.Oracle.System.Path=/var/lib/zabbix/oracle
Plugins.Oracle.CallTimeout=30
# 启用插件
Plugins.Oracle.Enabled=true
3.4 创建Oracle插件配置文件
# 创建目录
mkdir -p /var/lib/zabbix/oracle
# 创建配置文件
vi /var/lib/zabbix/oracle/settings.conf
# 添加数据库连接配置
<orcl>
ConnectString = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
User = zabbix_mon
Password = YourStrongPassword123
</orcl>
3.5 测试连接
# 测试Oracle连接
sqlplus zabbix_mon/YourStrongPassword123@orcl
# 测试Zabbix插件
zabbix_agent2 -t oracle.db.discovery[orcl]
四、Zabbix Server端配置
4.1 导入Oracle监控模板
下载官方Oracle模板:https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/oracle_agent2
登录Zabbix Web界面
进入"Configuration" → "Templates"
点击"Import",选择下载的XML文件
4.2 创建主机
进入"Configuration" → "Hosts"
点击"Create host"
配置主机信息:
- Host name: oracle-db-server
- Visible name: Oracle 19c Database
- Groups: Databases, Oracle Servers
- Agent interfaces: 添加Zabbix Agent 2的IP和端口
关联模板:"Template DB Oracle by Zabbix agent 2"
4.3 配置宏变量
在主机配置中添加宏:
{$ORACLE.CONN} = orcl
{$ORACLE.USER} = zabbix_mon
{$ORACLE.PASSWORD} = YourStrongPassword123
五、监控项详解
5.1 关键监控指标
性能指标
oracle.db.performance[session_count,orcl] # 会话数
oracle.db.performance[active_session_count,orcl] # 活跃会话数
oracle.db.performance[logical_reads,orcl] # 逻辑读
oracle.db.performance[physical_reads,orcl] # 物理读
oracle.db.performance[user_commits,orcl] # 用户提交数
oracle.db.performance[user_rollbacks,orcl] # 用户回滚数
表空间监控
oracle.ts.stats[{#TABLESPACE},total,orcl] # 表空间总大小
oracle.ts.stats[{#TABLESPACE},free,orcl] # 表空间空闲大小
oracle.ts.stats[{#TABLESPACE},pused,orcl] # 使用百分比
等待事件
oracle.event.stats[{#EVENT},total_waits,orcl] # 等待事件数
oracle.event.stats[{#EVENT},time_waited,orcl] # 等待时间
5.2 自定义监控项示例
监控归档日志状态
-- 创建监控SQL文件
vi /var/lib/zabbix/oracle/archivelog_status.sql
-- SQL内容
SELECT
COUNT(*) as archive_count,
ROUND(SUM(blocks * block_size)/1024/1024, 2) as archive_size_mb
FROM v$archived_log
WHERE completion_time > SYSDATE - 1/24;
在Zabbix中创建监控项
使用
oracle.db.query[query_file,orcl]键值
配置预处理步骤提取数值
六、告警配置
6.1 关键告警规则
表空间使用率告警
触发器名称:Tablespace {#TABLESPACE} usage > 90%
表达式:{Template DB Oracle:oracle.ts.stats[{#TABLESPACE},pused,orcl].last()}>90
严重性:Warning
会话数告警
触发器名称:Too many database sessions
表达式:{Template DB Oracle:oracle.db.performance[session_count,orcl].avg(5m)}>500
严重性:Average
连接失败告警
触发器名称:Oracle connection failed
表达式:{Template DB Oracle:oracle.db.ping[orcl].nodata(3m)}=1
严重性:High
七、仪表板配置
7.1 创建Oracle监控仪表板
进入"Monitoring" → "Dashboards"
点击"Create dashboard"
添加以下小部件:
- 数据库状态卡片
- 会话数趋势图
- 表空间使用率饼图
- Top 5等待事件
- 性能指标历史数据
7.2 Grafana集成(可选)
# docker-compose.yml配置
version: '3'
services:
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app
八、维护与优化
8.1 定期任务
# 清理旧数据
# 添加crontab任务
0 2 * * * /usr/bin/find /var/lib/zabbix/oracle/logs -name "*.log" -mtime +7 -delete
8.2 性能优化建议
调整Zabbix Agent收集间隔
使用Oracle Active Data Guard监控备库
配置Oracle AWR报告自动收集
定期分析Zabbix历史数据表
8.3 安全建议
使用Oracle Wallet存储密码
定期轮换监控账户密码
限制监控账户的IP访问
启用Zabbix Agent TLS加密
九、故障排除
9.1 常见问题
连接失败
# 检查网络连接
tnsping orcl
# 检查插件权限
ls -la /var/lib/zabbix/oracle/
# 查看Zabbix Agent日志
tail -f /var/log/zabbix/zabbix_agent2.log
插件执行超时
# 增加超时时间
vi /var/lib/zabbix/oracle/settings.conf
# 添加:CallTimeout=60
9.2 调试命令
# 手动测试监控项
zabbix_agent2 -t oracle.db.ping[orcl]
# 查看所有可用的监控项
zabbix_agent2 -p | grep oracle
# 检查Oracle连接
echo 'select sysdate from dual;' | sqlplus -s zabbix_mon/密码@orcl
十、参考资料
- Zabbix官方Oracle监控文档
- Oracle 19c管理员指南
- Zabbix模板GitHub仓库
注意:生产环境部署前,请在测试环境充分验证。所有密码和敏感信息应使用安全的存储方式。