一. 服务端安装jdk
二. 创建oracle监控帐号,在oracle的sqlplus窗口里面执行
CREATE USER ZABBIX IDENTIFIED BY 123456 DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;
2 Roles for ZABBIX
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
5 System Privileges for ZABBIX
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;
如果使用的是oracle 11g,继续添加如下命令,开放ACL的访问控制,否则在监控的过程中有部份内容无法正常显示
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
1. 下载orabbix
wget https://nchc.dl.sourceforge.net/project/orabbix/orabbix-1.2.3.zip
2. 在 /opt 目录下新建一个orabbix目录:
建议在此目录下,如果放置其他目录稍后需要更改orabbix的启动文件orabbix,启动文件默认写在opt/orabbix目录下
midir-p /opt/orabbix
3. 解压安装文件
unzip orabbix-1.2.3.zip
4. 赋予权限
chmod -R a+x orabbix/
5. 通过/opt/orabbix/conf/config.props.sample文件创建一个config.props文件:
cp /opt/orabbix/conf/config.props.sample /opt/orabbix/conf/config.props
6. 编辑orabbix配置文件
vim /opt/orabbix/conf/config.props
ZabbixServerList=ZabbixServer1 #此处的ZabbixServer1与以下两行开头对应
ZabbixServer1.Address=192.168.11.48 #zabbixserver地址
ZabbixServer1.Port=10051 #zabbixserver的端口
#以上端口号为与Zabbix Server通讯的端口,我这里是将Orabbix与Zabbix装在同一台机器上的,
#如果不在同一台机器,那装Orabbix的机器需要先装Zabbix Agent,否则数据将无法传送到Zabbix Server。
OrabbixDaemon.PidFile=./logs/orabbix.pid
OrabbixDaemon.Sleep=300
OrabbixDaemon.MaxThreadNumber=100
DatabaseList=DB1 #数据库名(要与下面对应),多个数据库用逗号隔开
#1.等号后的名字可以自己任意取名,但在Zabbix中添加Oracle Host时,必须用你在此设定的名字,否则无法监测。
#2.以上等号后面的值修改后,在下面的数据库连接定义=处,也需要修改相应的名字;
DatabaseList.MaxActive=10
DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1
DB1.Url=jdbc:oracle:thin:@192.168.11.17:1521:ORCL
#1. 以上行开始的那个值,需要与之前DatabaseList后面的值保持一样。
#2. 192.168.11.17为Oracle服务器的地址,1521为TNS Port,ORCL为DB SID。
DB1.User=ZABBIX
DB1.Password=123456
DB1.MaxActive=10
DB1.MaxWait=100
DB1.MaxIdle=1
DB1.QueryListFile=./conf/query.props
#此句指定数据查询文件,可针对不同数据库,定制不同的查询文件,默认为./conf/query.props这个文件
7.启动程序
直接运行
/opt/orabbix/run.sh
把程序做成系统服务启动
cp /opt/orabbix/init.d/orabbix /etc/init.d/orabbix
systemctl start orabbix
设置开机启动
chkconfig --add orabbix
chkconfig orabbix on
查看启动的orabbix进程
ps aux |grep orabbix
systemctl status orabbix
四. 在zabbix上导入Oracle的模板
导入模版,模版放置在 /opt/orabbix/template 下
- Orabbix_export_full.xml 全部导入(图表 监控项 触发器)
- Orabbix_export_graphs.xml 图表
- Orabbix_export_items.xml 监控项
- Orabbix_export_triggers.xml 触发器
注意:如果导入错误,提示群组Template已存在,则新建Template_Oracle群组,并修改模板
修改Orabbix_export_full.xml
<group>Template</group>
修改为
<group>Template_Oracle</group>
五. 部分监测项没有数据的解决方法
获取Oracle DB Size和DB Files Size
默认的query.props文件内没有配置这两个选项的检测,需要手动加上
vim /opt/orabbix/conf/query.props
1. 在“QueryList=”的最后加上“,dbfilesize,dbsize”,注意要用逗号格开;
2. 另外加上,dbfilesize,dbsize的检测语句,如下:
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')
休改后结果如下:
QueryList=archive,audit,dbblockgets,dbconsistentgets,dbhitratio,dbphysicalread,dbversion,hitratio_body,hitratio_sqlarea,hitratio_table_proc, \
lio_current_read,locks,maxprocs,maxsession,miss_latch,pga_aggregate_target, pga,phio_datafile_reads,phio_datafile_writes,phio_redo_writes,pinhitratio_body,pinhitratio_sqlarea,pinhitratio_table-proc,pinhitratio_trigger, \pool_dict_cache,pool_free_mem,pool_lib_cache,pool_misc,pool_sql_area,procnum,session_active,session_inactive,session,session_system,sga_buffer_cache, \ sga_fixed,sga_java_pool,sga_large_pool,sga_log_buffer,sga_shared_pool,tbl_space,userconn,waits_controfileio,waits_directpath_read, \ waits_file_io,waits_latch,waits_logwrite,waits_multiblock_read,waits_singleblock_read,hitratio_trigger,lio_block_changes,lio_consistent_read,waits_other,
waits_sqlnet,users_locked,uptime,dbfilesize,dbsize
DataGuardPrimaryQueryList=dg_error,dg_sequence_number
DataGuardStandbyQueryList=dg_sequence_number_stby
RmanQueryList=rman_check_status
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')
获取 memory utilization
获取 memory utilization 需要在oracle所在系统上安装 zabbix_agentd ,并在主机上添加Template OS Windows监控模板,添加Template OS Windows模板会提示内存已经被监控
删除 Orabbix_export_full.xml 中内存相关
<item type="0" key="vm.memory.size[total]" value_type="3">...</item>
<graph name="Memory Utilization" width="900" height="200">...</graph>