资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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> cat check_tablespace.sh  #!/bin/bash # tablespace usagep check source ~/.bash_profile function check { sqlplus -S "/ as sysdba" <<  EOF set linesize 200 set pagesize 200 spool /tmp/ora_tablespace.txt select a.tablespace_name, total, free,(total-free) as usage from  (select tablespace_name, sum(bytes)/1024/1024 as total from dba_data_files group by tablespace_name) a,  (select tablespace_name, sum(bytes)/1024/1024 as free from dba_free_space group by tablespace_name) b where a.tablespace_name = b.tablespace_name; spool off set linesize 100 set pagesize 100 spool /tmp/ora_autex.txt select tablespace_name,autoextensible from dba_data_files; spool off quit EOF };check &>/dev/null

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

oracle@hmracdb1:~/bin> ls -l /tmp/ora_* -rw-r--r-- 1 oracle oinstall 1030 Mar 23 20:50 /tmp/ora_autex.txt -rw-r--r-- 1 oracle oinstall  929 Mar 23 20:50 /tmp/ora_tablespace.txt   oracle@hmracdb1:~/bin> cat /tmp/ora_tablespace.txt TABLESPACE_NAME                                                   TOTAL       FREE      USAGE     ------------------------------------------------------------ ---------- ---------- ----------     TEST11                                                               50         49          1     SYSAUX                                                             2048       1197        851     UNDOTBS1                                                           2048  2036.3125    11.6875     USERS                                                              1024       1023          1     SYSTEM                                                             2048   1358.375    689.625     UDB_SPACE                                                         40960  31673.875   9286.125     UNDOTBS2                                                           2048  2035.1875    12.8125       7 rows selected.     oracle@hmracdb1:~/bin> cat /tmp/ora_autex.txt TABLESPACE_NAME                                              AUTOEX                               ------------------------------------------------------------ ------                               SYSTEM                                                       YES                                  SYSAUX                                                       YES                                  UNDOTBS1                                                     YES                                  UNDOTBS2                                                     YES                                  USERS                                                        YES                                  UDB_SPACE                                                    YES                                  UDB_SPACE                                                    YES                                  TEST11                                                       YES                                  8 rows selected.

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

hmracdb1:~ # crontab -u oracle -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.XXXXj0XHiH installed on Thu Mar 23 11:38:37 2017) # (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $) */5 * * * * /home/oracle/bin/check_tablespace.sh

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

SQL> set linesize 200 select ff.s tablespace_name, ff.b total,               (ff.b - fr.b)usage, fr.b free,               round((ff.b - fr.b) / ff.b * 100) || '% ' usagep from (select tablespace_name s, sum(bytes) / 1024 / 1024 b                     from dba_data_files                   group by tablespace_name) ff,               (select tablespace_name s, sum(bytes) / 1024 / 1024 b                     from dba_free_space                   group by tablespace_name) fr  12  where ff.s = fr.s;   TABLESPACE_NAME                                                   TOTAL      USAGE       FREE USAGEP ------------------------------------------------------------ ---------- ---------- ---------- ------------------------------------------------------------------------------------ TEST11                                                               50          1         49 2% SYSAUX                                                             2048    851.375   1196.625 42% UNDOTBS1                                                           2048    12.6875  2035.3125 1% USERS                                                              1024          1       1023 0% SYSTEM                                                             2048    689.625   1358.375 34% UDB_SPACE                                                         40960   9286.125  31673.875 23% UNDOTBS2                                                           2048    12.8125  2035.1875 1%   7 rows selected.

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

hmracdb1:~ # cat discovery_oracle_tablespace.sh #!/bin/bash #zabbix discovery oracle tablespace 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:~ # cat tablespace_check.sh  #!/bin/bash # oracle tablespace check CEHCK_TYPE=$1 TABLESPACE_NAME=$2   function usagepre {     grep "\b$TABLESPACE_NAME\b" /tmp/ora_tablespace.txt | awk '{printf "%.f\n",($2-$3)/$2*100}' }   function available {     grep "\b$TABLESPACE_NAME\b" /tmp/ora_tablespace.txt | awk '{printf $3*1024*1024}' }   function check {     if grep "\b$TABLESPACE_NAME\b" /tmp/ora_autex.txt | awk '{print $2}' | uniq | grep "YES" &>/dev/null;then         echo 1     else         echo 0     fi }   case $CEHCK_TYPE in     pre)         usagepre ;;     fre)         available ;;     check)         check ;;     *)         echo -e "Usage: $0 [pre|fre|check] [TABLESPACE_NAME]" esac

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

hmracdb1:~ # ./tablespace_check.sh pre SYSTEM 34 hmracdb1:~ # ./tablespace_check.sh fre SYSTEM 1424359424hmracdb1:~ # ./tablespace_check.sh check SYSTEM 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]' -s 10.xxx.xxx.xxx 34 [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'tablespace.check[fre,SYSTEM]' -s 10.xxx.xxx.xxx 1424359424 [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'tablespace.check[check,SYSTEM]' -s 10.xxx.xxx.xxx 1

Zabbix Web端配置

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

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

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

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

第二个表空间剩余容量

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

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

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

创建告警触发器

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

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

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

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

查看监控数据

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

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

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:zabbix自动发现oracle表空间并监控其使用率-创新互联
文章路径:http://www.cdkjz.cn/article/diopii.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220