监控oracle有很多方式,目前主要使用的是通过第三方软件orabbix,它是通过jdbc连到各个oracle数据库上去执行sql,效率还可以,只是目前有个新需求,有个业务监控返回结果必须含有中文,而orabbix中无法配置字符集 ,导致存放到zabbix中时就会乱码,所以只能换一种方式,采用自带的database monitor来监控。整个配置过程很简单,主要是记录下字符集的转换配置。
Linux安装oracle客户端
下载linux客户端rpm包
1 2 3 4 5 6 [root@localhost oracle linux client] total 54436 -rw-r--r-- 1 root root 54172532 Jul 23 16:30 oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm -rw-r--r-- 1 root root 612416 Jul 23 16:29 oracle-instantclient19.8-devel-19.8.0.0.0-1.x86_64.rpm -rw-r--r-- 1 root root 246760 Jul 23 16:29 oracle-instantclient19.8-odbc-19.8.0.0.0-1.x86_64.rpm -rw-r--r-- 1 root root 702872 Jul 23 16:29 oracle-instantclient19.8-sqlplus-19.8.0.0.0-1.x86_64.rpm
安装rpm包
1 rpm -ivh oracle-instantclient19.8 -*.rpm
安装完以后会生成对应的oracle目录/usr/lib/oracle/19.8/client64
新建tns目录
1 2 3 [root@zabbix-wh-proxy client64]# mkdir -p network/admintouch tnsnames.ora
设置环境变量
1 2 3 4 export ORACLE_HOME =/usr/lib/oracle/19.8/client64export LD_LIBRARY_PATH =$ORACLE_HOME /lib:/usr/lib64:$LD_LIBRARY_PATHexport TNS_ADMIN =$ORACLE_HOME /network/adminexport PATH =$PATH :$ORACLE_HOME/bin:$HOME/bin
Linux安装odbc
1 yum -y install unixODBC unixODBC-devel
配置文件主要为两个,/etc/odbc.ini
和/etc/odbcinst.ini
,后者配置驱动,前者配置数据库参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 cat /etc/odbcinst.ini [PostgreSQL]Description = ODBC for PostgreSQLDriver =/ usr/lib/psqlodbcw.soSetup =/ usr/lib/libodbcpsqlS.soDriver64 =/ usr/lib64/psqlodbcw.soSetup64 =/ usr/lib64/libodbcpsqlS.soFileUsage = 1 [MySQL]Description = ODBC for MySQLDriver =/ usr/lib/libmyodbc5.soSetup =/ usr/lib/libodbcmyS.soDriver64 =/ usr/lib64/libmyodbc5.soSetup64 =/ usr/lib64/libodbcmyS.soFileUsage = 1 [MySQL ODBC 8.0 Unicode Driver]Driver =/ usr/lib64/libmyodbc8w.soUsageCount = 1 [MySQL ODBC 8.0 ANSI Driver]Driver =/ usr/lib64/libmyodbc8a.soUsageCount = 1 [FreeTDS]Driver = /usr/lib64/libtdsodbc.so.0 [OracleDriver]Description = ODBC for OracleDriver = /usr/lib/oracle/19.8 /client64/lib/libsqora.so.19.1
添加oracle的驱动到末尾,driver指向lib路径
1 2 3 4 5 6 7 cat /etc/odbc.ini [test ] Driver = OracleDriver ServerName = 192.168.2.112:1521/pdb12c UserID = zabbix Password = zabbix
测试配置
1 2 3 4 5 6 7 8 9 10 isql test +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
这里很简单就配置完了,只需要在web端添加database monitor就可以了,odbc.ini里设置的test
就是唯一DSN
字符集问题
zabbix后台存放数据的库是mysql,是utf8字符集,在监控字符集为gbk的oracle时,会碰到一个问题,就是当sql返回结果含有中文时就会乱码,由于我之前所有的oracle监控都是通过orabbix来完成,对于这个问题始终无法解决。而通过odbc监控时,则可以通过修改odbc的配置来实现字符集的转换。
在odbc.ini里添加环境变量参数
1 DMEnvAttr = SQL_ATTR_UNIXODBC_ENVATTR= {NLS_LANG= SIMPLIFIED CHINESE.AL32UTF8}
然后重新执行sql,就可以得到正确的中文返回结果。