刚开始接触zabbix监控,需要监控Oracle数据库的情况,目前有两种方案,一种采用自定义agent的方式监控(优势支持主动模式,监控自由灵活多变)例如zabora方式监控,另一种就是通过zabbix自带的database monitor通过odbc进行监控(优势维护监控简单方便,只需维护sql语句即可),还有第三种,orabbix插件,采用jdbc方式远程监控。三种方式均在使用,使用odbc时遇到一些问题,网上其他人没有提到,所以记录下来。
zabbix版本3.0
linux centos7(zabbix_server运行的系统版本)
oracle版本11.2.0.4
linux red hat6(oracle服务端运行的系统版本)
yum -y install unixODBC unixODBC-devel
安装完成后,使用odbcinst -j可查看odbc功能相关配置文件路径(unixODBC-devel可选,如果是编译安装的zabbix,则必选,且需要使用参数–with-unixodbc编译安装,详见zabbix手册)
下载地址:https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
所需下载文件(自行选择版本):
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm(oracle即时客户端,必需)
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm(odbc驱动,必需)
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm(开发相关,可选)
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm(sqlplus,可选是否安装,可提供第二种测试数据库连接是否正常的方式)
安装:
rpm -ivh oracle-instantclient11.2-*
默认安装的文件位置(不同版本可能有区别,以11.2版本为例):
/usr/share/oracle/11.2/client64
/usr/include/oracle/11.2/client64
/usr/lib/oracle/11.2/client64(oracle即时客户端的主目录)
需要在/usr/lib/oracle/11.2/client64下新建文件夹
mkdir -p /usr/lib/oracle/11.2/client64/network/admin
文件夹新建完成后,添加tnsnames.ora文件(执行下述语句会自动新增文件)
vi /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora
tnsnames.ora文件内容格式为
oracletest=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
host为oracle服务端的ip地址,port为oracle监听端口(默认1521),service_name为数据库实例名
网上有人说需要创建/usr/lib/oracle/11.2/client64/network/admin/sqlnet.ora文件,但是我没有创建也不影响。
设置环境变量,便于后续测试odbc功能,永久生效则编辑~/.bashrc
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
赋权、建立连接关系:
chmod +x /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
cd /usr/lib64/
ln -s libodbcinst.so.2.0.0 libodbcinst.so.1
配置odbcinst.ini文件(安装unixODBC时自动会提供该文件)信息:
vi /etc/odbcinst.ini
#打开文件编辑后,在最后新增下面的内容
[OracleDriver]
Description = ODBC for Oracle
Driver = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
配置odbc.ini文件(首次可能没有该文件,直接新增即可):
vi /etc/odbc.ini
#打开文件编辑后,增加下面的配置
[odbctest]
Description = Oracle Test
Driver = OracleDriver
ServerName = oracletest
UserID = zabbix
Password = zabbix
其中odbctest为zabbix的web前台中监控项的唯一表示,也是后续测试的唯一标识
Description为描述,可有可无
Driver对应odbcinst.ini中的[]中的段名
ServerName对应tnsnames.ora中的dsn唯一标识名
UserID为数据库用户名(可选,前台监控也会传,测试完成后可以删除)
Password为数据库密码(可选,前台监控也会传,测试完成后可以删除)
以上两个文件位置以odbcinst -j显示的为准。
先检测驱动的依赖是否正常:
ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
#如果结果中出现not found字样,则表示依赖有问题,先修复,修复方式百度即可
通过isql测试odbc是否正常(isql工具odbc自带,直接使用即可,最好在zabbix_server的启动用户下进行测试):
isql -v odbctest
可以通过sqlplus 用户名/密码@dsn的方式测试tnsoranames的配置情况
完成所有配置后重启zabbix_server服务
创建监控项,选择Database monitor(因此不支持主动模式),key中的参数是触发器需要使用的唯一标识,当前可以随便填一个。则是odbc.ini文件中配置的[]中的段内容,本例中应当为odbctest。
isql测试正常,但是web前端监控失败,提示TNS:could not resolve the connect identifier specified或者can‘t open libsqora.so.11.1等
解决方式:首先确认在zabbix_server启动用户(默认为zabbix)下使用isql功能测试正常,再检查依赖关系正常(上述有提到)不要启用selinux功能,最后检查程序环境变量,先查看当前zabbix_server服务所使用的环境变量是否包含上述的所有oracle相关环境变量。
#查询zabbix服务的进程号
ps -aux |grep zabbix_server.conf
#我本机查询结果为31521
cat /proc/31521/environ
如果发现没有oracle相关环境变量,则去/etc/sysconfig/zabbix-server中增加配置
vi /etc/sysconfig/zabbix-server
增加上图中内容,注意不需要加export,直接按照对应路径赋值即可,保存后重启zabbix_server服务。再去查看程序所使用的环境变量是否有这些,存在时即可解决。
ps1:还有更简单的配置方式,可以直接越过odbcinst.ini文件,仅仅只配置odbc.ini即可。
ps2:如果环境变量实在有问题,无法识别tns,也可在ServerName直接配置全部的连接信息,这样就不需要解析查找tnsnames.ora文件内容了
本文出处 https://blog.csdn.net/qq_35706916/article/details/93211104
转载请注明出处