Zabbix 5.0通过orabbix监控Oracle 11g
0x00 环境
zabbix 5.0.4
orabbix 1.2.3
oracle 11g 11.2.0.4
0x01 前提条件
zabbix-server需要安装jdk 版本1.8即可
orabbix安装在zabbix-server端
oracle端安装zabbix agent
#安装jdk (略) #安装orabbix 解压 unzip orabbix-1.2.3.zip mv orabbix-1.2.3 /usr/local/orabbix cp /usr/local/orabbix/conf/config.props.sample /usr/local/orabbix/conf/config.props cp /usr/local/orabbix/init.d/orabbix /etc/init.d/orabbix chmod +x /etc/init.d/orabbix chmod +x /usr/local/orabbix/run.sh
修改配置,指定zabbix server的ip地址,端口,数据库清单等
vi /usr/local/orabbix/conf/config.props
#关键配置
ZabbixServerList=zabbix
ZabbixServer1.Address=zabbix服务器地址
ZabbixServer1.Port=10051 #ZABBIX端口 默认10051
DatabaseList=数据库IP地址 #多个以逗号隔开
数据库IP地址.Url=jdbc:oracle:thin:@数据库IP地址:端口:<SID>
数据库IP地址.User=zabbix #oracle数据库用户 需要在oracle端对应新建
数据库IP地址.Password=xxxx #oracle数据库用户密码
#Those values are optionals if not specified Orabbix is going to use the general values
数据库IP地址.MaxActive=10
数据库IP地址.MaxWait=100
数据库IP地址.MaxIdle=1
数据库IP地址.QueryListFile=./conf/query.props
#其他数据库 DB2需要添加到DatabaseList列表中,配置如上
#DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2
#DB2.User=zabbix
#DB2.Password=zabbix_password
#DB2.QueryListFile=./conf/query.props
#DB3.Url=jdbc:oracle:thin:@server3.domain.example.com:<LISTENER_PORT>:DB3
#DB3.User=zabbix
#DB3.Password=zabbix_password
#DB3.QueryListFile=./conf/query.props
#保存退出
0x02 添加ojdbc8.jar驱动,删除jdbc6.jar驱动
ojdbc8.jar驱动链接:https://pan.baidu.com/s/1hEABz4ww-AoiMgso6H1Xhw
提取码:QGS1
mv ojdbc8.jar /usr/local/orabbix/lib cd /usr/local/orabbix/lib rm -f ojdbc6.jra chown -Rf root.root ojdbc8.jar chmod 644 ojdbc8.jar
orabbix默认是不支持zabbix4+的,因为orabbix在传输数据的时候在数据包中没有加 Header包头 ,在zabbix4之前版本中zabbix server和zabbix proxy收到的数据包允许不加 Header包头,所以orabbix在zabbix4.0版本之前可以游刃有余的对orabbix监控,但是在zabbix4.0之后由于zabbix官方删除了对纯本文协议的支持(无Header)的支持
0x03 编译orabbix 启动orabbix
#git orabbix源码到本地目录 cd /usr/local/src git clone https://github.com/snickerjp/orabbix.git #git超时自己找方法即可 cd orabbix/ #拷贝原来的orabbix zip包到src/orabbix目录下 cp -rf orabbix-1.2.3.zip /usr/local/src/orabbix cd /usr/local/src/orabbix mkdir orabbix-1.2.3 unzip -o orabbix-1.2.3.zip -d orabbix-1.2.3 javac -cp "orabbix-1.2.3/orabbix-1.2.3.jar:orabbix-1.2.3/lib/*" com/smartmarmot/orabbix/Sender.java mkdir -p ./build cp orabbix-1.2.3/orabbix-1.2.3.jar ./build cd ./build jar -xvf orabbix-1.2.3.jar com cp ../com/smartmarmot/orabbix/Sender.class com/smartmarmot/orabbix/Sender.class jar -uf orabbix-1.2.3.jar com cp -rf orabbix-1.2.3.jar /usr/local/orabbix/orabbix-1.2.3.jar cd /usr/local/orabbix/ ./run.sh chkconfig --add orabbix chkconfig orabbix on systemctl start orabbix #如果报错,请修改run.sh或者 /etc/init.d/orabbix下的路径指向 #通过tail -f /usr/local/orabbix/logs/orabbix.log查看日志
模板文件存在于orabbix/template/下,下载下来导入zabbix server中,作为监控模板,这里不再赘述
需要注意的是,默认模板没有dbfilesize和dbsize大小的监控,修改配置文件增加即可
vi /usr/local/orabbix/conf/query.props #在QueryList后增加dbfilesize,dbsize,并且在该文件末尾增加SQL查询语句 #如下 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')
0x04 oracle端配置
新增监控用户zabbix
su - oracle sqlplus / as sysdba sql>create user zabbix identified by 'zabbix' default tablespace system temporary tablespace temp profile default account unlock; 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;
针对oracle11g版本还需要执行以下语句:
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'监控用户名', is_grant => true, privilege => 'resolve'); exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
commit;
oracle防火墙放行oracle端口
zabbix 添加oracle主机和模板,获取数据即可
注意:orabbix默认对于表空间的监控在小于93%的时候是没有实时数据的,当表空间的占用率超过93%时,会触发告警,这个阈值可以通过修改query.props中的SQL语句。
数据库没有数据响应 | 数据库无数据响应 | High | Oracle:alive |
数据库实例不可用 | 数据库实例是否可用 | High | Oracle:alive |
数据库中存在锁 | 数据库中存在锁 | High | Oracle:locks |
session使用量过高 | session过多,比如session超过80% | High | (Oracle:session.last(0)}*100/Oracle:maxsession.last(0)})>80 |
Process 使用量过高 | process过多,比如process超过80% | High | (Oracle:procnum.last(0)}*100/Oracle:maxprocs.last(0)})>80 |
异常信息的通用审计 | 异常信息的审计,比如密码错误次数过多 | High | Oracle:audit |
active session数过高 | active session数 | High | Oracle:session_active |
用户异常锁定 | 用户密码过期或者错误登录次数过多账户锁定 | Warning | Oracle:users_locked |
表空间使用率过高 | 表空间使用率超过90% | Warning | Oracle:showtsps |
归档日志量过高 | 归档日志量 | Warning | Oracle:archive |
正常运行时间 | 正常运行情况 | Average | Oracle:uptime |
PGA 使用量过高 | PGA使用率过高 | Average | (Oracle:pga.last(0)}*100/Oracle:pga_aggregate_target.last(0)})>90 |
缓存命中率不足 | 缓存命中率不足 | Information | Oracle:hitratio_table_proc.avg(60)}<50|Oracle:hitratio_trigger.avg(60)}<50|Oracle:hitratio_sqlarea.avg(60)}<50|Oracle:hitratio_body.avg(60)}<50 |