问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

zabbix 怎么监控oracle tablespace

发布网友 发布时间:2022-04-08 06:20

我来回答

2个回答

懂视网 时间:2022-04-08 10:41

由于公司要上oracle数据库,需要对这个东西惊醒监控,于是去网上淘资料,发现有一个套件orabbix监控oracle的效果还不错,于是拿来试验了一下。orabbix是由JAVA写的一个套件,需要在oracle服务器上面安装JAVA环境才能运行。这里为了简便,可以使用yum -y install java来安装JAVA环境。

安装完java环境之后可以通过下面命令来检测是否安装成功:

[root@test ~]# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.0.1.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

如我上面这样显示就证明java环境已经安装成功了。

之后,我们就需要在oracle服务器上面安装orabbix套件了,可以去官网下载,目前最新版本是1.2.3,下载地址为:http://www.smartmarmot.com/downloads/orabbix-1.2.3.zip

下载完之后将其解压到/opt目录下,接下来,需要配置orabbix的配置文件了。先将配置文件的模板复制一份出来,然后开始配置:

cp orabbix/conf/config.props.sample orabbix/conf/config.props
vi !$
#comma separed list of Zabbix servers
ZabbixServerList=ZabbixServer1
ZabbixServer1.Address=10.6.0.180              #zabbix服务器的IP地址
ZabbixServer1.Port=10051                      #zabbix服务器的监听端口
#pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid
#frequency of item‘s refresh
OrabbixDaemon.Sleep=300
#MaxThreadNumber should be >= than the number of your databases
OrabbixDaemon.MaxThreadNumber=100
#put here your databases in a comma separated list
DatabaseList=DB_QM                            #这个名字可以自行命名,但是需要和下面的名字保持一致,并且在zabbixserver上面配置的主机名要和这个保持一致
#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
DB_QM.Url=jdbc:oracle:thin:@10.6.0.207:1521:test        #orabbix是通过jdbc链接oracle数据库的,orcl指定的是被监控服务器的连接信息(例如采用jdbc的联接方式,服务器地址是10.6.0.207,oracle的端口是1521,test指的是数据库的实例)
DB_QM.User=zabbix                                       #链接oracle数据库的账号密码,这个需要在oracle数据库中配置
DB_QM.Password=123456
#Those values are optionals if not specified Orabbix is going to use the general values
DB_QM.MaxActive=10                                      #删除用不到的多余的配置,保留这些就可以了。
DB_QM.MaxWait=100
DB_QM.MaxIdle=1
DB_QM.QueryListFile=./conf/query.props
#DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2

然后在oracle数据库中创建zabbix用户:

CREATE USER ZABBIX IDENTIFIED BY 123456  DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
     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;

如果是Oracle 11g,则需要添加如下命令

execdbms_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启动文件到etc目录下:

cp /opt/orabbix/init.d/orabbix/etc/init.d/orabbix
chmod 755 !$

启动orabbix

systemctl start orabbix
chkconfig --add orabbix
chkconfig orabbix on

启动orabbix之后,没有报错,证明启动成功,如果有报错,一般是配置文件的问题,仔细排查一下应该就没问题。

启动之后,还需要安装上zabbix agentd客户端,至于怎样安装agentd客户端在我的另一篇博客中有介绍,这里就不赘述了。传送门在这里

安装完之后,将模板导入到zabbixserver中:

导入模版,模版放置在/opt/orabbix/template下

Orabbix_export_full.xml   全部导入(图表 监控项 触发器)

Orabbix_export_graphs.xml  图表

Orabbix_export_items.xml   监控项

Orabbix_export_triggers.xml 触发器

这里导入所有的模板,导入模版之后,将oracle主机添加进zabbixserver中,如下图所示

技术分享

配置完之后,正常的话就能够监控oracle数据库的信息了。

下面是出图后的效果:

技术分享

本来到这里就结束了,但是前面这些都不是重点,重点是后面同事需求监控oracle数据库的tablespace的使用量,于是,为了实现这个需求,我在原先的模板中进行了修改。,使用自动发现功能实现监控tablespace的使用情况。

首先,需要创建脚本,获取到oracle数据库中的数据,下面是脚本:

[root@test opt]# cat /home/oracle/oracle_cron.sh 
#!/bin/bash
source /home/oracle/.bash_profile
sqlplus -s zabbix/123456  > /tmp/tablespace.log<<EOF
set linesize 140 pagesize 10000
col "Status"   for a10
col "Name"     for a25
col "Type"     for a10
col "Extent"   for a15
col "Size (M)" for a20
col "Used (M)" for a20
col "Used %"   for a20
SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent", 
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),‘99,999,990‘) "Size (M)", 
TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,‘999,999,999‘) "Used (M)", 
TO_CHAR(NVL((a.bytes -  NVL(f.bytes, 0)) / a.bytes * 100, 0), ‘990.00‘) "Used %" 
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‘) 
UNION ALL 
SELECT d.status         "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent", 
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),‘99,999,999‘) "Size (M)", 
TO_CHAR(NVL(t.bytes,0)/1024/1024,‘999,999,999‘) "Used (M)", 
TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), ‘990.00‘) "Used %" FROM sys.dba_tablespaces d, 
(select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a, (select 
tablespace_name, sum(bytes_cached) bytes from v$temp_extent_pool group by tablespace_name) t WHERE 
d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) AND 
d.extent_management like ‘LOCAL‘ AND d.contents like ‘TEMPORARY‘
ORDER BY 7;
EOF

通过执行这个脚本可以获取到moracle数据库中的tablespace列表,并输出到/tmp/tablespace.log日志中去,这个执行脚本需要修改属主属组为oracle.oracle,并且需要给于执行权限,在crontab中设置每一分钟执行一次,下面是执行得到的结果:

[root@test opt]# cat /tmp/tablespace.log 
Status   Name      TypeExtentSize (M)     Used (M)  Used %
---------- ------------------------- ---------- --------------- -------------------- -------------------- --------------------
ONLINE   UNDOTBS1     UNDOLOCAL280       12     4.38
ONLINE   QWERTY     PERMANENTLOCAL 101    10.00
ONLINE   USERS     PERMANENTLOCAL  51    20.00
ONLINE   SYSTEM     PERMANENTLOCAL700      377    53.88
ONLINE   TEMP      TEMPORARYLOCAL 20       11    55.00
ONLINE   SYSAUX     PERMANENTLOCAL550      400    72.78
6 rows selected.

上面就是取出来的数据,既然数据取出来了,那么剩下的要做的就是把数据弄到zabbix中去咯。

下面将使用下面两个脚本来对取出的这些数据进行格式化转换和取值:

[root@test opt]# cat /usr/local/zabbix/scripts/oracle_discovery.sh 
#!/bin/bash
TABLESPACE=`cat /tmp/tablespace.log |awk ‘{print$2}‘|awk ‘NR>3{print}‘`
COUNT=`echo "$TABLESPACE" |wc -l`
INDEX=0
echo ‘{"data":[‘
echo "$TABLESPACE" | while read LINE; do
    echo -n ‘{"{#TABLENAME}":"‘$LINE‘"}‘
    INDEX=`expr $INDEX + 1`
    if [ $INDEX -lt $COUNT ]; then
        echo ‘,‘
    fi
done
echo ‘]}‘

这个脚本的功能是从tablespace.log文件中取出Name那一列,并进行JSON格式化输出(因为zabbix的自动发现功能获取的数据类型是JSON格式的),下面是执行效果:

[root@test opt]# sh /usr/local/zabbix/scripts/oracle_discovery.sh 
{"data":[
{"{#TABLENAME}":"UNDOTBS1"},
{"{#TABLENAME}":"QWERTY"},
{"{#TABLENAME}":"USERS"},
{"{#TABLENAME}":"SYSTEM"},
{"{#TABLENAME}":"TEMP"},
{"{#TABLENAME}":"SYSAUX"},
{"{#TABLENAME}":""},
{"{#TABLENAME}":"rows"}]}
[root@test opt]#

 还有一个脚本是获取tablespace.log中的最后三列数据,脚本内容如下:

[root@test opt]# cat /usr/local/zabbix/scripts/oracle_check.sh
#!/bin/bash
EQ_DATA="$2"
ZBX_REQ_DATA_TAB="$1"
SOURCE_DATA=/tmp/tablespace.log
case $2 in
  maxmb)        grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $5*1024*1024}‘;;
  used)   grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $6*1024*1024}‘;;
  autopercent)  grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $7}‘;;
  *) echo $ERROR_WRONG_PARAM; exit 1;;
esac
exit 0

其中maxmb和used取出的值是M,所以这里给转换成了byte,方便zabbix取值,下面是举例取出来的值:

[root@test opt]# sh /usr/local/zabbix/scripts/oracle_check.sh SYSAUX maxmb
576716800
[root@test opt]#

这里配置完成之后就需要在zabbixagentd的配置文件中添加监控key了:

[root@test opt]# tail -3 /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=ora.tab.discovery,/usr/local/zabbix/scripts/oracle_discovery.sh
UserParameter=tablespace[*],/usr/local/zabbix/scripts/oracle_check.sh $1 $2

添加key之后需要重启zabbix agentd服务。

然后我们就需要在zabbixserver中添加监控模板了,首先创建一个发现规则:

技术分享

其中的键值ora.tab.discovery就是我们在agentd的配置文件中定义的,由这个发现规则获取到的是一个JSON格式的返回值。要注意其中的数据更新间隔,这个值指的是你的发现规则执行的时间间隔,我这里暂时设置为60s

然后我们开始创建项目原型了,下面是创建的详细内容:

技术分享

按照上面的项目原型依次创建{#TABLENAME}used和{#TABLENAME}autopercent,对应的键值是tablespace[{#TABLENAME},used]和tablespace[{#TABLENAME},autopercent],创建完发现规则后,开始创建图形原型了,下面是图形原型的详细内容:

技术分享

保存完成后,该发现规则就做好了,之后等待大约一分钟之后就可以看到采集到的数据了,这和上面设定的60s的数据更新间隔是一致的。下面是获取到的监控tablespace的结果:

技术分享

好了,监控tablespace的目标暂时实现了,具体的一些细节还有待改进。附件中将会附上我的根据官网模板修改后的模板,好了,结束了,希望该教程能够帮助到大家!

本文出自 “柠檬” 博客,请务必保留此出处http://xianglinhu.blog.51cto.com/5787032/1681687

zabbix通过orabbix和自定义脚本监控oracle数据库

标签:zabbix   oracle   orabbix   脚本   自动发现   

热心网友 时间:2022-04-08 07:49

Orabbix插件的安装与配置
确保安装jdk环境,java version查看,没有则通过yum来安装JAVA:yum install java

1.在/opt目录下新建一个orabbix目录:
[root@oracle orabbix]#midir -p /opt/orabbix
(建议在此目录下,如果放置其他目录稍后需要更改orabbix的启动文件orabbix,启动文件默认写在opt/orabbix目录下 )

2. 解压安装文件
[root@oracle orabbix]#unzip orabbix-1.2.3.zip

3.赋予权限
[root@oracle orabbix]# chmod -R a+x orabbix/

4 通过/opt/orabbix/conf/config.props.sample文件创建一个config.props文件:

[root@oracle orabbix]#cp/opt/orabbix/conf/config.props.sample /opt/orabbix/conf/config.props

5. 编辑orabbix配置文件,具体如下
[root@oracle orabbix]#vi confi/config.props

#comma separed list of Zabbix servers
#ZabbixServerList=ZabbixServer1,ZabbixServer2
ZabbixServerList=ZabbixServer1
#(zabbixserver的名字,下行中address和port都引用到了这个名字,所以下面两行的前缀名字要与这里的名字保持一致)

#ZabbixServer1.Address=IP_ADDRESS_OF_ZABBIX_SERVER
ZabbixServer1.Address=192.168.3.163
#ZabbixServer1.Port=PORT_OF_ZABBIX_SERVER
ZabbixServer1.Port=10051

#ZabbixServer2.Address=IP_ADDRESS_OF_ZABBIX_SERVER
#ZabbixServer2.Port=PORT_OF_ZABBIX_SERVER

#pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid
#frequency of item's refresh
OrabbixDaemon.Sleep=300
#MaxThreadNumber should be >= than the number of your databases
OrabbixDaemon.MaxThreadNumber=100

#put here your databases in a comma separated list
#DatabaseList=DB1,DB2,DB3
DatabaseList=DB_QM (DB名称,可随意定义,但要与下文保持一致,切记要与监控的主机名称保持一致)

#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
DB_QM.Url=jdbc:oracle:thin:@192.168.3.250:1521:qmeas
#确保有jdk环境,因为这里是通过JDBC连接的
#DB1.User=zabbix
DB_QM.User=qm
#DB1.Password=zabbix_password
DB_QM.Password=qm
#DB的用户和密码,可创建zabbix用户,并赋予权限,如下文(这里直接用dba权限用户)
#Those values are optionals if not specified Orabbix is going to use the general values
DB_QM.MaxActive=10
DB_QM.MaxWait=100
DB_QM.MaxIdle=1
DB_QM.QueryListFile=./conf/query.props

#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
#注销未用到的DB连接

创建zabbix用户如下步骤:
CREATE USER ZABBIX
IDENTIFIEDBY zabbix <Password>
DEFAULTTABLESPACE SYSTEM
TEMPORARYTABLESPACE TEMP
PROFILEDEFAULT
ACCOUNTUNLOCK;
GRANT CONNECT TO ZABBIX;
GRANTRESOURCE TO ZABBIX;
ALTERUSER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ANY TABLE TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANTSELECT ANY DICTIONARY TO ZABBIX;
GRANTUNLIMITED TABLESPACE TO ZABBIX;
GRANTSELECT ANY DICTIONARY TO ZABBIX;。

Oracle 11g添加如下命令
execdbms_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;

6. 创建执行文件(直接cp即可)
[root@oracle orabbix]# cp /opt/orabbix/init.d/orabbix/etc/init.d/orabbix
7.保存退出,启动orabbix服务(确保有执行权限)
/etc/init.d/orabbix start
Orabbix服务加入随系统启动:
chkconfig --add orabbix
chkconfig --level 345 orabbix on

常见问题:
若config.props文件未配置,或是配置了错误,无法通过配置的信息正确连进Oracle数据库的,会出现以下错误信息
[root@zabbix orabbix]# /etc/init.d/orabbix start

Starting Orabbix service:
[root@zabbix orabbix]# Stopping
java.lang.Exception: ERROR on main - Connections is empty
atcom.smartmarmot.orabbix.Orabbixmon.run(Orabbixmon.java:101)
atcom.smartmarmot.orabbix.bootstrap.main(bootstrap.java:50)

可查看log信息判断解决
[root@oracle orabbix]# tail -f /opt/orabbix/logs/orabbix.log

到此,安装配置完成,则通过web页面访问直接导入模块即可

导入模版,模版放置在/opt/orabbix/template下
Orabbix_export_full.xml 全部导入(图表 监控项 触发器)
Orabbix_export_graphs.xml 图表
Orabbix_export_items.xml 监控项
Orabbix_export_triggers.xml 触发器
选中Orabbix_export_full.xml直接导入,则可以直接在主机中链接到模版就可以使用全部功能了(主机名称一定要与配置中的 DatabaseList=DB_QM保持一致)!

也可以再模版中找到此模版。然后将需要的信息直接cp过去,比如打开此处的监控项,把它全部复制到oracle主机下,触发器、图像显示同理!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
男生买卫生巾支援灾区对吗? 打了耳洞三天下了耳钉,怎么办!! cs七龙珠家里两台电脑怎么连局域网玩 CS七龙珠怎么创建联网房间 CS七龙珠怎样和电脑玩 CS七龙珠能和电脑对打吗 不然怎样调对打模式有哪些地图!!!急需... 糖葫芦的山楂在哪里买 衡水市康宁街与人民路交叉口市一建家属院7号楼,1-201怎么翻译 梦见朋友搬家时小孩因我不愿离去,且小孩坐在床上跑出许老鼠? 梦见搬家是什么预兆解梦 双色球是周几开奖几点开奖? 女人梦见前夫拿杯水水杯碎了,好吗? 哪里有旧手机换新手机 如何查询个人出入境记录 zabbix监控oracle 怎么配置 竹马弄青梅txt全集下载 求 竹马弄青梅全文未删减 百度云资源,谢谢 《竹马弄青梅》txt全集下载 《竹马弄青梅》最新txt全集下载 手机怎么不能下游戏 vivo手机不可下载游戏 为什么有的手机不能下载游戏 有没有不能下载游戏的手机 刚刚用手机uc浏览器查东西时不小心点进一个网站,手机提示受病毒攻击 义务教育英语课程标准是怎么样的? 怎么阻挡代码攻击,现在一打开自带的浏览器就开始震动,然后提示可能会遭到恶意广告*扰。已经按提示下载 课标规定的英语学业考试命题应遵守的原则有那些 英语新课程标准题目:以语言知识、语言技能、情感态度、学习策略、文化意识等方面构成的英语课程总体目标 英语课程标准的测试题2014忻州中高教师职称评审 谁来帮我回答这个关于回答小学英语新课程标准准则测试题,急!!! 微信拍一拍能会显示对方照片吗? 梦见我嫁接的蟹爪兰烂了半个是不是有不好的事要发生? 昨天晚上梦见别人送给我蟹脚兰花是什么意思? 早晨4点20梦见我嫁接的蟹爪兰烂了半个是什么意思? 梦见蟹爪兰变成杨树苗是什么意思? 梦见仙人掌嫁接蟹爪兰 梦见剪别人家的蟹爪兰是什么意思? 梦见一盆蟹爪莲开满了红花是什么预兆 梦见我的蟹爪莲断了 我准备怀孕,梦见绿色植物还有蟹爪兰根段了是怎么回事。 梦到初春冰刚开始化的时候,蟹爪莲飞速从我钱包里长出来,十几秒就爬上了天花板开花了,好漂亮好漂亮 ipad9抬起唤醒在哪里 高铁商务座拖鞋毯子可以带走吗 南航飞机上的毯子可以带走吗,我同学带走了说是网上查 我的快手不小心给卸载了,我想重新找回,可是不知道我快手的号码是多少,也不知道我绑定了哪个手机号? 天天坐飞机,你知道飞机上哪些物品可以带走吗 在高铁上乘客需要毛毯没有时该怎么办 请问商务座和一等座有什么区别 高铁商务舱有什么特殊待遇? 高铁商务舱吃饭免费吗