Zabbix利用orabbix插件监控Oracle数据库

一.jdk的安装(Orabbix Server)

1.软件解压,放到固定位置

1 2 tar  zxf jdk-8u51-linux-x64. tar .gz mv  jdk1.8.0_51/  /usr/local/

2.设置系统变量,编辑/etc/profile在末尾增加

1 2 3 export  JAVA_HOME= /usr/local/jdk1 .8.0_51 exportCLASSPATH=$JAVA_HOME /lib/dt .jar:$JAVA_HOME /lib/tools .jar export  PATH=$JAVA_HOME /bin :$PATH

3.执行一下/etc/profile使之生效

1 source  /etc/profile

二.Oracle中增加监控用户,并设置相应的用户权限,这一步在sqlplus中完成(ORACLE服务器)

1 2 3 4 5 6 7 8 su - oracle sqlplus /  as  sysdba SQL> CREATE  USER  zabbix IDENTIFIED  BY  zabbix_password DEFAULT  TABLESPACE USERS TEMPORARY  TABLESPACE  TEMP PROFILE  DEFAULT ACCOUNT UNLOCK;

赋予zabbix用户对应权限

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 GRANT  ALTER  SESSION  TO  ZABBIX; GRANT  CREATE  SESSION  TO  ZABBIX; GRANT  CONNECT  TO  ZABBIX; ALTER  USER  ZABBIX  DEFAULT  ROLE  ALL ; GRANT  SELECT  ON  V_$INSTANCE  TO  ZABBIX; GRANT  SELECT  ON  DBA_USERS  TO  ZABBIX; GRANT  SELECT  ON  V_$LOG_HISTORY  TO  ZABBIX; GRANT  SELECT  ON  V_$LOG  TO  ZABBIX; GRANT  SELECT  ON  V_$PARAMETER  TO  ZABBIX; GRANT  SELECT  ON  SYS.DBA_AUDIT_SESSION  TO  ZABBIX; GRANT  SELECT  ON  V_$LOCK  TO  ZABBIX; GRANT  SELECT  ON  DBA_REGISTRY  TO  ZABBIX; GRANT  SELECT  ON  V_$LIBRARYCACHE  TO  ZABBIX; GRANT  SELECT  ON  V_$SYSSTAT  TO  ZABBIX; GRANT  SELECT  ON  V_$PARAMETER  TO  ZABBIX; GRANT  SELECT  ON  V_$LATCH  TO  ZABBIX; GRANT  SELECT  ON  V_$PGASTAT  TO  ZABBIX; GRANT  SELECT  ON  V_$SGASTAT  TO  ZABBIX; GRANT  SELECT  ON  V_$LIBRARYCACHE  TO  ZABBIX; GRANT  SELECT  ON  V_$PROCESS  TO  ZABBIX; GRANT  SELECT  ON  DBA_DATA_FILES  TO  ZABBIX; GRANT  SELECT  ON  DBA_TEMP_FILES  TO  ZABBIX; GRANT  SELECT  ON  DBA_FREE_SPACE  TO  ZABBIX; GRANT  SELECT  ON  V_$SYSTEM_EVENT  TO  ZABBIX; GRANT  SELECT  ON  V_$locked_object  TO  ZABBIX; GRANT  SELECT  ON  dba_objects  TO  ZABBIX; GRANT  SELECT  ON  dba_tablespaces  TO  ZABBIX; GRANT  SELECT  ON  v_$session  TO  ZABBIX;

以上有部分小写的是我对其他文章的增加部分

如果数据库是11G,还要执行如下部分:

1 2 3 exec  dbms_network_acl_admin.create_acl(acl =>  ‘resolve.xml‘ ,description=>  ‘resolve acl‘ , principal => ‘ZABBIX‘ , is_grant =>  true , privilege =>  ‘resolve‘ ); exec  dbms_network_acl_admin.assign_acl(acl =>  ‘resolve.xml‘ , host => ‘*‘ ); commit ;

三.安装orabbix(Orabbix Server)

其实orabbix只需要安装在一台服务器即可,我就选择安装在Zabbix Server上,当然上面的jdk是为orabbix服务的,因为orabbix就是一个oracle客户端去查找oracle中的数据,然后传给zabbix.

1 2 3 4 5 6 7 8 9 10 mkdir  /usr/local/orabbix cd  /usr/local/orabbix wget orabbix http: //nchc .dl.sourceforge.net /project/orabbix/orabbix-1 .2.3.zip unzip orabbix-1.2.3.zip chmod  +x run.sh cp  init.d /orabbix  /etc/init .d/ sed  -i  ‘s#/opt/orabbix#orabbix=/usr/local/orabbix#g‘  /etc/init .d /orabbix chmod  +x  /etc/init .d /orabbix sed  -i  ‘s#java#/usr/local/jdk1.8.0_51/bin/java#g‘  /usr/local/orabbix/run .sh #用以解决/usr/local/orabbix/run.sh: line 2: java: command not found这个错误

配置orabbix,进入/usr/local/orabbix/conf/目录

cd /usr/local/orabbix/conf

cp config.props.sample config.props

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ZabbixServerList=ZabbixServer ZabbixServer.Address=192.168.0.81 ZabbixServer.Port=10051 OrabbixDaemon.PidFile=. /logs/orabbix .pid OrabbixDaemon.Sleep=300 OrabbixDaemon.MaxThreadNumber=100 DatabaseList=tpy100 DatabaseList.MaxActive=10 DatabaseList.MaxWait=100 DatabaseList.MaxIdle=1 tpy100.Url=jdbc:oracle:thin:@192.168.0.209:1521:orcl tpy100.User=ZABBIX tpy100.Password=zabbix tpy100.MaxActive=10 tpy100.MaxWait=100 tpy100.MaxIdle=1 tpy100.QueryListFile=. /conf/query .props

需要注意的是DatabaseList=CRMDB指的是被监控服务器的名称,该名称要和zabbixserver界面中的机器名称保持一致,该配置文件中后续所引用的设定都以该名称为准。
CRMDB.Url=jdbc:oracle:thin:@192.168.0.209:1521:orcl 
指定的是被监控服务器的连接信息(例如采用jdbc的联接方式,服务器地址是192.168.0.209oracle的端口是1521orcl指的是数据库的实例)

默认按照上面的步骤就差不多了,但是你导入模板之后就会发现监控项目不全,如dbsize及dbfilesize这些类目,orabbix默认情况下未开启数据库大小,需要配置query.props

编辑 /usr/local/orabbix/conf/query.props文件

在QueryList=类目下增加dbfilesize,dbsize,如图所示

然后在该文件的末尾添加

1 2 3 4 5 6 7 8 dbfilesize.Query= select  to_char( sum (bytes /1024/1024/10 ),  ‘FM99999999999999990‘ ) retvalue from dba_data_files   dbsize.Query=SELECT to_char( sum (  NVL(a.bytes /1024/1024/10  - NVL(f.bytes /1024/1024/10 , 0), 0)),  ‘FM99999999999999990‘ ) retvalue \ FROM sys.dba_tablespaces d, \ ( select  tablespace_name,  sum (bytes) bytes from dba_data_files group by tablespace_name) a, \ ( select  tablespace_name,  sum (bytes) bytes from dba_free_space group by tablespace_name) f \ WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) \ AND NOT (d.extent_management like  ‘LOCAL‘  AND d.contents like  ‘TEMPORARY‘ )

用以定义查询dbfilesize,dbsize的SQL语句

这个时候就可以启动orabbix服务了

service orabbix start

检查服务ps aux |grep orabbix|wc -l 如果等于2就说明启动那个成功了,启动成功不一定就是没问题了,这个时候需要查看日志

/usr/local/orabbix/logs/orabbix.log

从以上可以看到我很多数据是抓不到的,都是因为权限的问题找不到表,于是就需要利用query.props

/usr/local/orabbix/conf/query.props

找到对应的表,如这里找archive的表

如果没有权限的话 就需要用DBA的权限进数据库给予权限

GRANT SELECT ON v_$LOG TO ZABBIX;

即可