Zabbix7代理方式监控oracle 23.3
本次实验尝试在 Zabbix 7 环境中,使用官方提供的 “Oracle by Zabbix agent 2” 模板,对通过 Docker 方式部署的 Oracle 数据库进行监控。
一、环境准备与配置
1.1 linux操作系统及docker环境安装
操作系统为Ubuntu 24.04 mini安装
Docker 版本为28.3.3
(安装过程省略)
1.2获取镜像:
拉取 Oracle Database 23c 镜像
# docker pull gvenzl/oracle-free:23.3
1.3运行容器:启动容器,设置必要的环境变量(如密码、SID)。
docker run -d \
--name zabbix-test-oracle \
-p 1521:1521 \
-e ORACLE_PASSWORD=mysecurepassword \
-e ORACLE_DATABASE=ORCL \
--restart unless-stopped \
gvenzl/oracle-free:23.3
1.4验证数据库连接
1.4.1容器内登录测试。
#docker exec -it 0c3bfbb456b8 bash
bash-4.4$ sqlplus system/mysecurepassword@//localhost:1521/ORCL
1.4.2其他客户端测试
在一台WINDOWS终端上用DBeaver 配置连接成功。
二、Zabbix Agent 2 配置
2.1 安装 Agent 2
在 运行 Docker 引擎的宿主机 上安装 Zabbix Agent 2。
# wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
# dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
# apt update
# apt install zabbix-agent2
2.2 配置 Zabbix Agent 2
编辑 /etc/zabbix/zabbix_agent2.conf。
# cd /etc/zabbix/
# vi zabbix_agent2.conf
修改zabbix服务器参数
Server=192.168.1.242 # 我的zabbix服务器IP
Hostname= Oracle_docker_host # 此主机在 Zabbix 中的标识,与下一步在Zabbix服务器 Web UI 中创建的主机名一致
2.3 配置 Oracle 监控用户
在 Oracle 容器内创建一个专用于 Zabbix 监控的用户,授予必要权限。
#docker exec -it 0c3bfbb456b8 bash #进入容器
bash-4.4$ sqlplus system/mysecurepassword@//localhost:1521/ORCL #使用 sysdba 权限用户system登录 sqlplus
sql>CREATE USER zabbix_monitor IDENTIFIED BY "monitor_password";
sql>GRANT CONNECT TO zabbix_monitor;
sql>GRANT SELECT ANY DICTIONARY TO zabbix_monitor;
sql>GRANT SELECT ON V_$SESSION TO zabbix_monitor;
sql>GRANT SELECT ON V_$SYSMETRIC TO zabbix_monitor;
2.4. 创建 Oracle 连接配置文件
编辑文件 /etc/zabbix/zabbix_agent2.d/plugins.d/oracle.conf
修改启用以下键值
Plugins.Oracle.Sessions.ORCL.Uri=tcp://localhost:1521
Plugins.Oracle.Sessions.ORCL.Service=ORCL
Plugins.Oracle.Sessions.ORCL.User=zabbix_monitor
Plugins.Oracle.Sessions.ORCL.Password=monitor_password
2.5 在Zabbix Web UI中配置HOST
进入 Data collection > Hosts 页面 点击 Create host
设置Host name : Host-Docker-Oracle
Templates : Oracle by Zabbix agent 2
Interfaces: IP 192.168.1.200,端口: 10050。
宏:
{$ORACLE.CONNSTRING} : tcp://localhost:1521
{$ORACLE.USER} : zabbix_monitor
{$ORACLE.PASSWORD} : monitor_password
{$ORACLE.SERVICE} : ORCL
三、验证监控结果
3.1 Agent 2 与 Server 连通性测试
在 Zabbix Server 上执行 zabbix_get -s 192.168.1.200 -p 10050 -k "agent.ping"
返回结果 1
在Zabbix Web UI进入Data collection > Hosts 页面,可以看到Oracle_docker_host主机的Availability 标记为绿色,服务器与Agent 已成功连接
3.2 数据采集测试
等待几分钟让 Zabbix Server 开始收集数据,然后检查最新数据。
所有指标都无数据,提示错误:“ORA-00000: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help”
3.3 根据提示,需要安装 Oracle Instant Client。
在Oracle 官网下载适用于 Linux x86_64 的 Instant Client RPM 包
#wget https://download.oracle.com/otn_software/linux/instantclient/2390000/oracle-instantclient-basic-23.9.0.25.07-1.el9.x86_64.rpm
Ubuntu不能直接安装RPM包,需要转换为DEB包。
安装alien工具,该工具可以将RPM包转换为Debian包(.deb)
# apt update
# apt install alien
使用alien将RPM包转换为Deb包
# alien -d -c oracle-instantclient-basic-23.9.0.25.07-1.el9.x86_64.rpm
安装Oracle Instant Client
# dpkg -i oracle-instantclient-basic_23.9.0.25.07-2_amd64.deb
3.4设置环境变量
为了让 Zabbix Agent 2 能找到 Oracle 客户端库,需要设置环境变量。
创建环境配置文件
# vi /etc/default/zabbix-agent2
在文件末尾添加以下内容:
# Oracle Instant Client 23.9 Environment Variables
ORACLE_HOME=/usr/lib/oracle/23/client64
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
重启 Zabbix Agent2 服务:
# systemctl restart zabbix-agent2
配置完成后,检查环境变量是否生效:
获取 Zabbix Agent2 的 PID
#pidof zabbix_agent2
查看该进程的环境变量
sudo strings -a /proc/20406/environ | grep -E '(ORACLE_HOME|LD_LIBRARY_PATH)'
输出中显示了设置的路径,说明环境变量已生效。
在zabbix服务器WEB UI查看指标数据,发现报错信息变成:ORA-00000: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libaio.so.1: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
提示缺少libaio.so.1 这个共享库
在系统中查找libaio.so.1 的实际位置
# find / -name libaio.so.1*
/usr/lib/x86_64-linux-gnu/libaio.so.1t64
/usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2
从搜索结果来看,libaio1是Linux异步I/O库,而Ubuntu24.04上安装的是libaio1t64。虽然名称不同,但根据APT的包信息,libaio1t64应该提供了相同的功能,只是命名可能因版本不同。
尝试直接复制库文件
#cp /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
重启 Zabbix Agent2 服务:
# systemctl restart zabbix-agent2
从 Zabbix Server 再次执行 zabbix_get 命令:
# zabbix_get -s 192.168.1.200 -k "oracle.instance.info["tcp://localhost:1521","zabbix_monitor","monitor_password","ORCL"]"
执行成功。
在zabbix服务器WEB UI查看指标,已获取到数据。