Zabbix 3.2.6 通过Discovery批量监控Oracle表空间

简介:

一、背景

    接到任务,要求对所有数据库的所有表空间进行监控,愿意是遇到表空间不足导致业务数据库的不可用,我们知道通过Zabbix监控Oracle的插件有一些,比如Orabbix或者Pyora,前者通过Java进行数据获取,所以必须要安装Java,我之前的文章有讲解安装过程,后者虽说是用Python脚本进行监控,但是我们的账号密码都暴露在脚本中,导致安全性下降,所以我们这里通过脚本来进行实现。

    利用Zabbix监控Oracle表空间利用率,但是这个Oracle库的表空间有很多个,而且不同的服务器的表空间各不相同,我怕累死,就想办法利用Discovery做一个自动发现,实现自动批量添加同类item的需求。

二、监控机制

    Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制。Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创建表空间时可以根据应用需求指定是否开启表空间自动扩展。那么在这里我们需要分析一个监控策略,就是当Zabbix监控到某个表空间使用率达到95%,那么就让触发器触发警告(Warning)信息,并发送邮件给DBA或管理者。当检测到表空间没有开启自动扩展时,则触发Information信息。

    Oracle表空间是否开启自动扩展以及最大能扩展到多少在最初应该规划好的,有时在创建表空间时指定初始容量和最大能扩展的容量一致的话,那么就会让这个表空间立即拥有最大能扩展的容量,而不是随着表空间的消耗而慢慢增加。所以即使我们检测到该表空间开启了自动扩展功能,实际上也不会继续扩展了。当然在大多数业务场景下一般是不建议开启表空间自动扩展功能的,除非你的业务是非关键的。回到监控这里,当我们同时收到这两个告警信息时,那么就要及时处理Oracle表空间使用率大于95%的问题了。

三、Oracle客户端配置

1、创建脚本check_tablespace.sh

    Oracle表空间的信息需要SQL语句查询得到,因此,我们首先创建一个获取表空间信息的原始脚本/home/oracle/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
#!/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。

04ceff54abd583da2d4985751afbdbf6.jpg

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

1
2
[oracle@mail ~]$  crontab  -l
* /15  * * * *  /home/oracle/check_tablespace .sh

2、创建脚本discovery_oracle_tablespace.sh

    通过脚本取得表空间的名字,并转换成json格式的(因为zabbix的自动发现功能获取的数据类型是JSON格式的)。

    下面编写一个zabbix自动发现oracle表空间的脚本,我这里的脚本路径是/usr/local/zabbix/scripts/discovery_oracle_tablespace.sh。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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"

3、创建监控项目检测脚本tablespace_check.sh

    用于zabbix获取oracle表空间使用率、剩余量和检查是否开启自动扩展。脚本为/usr/local/zabbix/scripts/tablespace_check.sh,脚本内容如下:

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
#!/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

    给创建的脚本添加执行权限。

1
2
3
cd  /usr/local/zabbix/scripts
chmod  +x tablespace_check.sh 
chmod  +x discovery_oracle_tablespace.sh

    检查脚本的输入情况是否正常,如下图:

1
2
3
4
5
[root@mail ~] # /usr/local/zabbix/scripts/tablespace_check.sh pre SYSTEM
100
[root@mail ~] # /usr/local/zabbix/scripts/tablespace_check.sh fre SYSTEM   
25559040[root@mail ~] # /usr/local/zabbix/scripts/tablespace_check.sh check SYSTEM   
1

4、为Zabbix增加监控Key

    在Zabbix客户端配置文件/etc/zabbix/zabbix_agentd.conf增加如下参数:

1
Include= /etc/zabbix/zabbix_agentd .conf.d/*.conf

    创建文件/etc/zabbix/zabbix_agentd.conf.d/oracle_tablespace.conf,内容如下:

1
2
UserParameter=discovery.oracle.tablespace, /usr/local/zabbix/scripts/discovery_oracle_tablespace .sh
UserParameter=tablespace.check[*], /usr/local/zabbix/scripts/tablespace_check .sh $1 $2

   重新启动Zabbix客户端服务。

1
service zabbix_agentd restart

5、在Zabbix服务端测试监控Key

    测试结果如下,一切正常。

1
2
3
4
5
6
[root@monitor bin] # ./zabbix_get -s 10.0.2.64 -k tablespace.check[pre,SYSTEM]
100
[root@monitor bin] # ./zabbix_get -s 10.0.2.64 -k tablespace.check[fre,SYSTEM]
25559040
[root@monitor bin] # ./zabbix_get -s 10.0.2.64 -k tablespace.check[check,SYSTEM]
1

四、Zabbix服务端配置

1、创建模板,并添加自动发现规则

6c0ce1348ef371d6d6b32f24a6ec1d5f.jpg

1
2
3
Name:Oracle tablespace discover
Type:Zabbix agent
Key:discovery.oracle.tablespace

2、创建Item prototypes

   这里主要添加的三个item就是我们获取到的三个指标,我这里只演示使用率的配置,大家可以通过附件下载我的模板,直接导入即可。

ef16b91540c0a80300b5ee6688bdd77c.jpg

使用率:

b9a3a825d0be269b8c9d78d27e7a64ef.jpg

1
2
3
Name:Oracle tablespace:{ #TABLESPACE_NAME} 使用率
Type:Zabbix agent
Key:tablespace.check[pre,{ #TABLESPACE_NAME}]

3、创建Trigger prototypes

    同样,这里有两个触发器,我这里只演示当表空间使用率超过95%报警的信息配置。

93b180ee137f23572bdd4f4339d8b551.jpg


e5ce7de6a7de7e3e0f61fe8b5c93f23e.jpg

4、创建Graph prototypes

bac73d007e053165c5ac2b05680a8e71.jpg

五、结果验证

    等待一段时间的发现之后,我们可以看到主机发现了相关的监控项,并可以执行报警信息。

92eadd9765374005847aaa48d8e5063b.jpg

   USERS表空间的图标情况:

a5d0363dbed8f9e80994f36c8eed20b3.jpg

    注意:以上的监控时间间隔和告警级别大家可以根据自己的实际情况设定,我这里只是进行演示配置而已。





     本文转自 wzlinux 51CTO博客,原文链接:http://blog.51cto.com/wzlinux/1974523,如需转载请自行联系原作者


相关文章
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
32 2
|
3月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
4月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
75 4
|
4月前
|
监控 关系型数据库 机器人
小白带你学习linux的监控平台zabbix
小白带你学习linux的监控平台zabbix
134 0
|
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实例分享)
221 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

推荐镜像

更多