频道栏目
首页 > 网络 > 其他 > 正文

zabbix自动发现oracle表空间并监控其使用率

2017-03-29 09:13:40      个评论      
收藏   我要投稿

zabbix自动发现oracle表空间并监控其使用率

监控需求

Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制。Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创建表空间时可以根据应用需求指定是否开启表空间自动扩展。那么在这里我们需要分析一个监控策略,就是当zabbix监控到某个表空间使用率达到95%,那么就让触发器触发警告(Warning)信息,并发送邮件给DBA或管理者。当检测到表空间没有开启自动扩展时,则触发Information信息。说明一下:oracle表空间是否开启自动扩展以及最大能扩展到多少在最初应该规划好的,有时在创建表空间时指定初始容量和最大能扩展的容量一致的话,那么就会让这个表空间立即拥有最大能扩展的容量,而不是随着表空间的消耗而慢慢增加。所以即使我们检测到该表空间开启了自动扩展功能,实际上也不会继续扩展了。当然在大多数业务场景下一般是不建议开启表空间自动扩展功能的,除非你的业务是非关键的。回到监控这里,当我们同时收到这两个告警信息时,那么就要及时处理oracle表空间使用率大于95%的问题了。

监控方式

有了zabbix监控系统,我们可以定制任何需要的监控项目,首先通过自动发现脚本发现oracle表空间,然后再制定额外的属于oracle表空间的监控项目,配置告警触发器,最后在zabbix的Web页面端展示oracle表空间的使用率和剩余量。

获取oracle数据库表空间信息的原始脚本和自动发现脚本

Oracle表空间的信息需要SQL语句查询得到,因此,我们首先创建一个获取表空间信息的原始脚本/home/oracle/bin/check_tablespace.sh,这个脚本由oracle用户去执行,脚本编写如下:

oracle@hmracdb1:~/bin>catcheck_tablespace.sh
#!/bin/bash
#tablespaceusagepcheck
source~/.bash_profile
functioncheck{
sqlplus-S"/assysdba"</dev/null

执行这个脚本,并生成两个保存有oracle表空间名称信息的文件:/tmp/ora_tablespace.txt和/tmp/ora_autex.txt

oracle@hmracdb1:~/bin>ls-l/tmp/ora_*
-rw-r--r--1oracleoinstall1030Mar2320:50/tmp/ora_autex.txt
-rw-r--r--1oracleoinstall929Mar2320:50/tmp/ora_tablespace.txt

oracle@hmracdb1:~/bin>cat/tmp/ora_tablespace.txt
TABLESPACE_NAMETOTALFREEUSAGE
------------------------------------------------------------------------------------------
TEST1150491
SYSAUX20481197851
UNDOTBS120482036.312511.6875
USERS102410231
SYSTEM20481358.375689.625
UDB_SPACE4096031673.8759286.125
UNDOTBS220482035.187512.8125

7rowsselected.


oracle@hmracdb1:~/bin>cat/tmp/ora_autex.txt
TABLESPACE_NAMEAUTOEX
------------------------------------------------------------------
SYSTEMYES
SYSAUXYES
UNDOTBS1YES
UNDOTBS2YES
USERSYES
UDB_SPACEYES
UDB_SPACEYES
TEST11YES
8rowsselected.

我们需要把脚本放到oracle用户的crontab计划任务表中,让脚本在后台每5分钟执行一次,一定要保证计划任务能正常按计划执行,否则这可能会被监控欺骗(监控端获取到的数据一直保持不变)。

hmracdb1:~#crontab-uoracle-l
#DONOTEDITTHISFILE-editthemasterandreinstall.
#(/tmp/crontab.XXXXj0XHiHinstalledonThuMar2311:38:372017)
#(CronversionV5.0--$Id:crontab.c,v1.122004/01/2318:56:42vixieExp$)
*/5****/home/oracle/bin/check_tablespace.sh

手动执行SQL语句获取表空间使用率

SQL>setlinesize200
selectff.stablespace_name,
ff.btotal,
(ff.b-fr.b)usage,
fr.bfree,
round((ff.b-fr.b)/ff.b*100)||'%'usagep
from(selecttablespace_names,sum(bytes)/1024/1024b
fromdba_data_files
groupbytablespace_name)ff,
(selecttablespace_names,sum(bytes)/1024/1024b
fromdba_free_space
groupbytablespace_name)fr
12whereff.s=fr.s;

TABLESPACE_NAMETOTALUSAGEFREEUSAGEP
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TEST11501492%
SYSAUX2048851.3751196.62542%
UNDOTBS1204812.68752035.31251%
USERS1024110230%
SYSTEM2048689.6251358.37534%
UDB_SPACE409609286.12531673.87523%
UNDOTBS2204812.81252035.18751%

7rowsselected.

下面编写一个zabbix自动发现oracle表空间的脚本discovery_oracle_tablespace.sh

hmracdb1:~#catdiscovery_oracle_tablespace.sh
#!/bin/bash
#zabbixdiscoveryoracletablespace
table_spaces=(`cat/tmp/ora_tablespace.txt|sed-e"1,3d"-e"/^$/d"-e"/selected/d"|awk'{print$1}'`)
length=${#table_spaces[@]}

printf"{\n"
printf'\t'"\"data\":["
for((i=0;i<$length;i++))
do
printf"\n\t\t{"
printf"\"{#TABLESPACE_NAME}\":\"${table_spaces[$i]}\"}"
if[$i-lt$[$length-1]];then
printf","
fi
done
printf"\n\t]\n"
printf"}\n"

赋予脚本执行权限,并放到$ZABBIX_HOME/scripts/目录下,下面是执行该脚本输出为json格式的oracle表空间的信息

hmracdb1:/opt/zabbix/scripts#./discovery_oracle_tablespace.sh
{
"data":[
{"{#TABLESPACE_NAME}":"TEST11"},
{"{#TABLESPACE_NAME}":"SYSAUX"},
{"{#TABLESPACE_NAME}":"UNDOTBS1"},
{"{#TABLESPACE_NAME}":"USERS"},
{"{#TABLESPACE_NAME}":"SYSTEM"},
{"{#TABLESPACE_NAME}":"UDB_SPACE"},
{"{#TABLESPACE_NAME}":"UNDOTBS2"}
]
}

监控项目检测脚本tablespace_check.sh用于zabbix获取oracle表空间使用率、剩余量和检查是否开启自动扩展。

hmracdb1:~#cattablespace_check.sh
#!/bin/bash
#oracletablespacecheck
CEHCK_TYPE=$1
TABLESPACE_NAME=$2

functionusagepre{
grep"\b$TABLESPACE_NAME\b"/tmp/ora_tablespace.txt|awk'{printf"%.f\n",($2-$3)/$2*100}'
}

functionavailable{
grep"\b$TABLESPACE_NAME\b"/tmp/ora_tablespace.txt|awk'{printf$3*1024*1024}'
}

functioncheck{
ifgrep"\b$TABLESPACE_NAME\b"/tmp/ora_autex.txt|awk'{print$2}'|uniq|grep"YES"&>/dev/null;then
echo1
else
echo0
fi
}

case$CEHCK_TYPEin
pre)
usagepre;;
fre)
available;;
check)
check;;
*)
echo-e"Usage:$0[pre|fre|check][TABLESPACE_NAME]"
esac

确认脚本输出的值为zabbix监控所取的数值

hmracdb1:~#./tablespace_check.shpreSYSTEM
34
hmracdb1:~#./tablespace_check.shfreSYSTEM
1424359424hmracdb1:~#./tablespace_check.shcheckSYSTEM
1

将脚本都保存到$ZABBIX_HOME/scpirts目录下,然后配置UserParameter参数,增加监控key,key名称分别为discovery.oracle.tablespace、tablespace.check,在以下配置文件末尾增加两行

hmracdb1:/opt/zabbix/scripts#vim../etc/zabbix_agentd.conf.d/userparameter_script.conf
UserParameter=discovery.oracle.tablespace[*],/opt/zabbix/scripts/discovery_oracle_tablespace.sh
UserParameter=tablespace.check[*],/opt/zabbix/scripts/tablespace_check.sh$1$2

重启zabbix_ahgentd

在zabbix服务端获取oracle表空间和监控数值

[root@Zabbix_19F~]#zabbix_get-p10050-k'tablespace.check[pre,SYSTEM]'-s10.xxx.xxx.xxx
34
[root@Zabbix_19F~]#zabbix_get-p10050-k'tablespace.check[fre,SYSTEM]'-s10.xxx.xxx.xxx
1424359424
[root@Zabbix_19F~]#zabbix_get-p10050-k'tablespace.check[check,SYSTEM]'-s10.xxx.xxx.xxx
1

Zabbix Web端配置

新建oracle表空间模版My_Templates_Linux_Discovery_oracle_tablespace,添加自动发现规则,10分钟更新一次

wKioL1jU4QqjKYO9AABT7lTR0NU957.png

添加Item prototypes监控项目,第一个表空间使用率

wKioL1jU4Tbi7ieZAAB-PGz2a_0943.png

第二个表空间剩余容量

wKiom1jU4XPTGRqoAAB_jUlZWcw328.png

第三个检查表空间是否开启自动扩展

wKioL1jU4aCQjlWgAAB3wlYyuns642.png

创建告警触发器

首先创建检测表空间使用率是否大于95%的触发器

wKioL1jU4dnjH-OCAABpuDUJCa0103.png

创建检测是否开启自动扩展的触发器

wKiom1jU4hiQdFYDAABpCFEiFaQ576.png

查看监控数据

wKioL1jU48OAaAR7AADXOhZdpj8407.png

到这里,zabbix监控oracle表空间使用率就完成了

上一篇:轻松使用Fpm封装制作Rpm包 --Linux
下一篇:RabbitMQ集群
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站