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

简介:

监控需求

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


监控方式

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

 

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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分钟执行一次一定要保证计划任务能正常按计划执行,否则这可能会被监控欺骗(监控端获取到的数据一直保持不变)。

1
2
3
4
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语句获取表空间使用率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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表空间的信息

1
2
3
4
5
6
7
8
9
10
11
12
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表空间使用率、剩余量和检查是否开启自动扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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监控所取的数值

1
2
3
4
5
hmracdb1:~  # ./tablespace_check.sh pre SYSTEM
34
hmracdb1:~  # ./tablespace_check.sh fre SYSTEM
1424359424hmracdb1:~  # ./tablespace_check.sh check SYSTEM
1

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

1
2
3
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表空间和监控数值

1
2
3
4
5
6
[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分钟更新一次

wKioL1jU4QqjKYO9AABT7lTR0NU957.png



本文转自 HMLinux 51CTO博客,原文链接:http://blog.51cto.com/7424593/1910111

相关文章
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
32 2
|
3月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
4月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
75 4
|
1月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
25 2
|
1月前
|
Oracle 关系型数据库 数据库
Oracle系列之五:Oracle表空间
Oracle系列之五:Oracle表空间
|
2月前
|
监控 Cloud Native 关系型数据库
使用 Grafana 统一监控展示 - 对接 Zabbix
使用 Grafana 统一监控展示 - 对接 Zabbix
|
4月前
|
监控 Docker 容器
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
Zabbix【部署 03】zabbix-agent2安装配置使用(zabbix-agent2监控docker实例分享)
219 0
|
4月前
|
监控 Java
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
87 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle查看表空间 及表空间是否需要扩展
Oracle查看表空间 及表空间是否需要扩展
26 0
|
10天前
|
监控 关系型数据库 应用服务中间件
zabbix自定义监控、钉钉、邮箱报警
zabbix自定义监控、钉钉、邮箱报警,实验准备,安装,添加监控对象,添加自定义监控项,监控mariadb,监控NGINX,钉钉报警设置,邮件报警
129 0

推荐镜像

更多