监控oracle有很多方式,目前主要使用的是通过第三方软件orabbix,它是通过jdbc连到各个oracle数据库上去执行sql,效率还可以,只是目前有个新需求,有个业务监控返回结果必须含有中文,而orabbix中无法配置字符集 ,导致存放到zabbix中时就会乱码,所以只能换一种方式,采用自带的database monitor来监控。整个配置过程很简单,主要是记录下字符集的转换配置。
Linux安装oracle客户端 下载linux客户端rpm包
1 2 3 4 5 6 [root@localhost oracle linux client]# ll 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/admin touch tnsnames.ora
设置环境变量
1 2 3 4 export ORACLE_HOME=/usr/lib/oracle/19.8/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
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 PostgreSQL Driver=/usr/lib/psqlodbcw.so Setup=/usr/lib/libodbcpsqlS.so Driver64=/usr/lib64/psqlodbcw.so Setup64=/usr/lib64/libodbcpsqlS.so FileUsage=1 [MySQL] Description=ODBC for MySQL Driver=/usr/lib/libmyodbc5.so Setup=/usr/lib/libodbcmyS.so Driver64=/usr/lib64/libmyodbc5.so Setup64=/usr/lib64/libodbcmyS.so FileUsage=1 [MySQL ODBC 8.0 Unicode Driver] Driver=/usr/lib64/libmyodbc8w.so UsageCount=1 [MySQL ODBC 8.0 ANSI Driver] Driver=/usr/lib64/libmyodbc8a.so UsageCount=1 [FreeTDS] Driver = /usr/lib64/libtdsodbc.so.0 [OracleDriver] Description= ODBC for Oracle Driver= /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,就可以得到正确的中文返回结果。