# 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
-- 以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;
# 编辑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)
)
)
# 安装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
# 安装Zabbix Agent 2
rpm -ivh zabbix-agent2-6.0.0-release1.el8.x86_64.rpm
# 安装Oracle插件依赖
yum install -y unixODBC-devel
# 编辑配置文件
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
# 创建目录
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>
# 测试Oracle连接
sqlplus zabbix_mon/YourStrongPassword123@orcl
# 测试Zabbix插件
zabbix_agent2 -t oracle.db.discovery[orcl]
在主机配置中添加宏:
{$ORACLE.CONN} = orcl
{$ORACLE.USER} = zabbix_mon
{$ORACLE.PASSWORD} = YourStrongPassword123
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] # 等待时间
-- 创建监控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]键值
配置预处理步骤提取数值
触发器名称: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
# docker-compose.yml配置
version: '3'
services:
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app
# 清理旧数据
# 添加crontab任务
0 2 * * * /usr/bin/find /var/lib/zabbix/oracle/logs -name "*.log" -mtime +7 -delete
# 检查网络连接
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
# 手动测试监控项
zabbix_agent2 -t oracle.db.ping[orcl]
# 查看所有可用的监控项
zabbix_agent2 -p | grep oracle
# 检查Oracle连接
echo 'select sysdate from dual;' | sqlplus -s zabbix_mon/密码@orcl
注意:生产环境部署前,请在测试环境充分验证。所有密码和敏感信息应使用安全的存储方式。