Z.S.K.'s Records

zabbix学习(利用python实现对oracle实时监控)

Pyora介绍

首先要介绍下:cx_Oracle ,这是一个使用 python 开发的 python连接Oracle数据库的驱动,有了这个驱动,python 就可以与Oracle 交互了

Pyora 就是利用 cx_Oracle 完成与Oracle的连接, 然后利用 sql 来获取 Oracle 数据库的状态,达到监控目的的

所以要安装 Pyora ,首先就得安装 数据库驱动: cx_Oracle,然后在安装 Pyora ,最后Zabbix_agentd 利用Userparameter,调用Pyora 脚本来 获取监控数据

有了Pyora后,监控就变成了这样了,我们不需要在数据库上 安装任何软件,只需要找一个能部署abbix_agent的节点,而这个节点最好啥都不要运行,专用来搜集监控 数据库,从而这个节点就成了 监控数据库的 中心节点.

Oracleclient11g 安装

  • oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-jdbc-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
1
2
yum install oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
#其它的安装类似如上命令...

填加tnsanme信息

创建文件夹nework/admin,整个路径如:/usr/lib/oracle/12.1/client64/network/admin 加入tnsnames.ora

1
2
3
4
5
6
7
8
9
10
shell
#tnames.ora Network Configuration File: /opt/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
#Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.14.31)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
))

配置环境信息

请打开 /etc/profile 文件,在这个文件里面追加如下内容:

1
2
3
4
5
6
7
8
9
10
export ORACLE_BASE=/usr/lib/oracle/11.2 
export ORACLE_HOME=$ORACLE_BASE/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export SQLPATH=/usr/lib/oracle/11.2/client64/network/admin
export TNS_ADMIN=/home/oracle/network/admin
#运行 #> source /etc/profile 命令使该profile立即生效
#再次运行vi .bash_profile ,加入下面这个:
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=/usr/local/lib:$ORACLE_HOME/lib:/usr/local/python27/lib:$LD_LIBRARY_PATH

验证是否登陆成功

1
sqlplus xxx/[email protected]:1521/orcl

Python安装

系统自带的Python 2.6.6 对 Pyora 支持不好 编译python27时加上-enable-shared 否则不会生成libpython2.7.so.1.0的动态链接库,不加默认生成libpython2.7.so.a的静态链接库

1
2
./configure --prefix=/usr/local/python27 -enable-shared 
make && make install

没有报错Python安装成功
如果启动python时报以下错误:

zabbix-python-oracle-1

解决如下:

zabbix-python-oracle-2

cx_Oracle安装

zabbix-python-oracle-3

Pyora 安装

离线安装Pyora时需要提前安装好setuptools及 argparse模块

写入下面的参数到 /usr/local/zabbix/etc/zabbix_agentd.conf 并重启 zabbix_agent 读取新配置 ​

1
UserParameter=pyora[*],/usr/local/python27 /home/zabbix/scripts/pyora.py --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8

在Pyora 的包里,别人已经为我们做好了模板,直接导入模板:zabbix-template/Pyora.xml即可

导入模板后,需要稍作修改,以适用于我们 自己的监控需求,你监控那个Oracle 数据库,只需在 模板级别的宏里面,知道其相应信息,让后将模板 套到 该zabbix_agent上 ,这样zabbix_agent 就可以调用脚本来完成监控 远程的数据库服务器了

填入宏前,要手动调试,看看 Python脚本是否能 连接数据库正常 获取数据,以及zabbix server 能否正常通信。

zbbix_agent 端:

1
/usr/local/python27/bin/python /usr/local/zabbix/shared/exectscripts/pyora.py --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8

zabbix-python-oracle-5

zabbix_server端:

zabbix-python-oracle-4

这些内容 填在 模板 宏变量出:例如

zabbix-python-oracle-6

监控的结果:

zabbix-python-oracle-7

最后, Oracle 表空间的 自动发现,大概需要1个小时 左右,所以 请耐心等待 ,而 脚本 也能 根据 自己需求 ,自定义一些 SQL 调用

不错一个工具 ,至少比 那些zabbix 监控 Oracle 插件 方便多了.

zabbix使用pyora的工作原理

通过在zabbix_agentd.conf中加入UserParameter=, ,key必须整个系统唯一,配置好之后,重启客户端

1
UserParameter=pyora[*],/usr/local/python27/python /home/zabbix/scripts/pyora.py --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8

在zabbix GUI中设定主机宏来指定zabbix_agentd调用pyora时运行时需要的参数信息,zabbix基于宏保存预设的文本模式,并在调用时将其替换为其中的文本,可理解为全局变量,最大可返回512k数据,

带*参数的UserParameter可批量监控多个同类监控项

如:

1
UserParameter=memory.usage[*],/bin/cat  /proc/meminfo | awk '/^$1:/{print $2}'

server端的调用的key为memory.usage[MemFree] ,获得被监控主机剩余内存的数值

server端的调用的key为memory.usage[MemTotal} ,获得被监控主机总内存的数值

UserParameter 详情请参考这里

参考文章:

转载请注明出处https://izsk.me


Z.S.K. wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?