参考至http://www.smartmarmot.com/wiki/index.php?title=Orabbix#Requirements
产品说明
Orabbix是一个插件,它是与Zabbix 配合,对Oracle数据库提供多层监视、性能和可用性报告和度量,以及服务器性能指标。它提供了从大量Oracle实例获取数据的有效机制,并向Zabbix服务器提供监视和性能指标的信息。然后,您可以利用Zabbix的报告功能来收集所有数据,并为涉众提供图表和服务级别协议度量等分析。当前的发行版包含一组预定义的模板,这些模板结合了初始部署的警报和绘图功能。当然,你也可以根据自身需求和数据/监视需求来设计自己的监控。
它可以监控什么?
下面是一些orabbix监控的例子:
数据库的版本;
归档日志的趋势数据;
处于等待状态的事务(i.e Files I/O, single block read, multi-block read, direct path read, SQLNet Messages, Control file I/O, Log Write);
命中率((i.e Hit Ratio on Triggers, Tables/Procedures, SQL Area, Body);
逻辑I/O(Server performance on Logical I/O of: Current Read, Consistent Read, Block Change);
物理I/O(Redo Writes, Datafile Writes, Datafile Reads);
PGA;
SGA(In particular; Fixed Buffer, Java Pool, Large Pool, Log Buffer, Shared Poolm Buffer Cache);
共享池(Active Sessions, Inactive Sessions, System Sessions);
数据库大小/数据库文件大小(DBSize size of database really used space and of Filesize);
安装要求
zabbix server版本1.8以上;
Java Runtime Environment 6;
目前已知的成功测试了Oracle主机平台
RHEL5.X (CentOS 5.4 & 5.5)
Windows 2003 (with Java SE 1.6)
HP-UX 11.31
AIX 5.3
目前已知的测试Oracle版本
10g
10.2
注意:不需要为orabbix安装任何类型的客户端
假设
安装说明是基于对大多数 unix 部署(即RHEL / CentOS)的指令而创建的,如果你的环境比较特殊,需要做一些修改。
这个说明是基于俩台主机来的,一台zabbix服务器端,一台Oracle数据库。如果你打算监控zabbix服务器上的Oracle时,步骤是一样的,只需要对一些较小的连接信息进行修改。
这些步骤也包括你需要配置orabbix来监控一个新安装的或者安装配置好的Oracle数据库。安装步骤将为Zabbix用户提供所有表的访问权限,这将包括在执行时出现的任何用户表。如果你不希望Zabbix访问数据库中的特定表或资源,则需要根据要求设置拒绝Zabbix用户访问权限。详细信息请咨询您的DBA,因为这超出了这些说明的范围。
安装步骤(orabbix是安装在服务器端的)
在zabbix server 下载orabbix,地址:https://sourceforge.net/projects/orabbix/files/orabbix-1.2.3.zip/download 需要翻墙
解压到/opt/orabbix文件夹下; PS:可以是别的路径
复制/opt/orabbix/init.d/orabbix 到/etc/init.d/orabbix
给orabbix这个文件可执行权限;
/etc/init.d/orabbix
/opt/orabbix/run.sh
创建Oracle用户
为orabbix访问Oracle数据库创建一个用户(ZABBIX),可以使用一下命令:
CREATE USER ZABBIX
IDENTIFIED BY <REPLACE WITH PASSWORD>
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;
注意:
如果你想创建的这个用户权限最小,可以参看以下方案:
CREATE USER ZABBIX
IDENTIFIED BY
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT ALTER SESSION TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT CONNECT TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ON V_$INSTANCE TO ZABBIX;
GRANT SELECT ON DBA_USERS TO ZABBIX;
GRANT SELECT ON V_$LOG_HISTORY TO ZABBIX;
GRANT SELECT ON V_$PARAMETER TO ZABBIX;
GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO ZABBIX;
GRANT SELECT ON V_$LOCK TO ZABBIX;
GRANT SELECT ON DBA_REGISTRY TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$SYSSTAT TO ZABBIX;
GRANT SELECT ON V_$PARAMETER TO ZABBIX;
GRANT SELECT ON V_$LATCH TO ZABBIX;
GRANT SELECT ON V_$PGASTAT TO ZABBIX;
GRANT SELECT ON V_$SGASTAT TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$PROCESS TO ZABBIX;
GRANT SELECT ON DBA_DATA_FILES TO ZABBIX;
GRANT SELECT ON DBA_TEMP_FILES TO ZABBIX;
GRANT SELECT ON DBA_FREE_SPACE TO ZABBIX;
GRANT SELECT ON V_$SYSTEM_EVENT 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;
你可以运行以下命令来验证正确性:
select utl_inaddr.get_host_name('127.0.0.1') from dual;
(Redhat)将orabbix设置为开机自启动:
chkconfig --add orabbix
chkconfig --list #检查
在Zabbix中为您计划监视的DB实例创建一个主机条目,并导入在:/ opt/orabbix/ template中发现的模板
这一步可以参考zabbix官网:http://www.zabbix.com/documentation.php
orabbix配置文件
在/opt/orabbix/conf/ 目录下有个叫config.props.sample的文件,将这个文件复制并改名为config.props
]# mv config.props.sample config.props
配置文件如下:
#comma separed list of Zabbix servers
ZabbixServerList=ZabbixServer1,ZabbixServer2 #zabbixserver1、zabbixserver2定义zabbix服务器的名字,与下面的zabbixserver1和2对应
ZabbixServer1.Address=192.168.10.11 #上面定义的zabbixserver1的IP地址
ZabbixServer1.Port=10051 #zabbixserver1的端口
# ZabbixServer2.Address=IP_ADDRESS_OF_ZABBIX_SERVER #zabbixserver2默认是注销的,如果你有多个zabbixserver,选填这个
# ZabbixServer2.Port=PORT_OF_ZABBIX_SERVER
#pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid #Pid文件的位置
#frequency of item's refresh
OrabbixDaemon.Sleep=300 # 监控项的刷新间隔(不需修改)
#MaxThreadNumber should be >= than the number of your databases
OrabbixDaemon.MaxThreadNumber=100 #orabbix守护进程的最大线程数
#put here your databases in a comma separated list
DatabaseList=DB1,DB2,DB3 # 数据库列表(zabbix中的主机名必须用这个儿定义的名字)
#Configuration of Connection pool
#if not specified Orabbis is going to use default values (hardcoded)
#Maximum number of active connection inside pool
DatabaseList.MaxActive=10 # 连接池最大活动连接数(无需修改)
#The maximum number of milliseconds that the pool will wait
#(when there are no available connections) for a connection to be returned
#before throwing an exception, or <= 0 to wait indefinitely.
DatabaseList.MaxWait=100 #返回连接异常的等待时间,毫秒。可以定义为一个负值以表示不做限制
DatabaseList.MaxIdle=1 #最大空闲连接数,可以定义为一个负值以表示不做限制
#define here your connection string for each database
DB1.Url=jdbc:oracle:thin:@server.domain.example.com:<LISTENER_PORT>:DB1
DB1.User=zabbix
DB1.Password=9133
DB1是DatabaseList=DB1,DB2,DB3 上面这一项列出的名字
server.domain.example.com是你Oracle服务器的主机名或者IP地址(建议为IP地址)
<LISTENER_PORT>是你数据库的端口
DB1:是Oracle数据库的SID
下面的你在Oracle里创建的允许orabbix采集数据的账号和密码,DB1与上面保持一致
#Those values are optionals if not specified Orabbix is going to use the general values
DB1.MaxActive=10 #针对单独的数据库设置参数,上面的全局的,这个是单独的
DB1.MaxWait=100
DB1.MaxIdle=1
DB1.QueryListFile=./conf/query.props
DB2.Url=jdbc:oracle:thin:@server2.domain.example.com::DB2
DB2.User=zabbix
DB2.Password=zabbix_password
DB2.QueryListFile=./conf/query.props
DB3.Url=jdbc:oracle:thin:@server3.domain.example.com::DB3
DB3.User=zabbix
DB3.Password=zabbix_password
DB3.QueryListFile=./conf/query.props
配置文件补充
QueryListFile=/opt/orabbix/conf/query.props #查询文件的位置
<DBNAME>.QueryListFile=./confQueryTest.props #定义单个数据库的查询文件位置,可以使用相对路径
对于不同的数据库使用不同的查询文件,或者每个数据库都有一个查询文件池,这在不同的Oracle版本(如果有不同版本)或生产环境、测试环境、开发环境等不同环境下使用时有奇效。
<DB_NAME>.ExtraQueryListFile ==./confQueryTest_2.props
#官网是这样定义的:adds another custom query to the default query file.If there are duplicates the ExtraQueryListFile will override them
query.props查询文件
可以在这个文件中设置自定义查询项。比如你要监控公司一些业务逻辑之类的定制监控项
创建的每个查询必须有一个item名,必须是独一无二的。zabbix server会识别这个item,就像其他item一样,不能冲突。
QueryList=queryName1,queryName2,queryName3 #定义item名,以逗号分隔
customQueryItemName.Query=yourQueryHere #自定义查询语句结尾不要加封号
customQueryItemName.NoDataFound=none #定义无查询结果时的返回值(默认是none)
customQueryItemName.Period=<Express a period in minute> #自定义语句的执行周期,例如:数据库的版本
条件查询
customQueryItemName.ACTIVE=[true|false]
你可以定义一个查询返回值,来判断指定的查询语句是否要执行,如下:
archive.Query=select round( A.LOGS*B.AVG/1024/1024/10 ) \
from ( SELECT COUNT (*) LOGS FROM V$LOG_HISTORY WHERE \
FIRST_TIME >= (sysdate -10/60/24)) A, \
( SELECT Avg(BYTES) AVG, Count(1), Max(BYTES) Max_Bytes,Min(BYTES) Min_Bytes FROM v$log) B
archive.RaceConditionQuery=select value \
from \
v$parameter where name='log_archive_start'
archive.RaceConditionValue=FALSE
在上面的例子中,如果archive.RaceConditionQuery这个查询返回的值是archive.RaceConditionValue定义的值,则执行archive.Query查询语句,archive.RaceConditionValue这个值是TRUE时才查询,也就是只有当Oracle数据库处于归档模式时才执行归档日志查询。
<QueryName>.Trim=[true|false]
<QueryName>.AddSpaces=[true|false]
<QueryName>.ExcludeColumnsList=[1,2,3,..n]
<QueryName>.Period
<QUERY_NAME>.WhenNotAlive = <VALUE>
DefaultUser = <USERNAME>
DefaultPassword =<PASSWORD>
<QueryName>.ExtraQueryListFile =<VALUE>
<QUERY_NAME>.WhenNotAlive =<VALUE>
/opt/orabbix/conf/log4j.properties在这个文件中可以设置orabbix的日志格式,日志格式和apache的一样
i.e
如果您有两个主机RAC1和RAC2和一个实例RACINST,你可以在orabbix配置文件中这么写:
RACINST.Url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=RAC1.EXAMPLE.COM) \
(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=RAC2.EXAMPLE.COM)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=RACINST)))