前段时间使用Orabbix监控oracle数据库,发现能够实现对oracel数据库实行监控,可是最近部署Orabbix监控oracle数据库,发现始终没法获取到数据库的内容。。。。。。因为Orabbix是基于java实现的,使用的是jdbc链接oracle数据库,获取到的值传递给zabbix捕捉器来捕捉,这个过程我不是很熟悉。。。。。。始终没法调试出图来。。。最后终于放弃,寻找Orabbix的替代品。在zabbix官网找了一遍,发现使用python实现的pyora这个脚本还不错,最大的优点就是可以自定义本身想监控的相关参数,只须要修改脚本,在里面添加相关函数就行。pyora是经过python使用python的一个组件cx_Oracle来获取的,获取到的数据传递给zabbix的agent,从而获取到相关监控数据,这种方式比较简单,也比较容易扩展。pyora的缺点就是自己提供的监控item比较少,并且提供的模板是一个半成品模板,须要本身根据须要设计相应的模板,从而达到监控的目的。整体来讲,pyora的特色就是简单,开源,易扩展,可是总体作的不是很完整。java
好了,每篇博客的开头例行废话说完了,开始进入正题吧。python
首先,咱们须要下载pyora,我是在zabbix官网上面找到的github的连接,连接在这https://github.com/bicofino/Pyora 在本文的末尾我也将会将本文使用的一些工具什么的打包放在附件中供你们下载。linux
然而python须要安装cx_Oracle这个组件才能链接到数据库,安装cx_Oracle这个组件比较麻烦,我搞了差很少两个多小时才搞定,开始使用源码安装,结果安装不上去。。。一直解决不了报错。。。因而去找了rpm包来安装,因为我这里的oracle数据库的python版本是2.6的,因此下载了2.6对应的版本,而且这里支持的最新的oracle也只有11g,而我这里使用的是12c,当时还担忧了很久,怕没法使用,后来证明11g的rpm包也是能够在12c的oracle数据库上面使用的,连接在这http://sourceforge.net/projects/cx-oracle/files/5.1.2/cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm/download 你们能够根据本身的须要下载相应的rpm包。git
还须要下载两个python的组件,一个是argparse,还有一个是setuptools这两个包我都是到Python官网下载的,各位也能够去官网下载,固然我会在附件中打包上这两个附件目前的最新版。首先安装setuptools,而后再安装argparse,安装方式是使用源码安装,解压后进入目录,使用python setup.py install就能够安装了。github
好了,前期准备工做作完了,接下来就须要安装cx_Oracle了,首先,在root用户下的.bashrc中添加oracle的环境变量,不然将致使没法使用cx_Oracle模块,下面是在用户中添加的环境变量:web
tail -6 .bashrc # User specific aliases and functions export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/dbhome export TNS_ADMIN=$ORACLE_HOME/network/admin export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
添加好环境变量以后,须要使其当即生效,使用命令source .bashrc来使其生效,注意export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib这条命令,刚开始的时候我没有添加后面的lib的环境变量,致使安装好cx_Oracle组件以后仍是没法import这个组件,报错信息以下:sql
error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
后来,将环境变量中添加了lib库该报错就消失了。接下来就是安装cx_Oracle组建了,使用rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm就能够安装了,安装好后使用下面的操做看是否可以正常的import,下面是个人操做步骤,若是你的和个人同样没有异常输出,那么就没问题的:
数据库
python Python 2.6.6 (r266:84292, Jan 22 2014, 01:49:05) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cx_Oracle >>>
安装好后就可使用pyora脚原本获取值了,(PS:对了,在这以前,须要在oracle数据库中建立相应的监控用户)关于oracle数据库中添加相应的监控用户权限属于DBA的范畴了,我这里只会贴出一些参考的权限配置,相关配置各位能够和公司的DBA协商配置:json
CREATE USER ZABBIX IDENTIFIED BY 123456 DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; GRANT CONNECT TO ZABBIX; GRANT RESOURCE TO ZABBIX; ALTER USER ZABBIX DEFAULT ROLE ALL; GRANT SELECT ANY TABLE TO ZABBIX; GRANT CREATE SESSION TO ZABBIX; GRANT SELECT ANY DICTIONARY TO ZABBIX; GRANT UNLIMITED TABLESPACE TO ZABBIX; GRANT SELECT ANY DICTIONARY TO ZABBIX;
配置好环境后就可使用pyora脚本实现监控oracle了,接下来须要执行pyora脚原本进行测试了。bash
在下载的pyora压缩包中含有pyora.py脚本,将其上传至客户端服务器,而后使用python pyora.py --username zabbix --password 123456 --address 127.0.0.1 --database xxx show_users来测试是否可以获取到正常数据,下面是我执行的结果:
{"data": [{"{#DBUSER}": "ANONYMOUS"}, {"{#DBUSER}": "APPQOSSYS"}, {"{#DBUSER}": "ASYNC"}, {"{#DBUSER}": "AUDSYS"}, {"{#DBUSER}": "DBSNMP"}, {"{#DBUSER}": "DIP"}, {"{#DBUSER}": "GSMADMIN_INTERNAL"}, {"{#DBUSER}": "GSMCATUSER"}, {"{#DBUSER}": "GSMUSER"}, {"{#DBUSER}": "OJVMSYS"}, {"{#DBUSER}": "ORACLE_OCM"}, {"{#DBUSER}": "OUTLN"}, {"{#DBUSER}": "SYNC"}, {"{#DBUSER}": "SYS"}, {"{#DBUSER}": "SYSBACKUP"}, {"{#DBUSER}": "SYSDG"}, {"{#DBUSER}": "SYSKM"}, {"{#DBUSER}": "SYSTEM"}, {"{#DBUSER}": "WMSYS"}, {"{#DBUSER}": "XDB"}, {"{#DBUSER}": "XS$NULL"}, {"{#DBUSER}": "ZABBIX"}]}
获取的是json格式的数据,证实这个脚本是能够正常运行的,而后咱们须要建立zabbix用户,而后再安装agnetd(关于这部分我就很少介绍了,前面博客写了不少。)而后修改zabbix用户的环境变量,编辑zabbix用户家目录下的.bashrc将上面的环境变量添加进去并source .bashrc使环境变量生效。
以后再使用zabbix用户重复一次执行上面的获取数据的步骤,测试可以获取数据的话就说明没问题了,在agentd的配置文件中写入以下配置,以执行这个脚本获取到监控的数据:
tail -2 /home/zabbix/zabbix/etc/zabbix_agentd.conf UserParameter=pyora[*],/usr/bin/python /home/zabbix/zabbix/scripts/pyora.py --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8
保存后重启agentd,而后再在server端使用zabbix_get测试可否获取到数据,测试结果以下:
/opt/software/zabbix/bin/zabbix_get -s xx.xx.xx.xx -k"pyora[zabbix,123456,127.0.0.1,xxx,show_users]" {"data": [{"{#DBUSER}": "ANONYMOUS"}, {"{#DBUSER}": "APPQOSSYS"}, {"{#DBUSER}": "ASYNC"}, {"{#DBUSER}": "AUDSYS"}, {"{#DBUSER}": "DBSNMP"}, {"{#DBUSER}": "DIP"}, {"{#DBUSER}": "GSMADMIN_INTERNAL"}, {"{#DBUSER}": "GSMCATUSER"}, {"{#DBUSER}": "GSMUSER"}, {"{#DBUSER}": "OJVMSYS"}, {"{#DBUSER}": "ORACLE_OCM"}, {"{#DBUSER}": "OUTLN"}, {"{#DBUSER}": "SYNC"}, {"{#DBUSER}": "SYS"}, {"{#DBUSER}": "SYSBACKUP"}, {"{#DBUSER}": "SYSDG"}, {"{#DBUSER}": "SYSKM"}, {"{#DBUSER}": "SYSTEM"}, {"{#DBUSER}": "WMSYS"}, {"{#DBUSER}": "XDB"}, {"{#DBUSER}": "XS$NULL"}, {"{#DBUSER}": "ZABBIX"}]}
证实没有问题了,而后须要在zabbix_server的web端添加模板,这个模板在下载的pyora压缩包里面有一个半成品的模板,这个模板是个不完整的半成品,须要本身完成剩下的配置我这里稍后也会打包放上我这边进行部分修改后的模板上来。
添加主机并添加模板,这时候须要注意,由于这个模板中使用了宏变量,因此咱们在添加主机的时候须要设定相应的宏变量,下面是我设定宏变量的截图:
设定好宏以后,等待一段时间(ps:通常5到十分钟就可以正常的产生数据了),下面是获取到的监控数据的截图:
好了,至此,简单的oracle监控已经结束了,至于更多的监控需求,各位能够依据本身的需求进行适当的修改脚本,以达到各位的要求。