完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?
mhr18 2024-09-15 21:51 25 浏览 0 评论
张 宇|Zabbix高级认证专家ZCP
- Zabbix5.0、6.0中文手册官方译者
你是否知道 Zabbix 有一个用于收集 Oracle 数据库指标的开箱即用模板?
使用此模板,我们可以使用 ODBC 无代理地收集数据库、表空间、ASM 和许多其他指标等数据。本文将指导如何为 Oracle 11.2、12.1、18.5 或 19.2 数据库服务器设置 ODBC 监控,将是部署 Oracle 数据库监控的完美指南。
1.下载 Instant 客户端和 SQLPlus
提供的命令适用于以下操作系统:CentOS 8、Oracle Linux 8 或 Rocky Linux。
首先我们要下载以下包:
oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
我们在这里下载
Oracle 即时客户端——需要,建立与 Oracle 数据库的连接 SQLPlus——我们可以用来测试与 Oracle 数据库的连接的工具 Oracle ODBC 包——包含所需的 ODBC 驱动程序和配置脚本,以启用与 Oracle 数据库的 ODBC 连接
将包上传到 Zabbix 服务器(或代理,如果您希望在代理上监控您的 Oracle DB)并将其放置在:
/tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
/tmp/oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
/tmp/oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
2.解决操作系统依赖
安装“libaio”和“libnsl”库:
dnf -y install libaio-devel libnsl
否则,我们会收到错误:
# rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
error: Failed dependencies:
libaio is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
libnsl.so.1()(64bit) is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
# rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
error: Failed dependencies:
libnsl.so.1()(64bit) is needed by oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64
检查之前是否已在系统上部署了 Oracle 组件。下面的命令应该提供一个空的输出:
rpm -qa | grep oracle
ldconfig -p | grep oracle
3.安装 Oracle 客户端
rpm -ivh /tmp/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
确保安装了包“oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64”:
rpm -qa | grep oracle
4.LD配置
git.zabbix.com 上的官方 Oracle 模板页面讨论了为服务配置 Oracle ENV Usage 的方法。对于这种即时客户端的版本19.12,这是不REQUIRED营造“的/ etc / SYSCONFIG / ZABBIX服务器”的内容文件:
export ORACLE_HOME=/usr/lib/oracle/19.12/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
虽然我们确实安装了 rpm 包,但 Oracle 19.12 客户端包确实在全局级别自动配置了 LD 路径——这意味着系统上的每个用户都可以使用 Oracle 即时客户端。我们可以看到 LD 路径已经配置在:
cat /etc/ld.so.conf.d/oracle-instantclient.conf
显示结果:
/usr/lib/oracle/19.12/client64/lib
为确保操作系统识别所需的 Oracle 库,我们可以运行:
ldconfig -p | grep oracle
正确的显示:
liboramysql19.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/liboramysql19.so
libocijdbc19.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libocijdbc19.so
libociei.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libociei.so
libocci.so.19.1 (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libocci.so.19.1
libnnz19.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libnnz19.so
libmql1.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libmql1.so
libipc1.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libipc1.so
libclntshcore.so.19.1 (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libclntshcore.so.19.1
libclntshcore.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libclntshcore.so
libclntsh.so.19.1 (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libclntsh.so.19.1
libclntsh.so (libc6,x86-64) => /usr/lib/oracle/19.12/client64/lib/libclntsh.so
**注意:**如果由于某种原因 ldconfig 命令显示到其他动态库的链接 - 那是我们可能必须为 Zabbix 服务器/代理创建单独的 ENV 文件,它将 Zabbix 应用程序链接到正确的动态库,如示例所示本节的开始。
5.检查Oracle服务端口是否可达
为我们以后省掉一些麻烦,首先检查与 Oracle 数据库主机的网络连接。检查是否可以在网络级别访问默认的 Oracle 端口。在本例中,我们将尝试连接到默认的 Oracle 数据库端口 1521。根据您的 Oracle 数据库正在侦听连接的端口,进行相应的调整。确保输出显示“已连接到 10.1.10.15:1521”:
nc -zv 10.1.10.15 1521
6.测试与 SQLPlus 的连接
在继续进行 ODBC 配置之前,我们可以模拟与 Oracle 数据库的连接。确保命令中使用的 Oracle 用户名和密码正确。对于此任务,我们首先需要安装 SQLPlus 包。:
rpm -ivh /tmp/oracle-instantclient19.12-sqlplus-19.12.0.0.0-1.x86_64.rpm
为了模拟连接,我们可以使用单行命令。在示例命令中,我使用用户名“system”和密码“oracle”通过端口“1521”访问 Oracle 数据库服务器“10.1.10.15”并连接到服务名称“xe”:
sqlplus64 'system/oracle@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.10.15)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xe)))'
在输出中我们可以看到:我们使用 19.12 客户端连接到 11.2 服务器:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Sep 6 13:47:36 2021
Version 19.12.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
**注意:**这为我们提供了有关 Oracle 即时客户端的额外提示——新版本的客户端向后兼容旧版本的 Oracle 数据库服务器。尽管这不适用于 Oracle 客户端/服务器的每个版本,但请先查看 Oracle 即时客户端文档。
7.ODBC 连接器
说到配置ODBC,我们先安装ODBC驱动管理器
dnf -y install unixODBC
现在我们可以看到我们有两个新文件——“/etc/odbc.ini”(可能是空的)和“/etc/odbcinst.ini”。文件“/etc/odbcinst.ini”描述了驱动程序关系。目前,当我们'grep'关键字'oracle'时没有安装oracle关系,当我们运行时输出为空:
grep -i oracle /etc/odbcinst.ini
我们的下一步是安装 Oracle ODBC 驱动程序包:
rpm -ivh /tmp/oracle-instantclient19.12-odbc-19.12.0.0.0-1.x86_64.rpm
'oracle-instantclient*-odbc' 包包含一个脚本,将自动更新 '/etc/odbcinst.ini' 配置:
cd /usr/lib/oracle/19.12/client64/bin
./odbc_update_ini.sh / /usr/lib/oracle/19.12/client64/lib
显示结果:
*** ODBCINI environment variable not set,defaulting it to HOME directory!
现在当我们在屏幕上打印文件时:
cat /etc/odbcinst.ini
我们会看到在文件末尾添加了 Oracle 19 ODBC 驱动部分:
[Oracle 19 ODBC driver]
Description = Oracle ODBC driver for Oracle 19
Driver = /usr/lib/oracle/19.12/client64/lib/libsqora.so.19.1
Setup =
FileUsage =
CPTimeout =
CPReuse =
在执行“ldd”命令时,检查输出中是否没有错误很重要。这确保了依赖项得到满足且可访问,并且与库版本控制没有冲突:
ldd /usr/lib/oracle/19.12/client64/lib/libsqora.so.19.1
它会打印类似的东西:
linux-vdso.so.1 (0x00007fff121b5000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb18601c000)
libm.so.6 => /lib64/libm.so.6 (0x00007fb185c9a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb185a7a000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fb185861000)
librt.so.1 => /lib64/librt.so.1 (0x00007fb185659000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007fb185456000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fb18523f000)
libclntsh.so.19.1 => /usr/lib/oracle/19.12/client64/lib/libclntsh.so.19.1 (0x00007fb1810e6000)
libclntshcore.so.19.1 => /usr/lib/oracle/19.12/client64/lib/libclntshcore.so.19.1 (0x00007fb180b42000)
libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007fb18092c000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb180567000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb1864da000)
libnnz19.so => /usr/lib/oracle/19.12/client64/lib/libnnz19.so (0x00007fb17fdba000)
libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fb17fbb0000)
当我们执行“odbc_update_ini.sh”脚本时,在“/root/.odbc.ini”中创建了一个新的DSN(数据源名称)文件。这是一个示例配置 ODBC 配置文件,它描述了此版本的 ODBC 驱动程序支持哪些设置。
让我们将此配置文件从用户目录移动到系统范围内可访问的位置:
cat /root/.odbc.ini | sudo tee -a /etc/odbc.ini
并从用户目录中完全删除该文件:
rm /root/.odbc.ini
这样,系统中的每个用户都将只使用这个 ODBC 配置文件。我们现在可以更改现有配置 – /etc/odbc.ini。我要突出显示从默认值更改的内容:
[Oracle11g]
AggregateSQLType = FLOAT
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CacheBufferSize = 20
CloseCursor = F
DisableDPM = F
DisableMTS = T
DisableRULEHint = T
Driver = Oracle 19 ODBC driver
DSN = Oracle11g
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
LobPrefetchSize = 8192
Lobs = T
Longs = T
MaxLargeData = 0
MaxTokenSize = 8192
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName = //10.1.10.15:1521/xe
SQLGetData extensions = F
SQLTranslateErrors = F
StatementCache = F
Translation DLL =
Translation Option = 0
UseOCIDescribeAny = F
UserID = system
Password = oracle
DSN – 数据源名称。应该匹配括号中的部分名称,例如:[Oracle11g] ServerName – Oracle 服务器地址 UserID – Oracle 用户名 Password – Oracle 用户密码
要从命令行测试连接,让我们使用 isql 命令行工具,该工具应该模拟 ODBC 连接,类似于 Zabbix 在收集指标时正在执行的操作:
isql -v Oracle11g
本示例中的 isql 命令从 odbc.ini 文件中选取 ODBC 设置(用户名、密码、服务器地址)。我们所要做的就是引用特定的 DSN – Oracle11g
另一方面,如果我们不想在文件系统 (/etc/odbc.ini) 上保留密码,我们可以删除“UserID”和“Password”行。然后我们可以测试 ODBC 连接:
isql -v Oracle11g 'system' 'oracle'
如果连接成功,它应该打印:这就是 ODBC 配置!现在我们应该可以在 Zabbix 中应用 Oracle by ODBC 模板了
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
不要忘记,我们还需要提供必要的 Oracle 凭证来开始收集 Oracle 数据库指标:
在这篇博文中学到的经验教训可以很容易地应用于一般的 ODBC 监控和故障排除,而不仅仅是 Oracle。如果您有任何问题或希望分享您在 ODBC 或 Oracle 数据库监控方面的经验——欢迎投稿分享,有偿!
-------------- --------------
第1场Zabbix6.0ZCU培训报名开启!
K8s、API、日志、prometheus,下半年课表更新!扫码学习!
往期推荐
Z投稿|Zabbix如何通过ODBC对接Oracle获取相关数据?
案例|光大银行如何解决传统监控痛点,打造一体化监控平台?
Zabbix全年在线课录屏
PDF手册|1666页 Zabbix6.0官方中文 操作手册PDF下载!
扫一扫|加入技术交流群
微信号|17502189550
备注“使用Zabbix年限+企业+姓名”
5000+用户已加入!
一个人走得快,一群人走得远
相关推荐
- 一文读懂Prometheus架构监控(prometheus监控哪些指标)
-
介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...
- Spring Boot 3.x 新特性详解:从基础到高级实战
-
1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...
- 「技术分享」猪八戒基于Quartz分布式调度平台实践
-
点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...
- 14. 常用框架与工具(使用的框架)
-
本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...
- SpringBoot整合MyBatis-Plus:从入门到精通
-
一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...
- Seata源码—5.全局事务的创建与返回处理
-
大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...
- Java开发200+个学习知识路线-史上最全(框架篇)
-
1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...
- OpenResty 入门指南:从基础到动态路由实战
-
一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...
- 你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!
-
作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...
- 近2万字详解JAVA NIO2文件操作,过瘾
-
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...
- 学习MVC之租房网站(十二)-缓存和静态页面
-
在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...
- Linux系统下运行c++程序(linux怎么运行c++文件)
-
引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...
- 2022正确的java学习顺序(文末送java福利)
-
对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...
- 一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)
-
前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...
- 多商户商城系统开发全流程解析(多商户商城源码免费下载)
-
在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
oracle数据库查询Sql语句是否使用索引及常见的索引失效的情况
-
Java SE Development Kit 8u441下载地址【windows版本】
-
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)