zabbix监控Oracle之orabbix配置

参考至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)))

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容