宜都市本地信息网

Zabbix6通过ODBC方式监控Oracle 19C的详细过程

2026-03-31 23:59:02 浏览次数:0
详细信息

Zabbix 6 通过 ODBC 监控 Oracle 19C 详细配置过程

一、环境准备

1.1 系统要求

1.2 安装Oracle Instant Client

# 下载Oracle Instant Client (根据系统选择版本)
# 以CentOS/RHEL为例:
wget https://download.oracle.com/otn_software/linux/instantclient/1913000/oracle-instantclient19.13-basic-19.13.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/1913000/oracle-instantclient19.13-odbc-19.13.0.0.0-1.x86_64.rpm

# 安装
sudo rpm -ivh oracle-instantclient19.13-basic-19.13.0.0.0-1.x86_64.rpm
sudo rpm -ivh oracle-instantclient19.13-odbc-19.13.0.0.0-1.x86_64.rpm

1.3 安装ODBC驱动管理器

# CentOS/RHEL
sudo yum install -y unixODBC unixODBC-devel

# Ubuntu/Debian
sudo apt-get install -y unixodbc unixodbc-dev

二、配置ODBC连接

2.1 配置环境变量

# 编辑/etc/profile.d/oracle.sh
sudo tee /etc/profile.d/oracle.sh << 'EOF'
export ORACLE_HOME=/usr/lib/oracle/19.13/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
EOF

source /etc/profile.d/oracle.sh

2.2 配置ODBC驱动

# 查看ODBC配置文件位置
odbcinst -j

# 编辑/etc/odbcinst.ini
sudo tee /etc/odbcinst.ini << 'EOF'
[Oracle19]
Description = Oracle ODBC driver for Oracle 19c
Driver = /usr/lib/oracle/19.13/client64/lib/libsqora.so.19.1
Setup = /usr/lib/oracle/19.13/client64/lib/libodbc.so
FileUsage = 1
Threading = 0
EOF

2.3 配置数据源

# 编辑/etc/odbc.ini (系统DSN)
sudo tee /etc/odbc.ini << 'EOF'
[OracleDB]
Description = Oracle Database Connection
Driver = Oracle19
ServerName = //<oracle_host>:<port>/<service_name>
UserID = 
Password = 
Database = 
Port = 1521
EOF

# 或者使用用户DSN ~/.odbc.ini

2.4 测试ODBC连接

# 安装isql工具
sudo yum install -y unixODBC-utils

# 测试连接
isql -v OracleDB username password

三、Zabbix Server配置

3.1 安装Zabbix ODBC支持

# 安装Zabbix Server(如尚未安装)
# 对于已安装的Zabbix,确保包含ODBC支持

# 重新编译Zabbix Server支持ODBC
# 编译时需要添加--with-unixodbc参数

3.2 创建ODBC监控项

方法一:使用Zabbix Agent 2

配置Zabbix Agent 2

# /etc/zabbix/zabbix_agent2.conf
Plugins.Oracle.Sessions.DataSource=OracleDB
Plugins.Oracle.Sessions.User=zabbix
Plugins.Oracle.Sessions.Password=your_password

可用监控项示例

方法二:使用ODBC监控项类型

创建ODBC监控项

示例监控项


-- 监控表空间使用率
SELECT 
 tablespace_name,
 ROUND((1 - (free_space / total_space)) * 100, 2) as pct_used
FROM (
 SELECT 
     a.tablespace_name,
     SUM(a.bytes) as total_space,
     SUM(NVL(b.bytes,0)) as free_space
 FROM dba_data_files a
 LEFT JOIN dba_free_space b ON a.tablespace_name = b.tablespace_name
 GROUP BY a.tablespace_name
)
WHERE ROUND((1 - (free_space / total_space)) * 100, 2) > 80

-- 监控会话数 SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE'


## 四、创建Oracle监控模板

### 4.1 基础监控项目
| 监控项名称 | 键值 | SQL查询示例 |
|-----------|------|------------|
| Oracle会话数 | `db.odbc.select[session_count,OracleDB,zabbix,pwd,SELECT COUNT(*) FROM v$session]` | |
| 活跃会话数 | `db.odbc.select[active_sessions,...]` | `SELECT COUNT(*) FROM v$session WHERE status='ACTIVE'` |
| 表空间使用率 | `db.odbc.select[tablespace_usage,...]` | 上述表空间查询 |

### 4.2 创建自动发现规则
```json
{
    "data": [
        {
            "{#TABLESPACE_NAME}": "USERS",
            "{#PCT_USED}": "85.5"
        }
    ]
}

4.3 触发器配置示例

# 表空间使用率超过90%
表达式: {Oracle by ODBC:db.odbc.select[tablespace_usage,OracleDB,zabbix,pwd].last()} > 90
严重性: 高

# 会话数超过阈值
表达式: {Oracle by ODBC:db.odbc.select[session_count,...].last()} > 200
严重性: 警告

五、Oracle数据库准备

5.1 创建监控用户

-- 创建Zabbix监控用户
CREATE USER zabbix IDENTIFIED BY "StrongPassword123";

-- 授予必要权限
GRANT CREATE SESSION TO zabbix;
GRANT SELECT ANY DICTIONARY TO zabbix;
GRANT SELECT ON v_$session TO zabbix;
GRANT SELECT ON v_$sysstat TO zabbix;
GRANT SELECT ON v_$system_event TO zabbix;
GRANT SELECT ON dba_data_files TO zabbix;
GRANT SELECT ON dba_free_space TO zabbix;
GRANT SELECT ON dba_tablespaces TO zabbix;

-- 如果使用自动发现,可能需要更多权限

5.2 创建监控视图(可选)

CREATE OR REPLACE VIEW zabbix_tablespace_usage AS
SELECT 
    tablespace_name,
    ROUND((1 - (free_space / total_space)) * 100, 2) as pct_used
FROM (
    SELECT 
        a.tablespace_name,
        SUM(a.bytes) as total_space,
        SUM(NVL(b.bytes,0)) as free_space
    FROM dba_data_files a
    LEFT JOIN dba_free_space b ON a.tablespace_name = b.tablespace_name
    GROUP BY a.tablespace_name
);

六、故障排除

6.1 常见问题及解决

# 1. ODBC连接测试失败
# 检查tnsnames.ora配置
ls -la $ORACLE_HOME/network/admin/

# 2. 权限问题
# 确保Oracle用户有足够权限

# 3. 驱动问题
# 检查libsqora.so是否存在
ldd /usr/lib/oracle/19.13/client64/lib/libsqora.so.19.1

# 4. Zabbix获取不到数据
# 查看Zabbix Server日志
tail -f /var/log/zabbix/zabbix_server.log

6.2 调试命令

# 测试ODBC连接
echo "select 1 from dual;" | isql -v OracleDB zabbix password -b

# 检查ODBC配置
odbcinst -q -d
odbcinst -q -s

# 查看共享库
ldconfig -p | grep oracle

七、安全建议

最小权限原则:只授予监控所需的最小权限 密码安全:使用强密码,定期更换 网络隔离:限制数据库访问来源IP 加密传输:考虑使用SSL/TLS连接 审计日志:监控对监控账户的访问

八、性能优化建议

查询优化:避免复杂查询,使用索引 采样频率:合理设置更新间隔 历史数据:调整历史数据保留策略 批量获取:使用自动发现减少查询次数

注意:实际配置时请替换以下信息:

此配置提供了从基础到高级的完整监控方案,可根据实际需求调整监控项和阈值。

相关推荐