參考至http://www.smartmarmot.com/wiki/index.php?title=Orabbix#Requirements
產(chǎn)品說明
Orabbix是一個(gè)插件,它是與Zabbix 配合,對(duì)Oracle數(shù)據(jù)庫提供多層監(jiān)視、性能和可用性報(bào)告和度量,以及服務(wù)器性能指標(biāo)。它提供了從大量Oracle實(shí)例獲取數(shù)據(jù)的有效機(jī)制,并向Zabbix服務(wù)器提供監(jiān)視和性能指標(biāo)的信息。然后,您可以利用Zabbix的報(bào)告功能來收集所有數(shù)據(jù),并為涉眾提供圖表和服務(wù)級(jí)別協(xié)議度量等分析。當(dāng)前的發(fā)行版包含一組預(yù)定義的模板,這些模板結(jié)合了初始部署的警報(bào)和繪圖功能。當(dāng)然,你也可以根據(jù)自身需求和數(shù)據(jù)/監(jiān)視需求來設(shè)計(jì)自己的監(jiān)控。

它可以監(jiān)控什么?
下面是一些orabbix監(jiān)控的例子:
數(shù)據(jù)庫的版本;
歸檔日志的趨勢(shì)數(shù)據(jù);
處于等待狀態(tài)的事務(wù)(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);
數(shù)據(jù)庫大小/數(shù)據(jù)庫文件大?。―BSize size of database really used space and of Filesize);











安裝要求
zabbix server版本1.8以上;
Java Runtime Environment 6;
目前已知的成功測試了Oracle主機(jī)平臺(tái)
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安裝任何類型的客戶端
假設(shè)
安裝說明是基于對(duì)大多數(shù) unix 部署(即RHEL / CentOS)的指令而創(chuàng)建的,如果你的環(huán)境比較特殊,需要做一些修改。
這個(gè)說明是基于倆臺(tái)主機(jī)來的,一臺(tái)zabbix服務(wù)器端,一臺(tái)Oracle數(shù)據(jù)庫。如果你打算監(jiān)控zabbix服務(wù)器上的Oracle時(shí),步驟是一樣的,只需要對(duì)一些較小的連接信息進(jìn)行修改。
這些步驟也包括你需要配置orabbix來監(jiān)控一個(gè)新安裝的或者安裝配置好的Oracle數(shù)據(jù)庫。安裝步驟將為Zabbix用戶提供所有表的訪問權(quán)限,這將包括在執(zhí)行時(shí)出現(xiàn)的任何用戶表。如果你不希望Zabbix訪問數(shù)據(jù)庫中的特定表或資源,則需要根據(jù)要求設(shè)置拒絕Zabbix用戶訪問權(quán)限。詳細(xì)信息請(qǐng)咨詢您的DBA,因?yàn)檫@超出了這些說明的范圍。
安裝步驟(orabbix是安裝在服務(wù)器端的)
在zabbix server 下載orabbix,地址:https://sourceforge.net/projects/orabbix/files/orabbix-1.2.3.zip/download? ? 需要翻墻
解壓到/opt/orabbix文件夾下; ? ? ?PS:可以是別的路徑
復(fù)制/opt/orabbix/init.d/orabbix 到/etc/init.d/orabbix?
給orabbix這個(gè)文件可執(zhí)行權(quán)限;
/etc/init.d/orabbix
/opt/orabbix/run.sh
創(chuàng)建Oracle用戶
為orabbix訪問Oracle數(shù)據(jù)庫創(chuàng)建一個(gè)用戶(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;
注意:
如果你想創(chuàng)建的這個(gè)用戶權(quán)限最小,可以參看以下方案:
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訪問控制,否則在監(jiān)控過程中有部分內(nèi)容無法顯示:
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;
你可以運(yùn)行以下命令來驗(yàn)證正確性:
select utl_inaddr.get_host_name('127.0.0.1') from dual;
(Redhat)將orabbix設(shè)置為開機(jī)自啟動(dòng):
chkconfig --add orabbix
chkconfig --list ? ? ? ? ? ? ? ? ? ?#檢查
在Zabbix中為您計(jì)劃監(jiān)視的DB實(shí)例創(chuàng)建一個(gè)主機(jī)條目,并導(dǎo)入在:/ opt/orabbix/ template中發(fā)現(xiàn)的模板
這一步可以參考zabbix官網(wǎng):http://www.zabbix.com/documentation.php
orabbix配置文件
在/opt/orabbix/conf/ 目錄下有個(gè)叫config.props.sample的文件,將這個(gè)文件復(fù)制并改名為config.props
]# mv config.props.sample config.props
配置文件如下:
#comma separed list of Zabbix servers
ZabbixServerList=ZabbixServer1,ZabbixServer2 ? ?#zabbixserver1、zabbixserver2定義zabbix服務(wù)器的名字,與下面的zabbixserver1和2對(duì)應(yīng)
ZabbixServer1.Address=192.168.10.11 ? ? ? ? ?#上面定義的zabbixserver1的IP地址
ZabbixServer1.Port=10051 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#zabbixserver1的端口
# ZabbixServer2.Address=IP_ADDRESS_OF_ZABBIX_SERVER ? ?#zabbixserver2默認(rèn)是注銷的,如果你有多個(gè)zabbixserver,選填這個(gè)
# ZabbixServer2.Port=PORT_OF_ZABBIX_SERVER
#pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid ? ? ? ? ? ?#Pid文件的位置
#frequency of item's refresh
OrabbixDaemon.Sleep=300 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 監(jiān)控項(xiàng)的刷新間隔(不需修改)
#MaxThreadNumber should be >= than the number of your databases
OrabbixDaemon.MaxThreadNumber=100 ? ? ? ? ?#orabbix守護(hù)進(jìn)程的最大線程數(shù)
#put here your databases in a comma separated list
DatabaseList=DB1,DB2,DB3 ? ? ? ? ? ? ? ? ? ? ? ? ?# ?數(shù)據(jù)庫列表(zabbix中的主機(jī)名必須用這個(gè)兒定義的名字)
#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 ? ? ? ? ? ? ? ? ?# 連接池最大活動(dòng)連接數(shù)(無需修改)
#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 ? ? ? ? ? ? ? ? #返回連接異常的等待時(shí)間,毫秒??梢远x為一個(gè)負(fù)值以表示不做限制
DatabaseList.MaxIdle=1 ? ? ? ? ? ? ? ? ? ? ?#最大空閑連接數(shù),可以定義為一個(gè)負(fù)值以表示不做限制
#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 上面這一項(xiàng)列出的名字
server.domain.example.com是你Oracle服務(wù)器的主機(jī)名或者IP地址(建議為IP地址)
<LISTENER_PORT>是你數(shù)據(jù)庫的端口
DB1:是Oracle數(shù)據(jù)庫的SID
下面的你在Oracle里創(chuàng)建的允許orabbix采集數(shù)據(jù)的賬號(hào)和密碼,DB1與上面保持一致
#Those values are optionals if not specified Orabbix is going to use the general values
DB1.MaxActive=10 ? ? ? ? ? ?#針對(duì)單獨(dú)的數(shù)據(jù)庫設(shè)置參數(shù),上面的全局的,這個(gè)是單獨(dú)的
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
配置文件補(bǔ)充
QueryListFile=/opt/orabbix/conf/query.props ? ? ?#查詢文件的位置
<DBNAME>.QueryListFile=./confQueryTest.props ? ? ? #定義單個(gè)數(shù)據(jù)庫的查詢文件位置,可以使用相對(duì)路徑
對(duì)于不同的數(shù)據(jù)庫使用不同的查詢文件,或者每個(gè)數(shù)據(jù)庫都有一個(gè)查詢文件池,這在不同的Oracle版本(如果有不同版本)或生產(chǎn)環(huán)境、測試環(huán)境、開發(fā)環(huán)境等不同環(huán)境下使用時(shí)有奇效。
<DB_NAME>.ExtraQueryListFile ==./confQueryTest_2.props ? ??
#官網(wǎng)是這樣定義的:adds another custom query to the default query file.If there are duplicates the ExtraQueryListFile will override them
query.props查詢文件
可以在這個(gè)文件中設(shè)置自定義查詢項(xiàng)。比如你要監(jiān)控公司一些業(yè)務(wù)邏輯之類的定制監(jiān)控項(xiàng)
創(chuàng)建的每個(gè)查詢必須有一個(gè)item名,必須是獨(dú)一無二的。zabbix server會(huì)識(shí)別這個(gè)item,就像其他item一樣,不能沖突。
QueryList=queryName1,queryName2,queryName3 ? ? ? #定義item名,以逗號(hào)分隔
customQueryItemName.Query=yourQueryHere ? ? ? ? #自定義查詢語句結(jié)尾不要加封號(hào)
customQueryItemName.NoDataFound=none ? ? ? ? ? ? #定義無查詢結(jié)果時(shí)的返回值(默認(rèn)是none)
customQueryItemName.Period=<Express a period in minute> ? #自定義語句的執(zhí)行周期,例如:數(shù)據(jù)庫的版本
條件查詢
customQueryItemName.ACTIVE=[true|false]
你可以定義一個(gè)查詢返回值,來判斷指定的查詢語句是否要執(zhí)行,如下:
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這個(gè)查詢返回的值是archive.RaceConditionValue定義的值,則執(zhí)行archive.Query查詢語句,archive.RaceConditionValue這個(gè)值是TRUE時(shí)才查詢,也就是只有當(dāng)Oracle數(shù)據(jù)庫處于歸檔模式時(shí)才執(zhí)行歸檔日志查詢。
<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在這個(gè)文件中可以設(shè)置orabbix的日志格式,日志格式和apache的一樣
i.e
如果您有兩個(gè)主機(jī)RAC1和RAC2和一個(gè)實(shí)例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)))