zabbix监控orace
orabix是目前网络上能找到用zabbix监控oracle最多的文章。orabix项目很久没更新,监控得到的数据不甚满意,没有再深入的去了解。
之前有过用shell写脚本在zabbix上监控业务数据的经历,第一想法就是 zabbix-agent Userparameter 自定义监控。鉴于目前python在运维方面很火,用python自己写一个脚本去抓取数据,通过zabbix-agent Userparameter调用脚本获取oracle的数据,这样的方案一来可以提升一下自己写python的能力,二来需要监控那些数据可以自己定义更灵活。
开始之前先看看github上别人怎么做的,找到pyora(https://github.com/danilochilene/Pyora)这个项目,不用自己从头开始了,先安装上,做适当的扩展就可以。
一、监控部署思路
1、pyora方案框架
pyora 通过在配置主机时添加宏保存数据库服务器IP,用户,密码,数据库名作为参数传给脚本,只需要在一个地方部署,添加主机的时候用宏传递这些参数实现一次部署监控多数据库。
2、部署方式1(作为zabbix服务器扩展脚本运行)
将pyora放入 zabbix externalscripts文件夹(/usr/lib/zabbix/externalscripts/)
3、部署方式2(作为zabbix-agent 用户扩展运行)
在zabbix-agent 配置文件添加一行:
UserParameter=pyora[*],/usr/bin/python /usr/lib/zabbix/externalscripts/pyora --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8
二、安装步骤
1、准备环境:centos7、zabbix4.0
2、安装cx_Oracle、oracle 客户端
用rpm包安装就可以,安装完成后添加环境变量,cx_Oracle,oracle版本注意要同32位或者64位
rpm下载地址,共三个安装包,都要下载安装:
cx_Oracle x86_64:
https://jaist.dl.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm
oracle_instantclient:
https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-devel-19.5.0.0.0-1.x86_64.rpm
export ORACLE_HOME=/usr/lib/oracle/19.5/client64/ export TNS_ADMIN=$ORACLE_HOME export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
3、下载pyora
下载地址:https://codeload.github.com/bicofino/Pyora/zip/master
解压得到pyora.py文件和zabbix-template文件夹
4、创建oracle数据库用于监控的用户zabbix
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;
5、执行脚本验证:
./pyora.py --username zabbix --password 123456 --address 192.168.111.170 --database sjtools show_tablespaces
6、zabbix联调,前面有提到,zabbix调用脚本有两个方案,这两个方案调用方式不一样,模版监控项读取的方式不一样,所以模版也不同。两个方案选一个就可以,如果是zabbix 4.0 建议用下面的方案一。
6.1、方案一:zabbix服务器扩展脚本
a、导入模版 Pyora_ExternalCheck_4.0
得到 Custom - Service - Oracle 模版
打开模版可以看到监控项键值格式 pyora["--address","{HOST.CONN}","--username","{$USERNAME}","--password","{$PASSWORD}","--database","{$DATABASE}",bufbusywaits]
用到四个宏:
{HOST.CONN} 创建主机时主机的地址,不需要单独创建
{$USERNAME} oracle数据库拥有监控的用户名,用前面创建的zabbbix,需要在主机的宏里添加
{$PASSWORD} oracle数据库用户的密码
{$DATABASE} 数据库名称
b、将pyora.py文件放入 zabbix 服务器的externalscripts文件夹(/usr/lib/zabbix/externalscripts/)并改名为pyora,确保文件有执行权限。完成后用安装步骤中的方法验证脚本是否正常运行。
c、添加主机
主机IP填数据库的IP,模版链接刚导入的 Custom - Service - Oracle 模版,添加三个宏。因为脚本是在服务器端执行的,如果不需要监控其他项目oracle服务器可以不安装zabbix-agent。
6.2、zabbix-agent调用方案用Pyora_ExternalCheck.xml 模板
a、导入模版 Pyora_ExternalCheck 得到 Custom - Service - Oracle 模版(同方案一,模版文件不一样)
打开模版可以看到监控项键值格式 pyora[{$USERNAME},{$PASSWORD},{$ADDRESS},{$DATABASE},bufbusywaits] 和方案一读取方式是不一样的。
用到四个宏:
{$ADDRESS} 数据库服务器IP
{$USERNAME} oracle数据库拥有监控的用户名,用前面创建的zabbbix,需要在主机的宏里添加
{$PASSWORD} oracle数据库用户的密码
{$DATABASE} 数据库名称
注:这个模版导入后在zabbix4.0不能直接使用,默认监控类型为外部检查需要将类型改为zabbix客户端,4.0之前不知道支不支持。
b、修改zabbix_agent.conf
这个方案脚本是zabbix服务器通过zabbix-agent去调用pyora脚本获取数据,需要zabbix-agent配合。在zabbix-agent配置文件最后添加一行。因为我测试的两个方案是在zabbix服务器上做的,所以脚本文件我直接指向方案一的位置,这个方案的脚本位置(/usr/lib/zabbix/externalscripts/pyora)没有要求,只要zabbix-agent能调用到就可以,自己想放哪里都可以。
UserParameter=pyora[*],/usr/bin/python /usr/lib/zabbix/externalscripts/pyora --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8
验证安装:
重启zabbix-agent后在服务器端执行
zabbix_get -s 127.0.0.1 -k"pyora[zabbix,123456,192.168.111.170,sjtools,show_tablespaces]"
c、添加主机
主机IP填脚本所在服务器的IP(必须有zabbix-agent),模版链接刚导入的 Custom - Service - Oracle 模版,添加四个宏。
三、报错
1、import cx_Oracle出错
- a、检查环境变量有没有设置对,安装客户端版本不一样路径会不一样
- b、oracle客户端有没有安装
- c、cx_Oracle有没有安装
- d、方案二、直接执行脚本没问题,在zabbix-get 时报错,在zabbix-agent启动脚本/usr/lib/systemd/system/zabbix-agent.service增加环境变量(注意自己安装的路径)Environment="LD_LIBRARY_PATH=/usr/lib/oracle/19.5/client64/lib"
- e、方案一报错参照方案二修改zabbix-server的启动脚本 /usr/lib/systemd/system/zabbix-agent.service
systemctl daemon-reload --重载脚本 systemctl restart zabbix-agent.service --重启zabbix-agent
2、方案二模版获取不到数据
将模版监控项类型‘外部检查’改为‘zabbix客户端’
三、效果
参考资料:
http://bicofino.io/2013/12/09/monitoring-oracle-with-zabbix/
https://blog.51cto.com/xianglinhu/1699725 zabbix使用pyora监控oracle数据库
https://blog.csdn.net/li_xiqing2008/article/details/80472161 systemctl 环境变量