一、背景

接到任务,要求对所有数据库的所有表空间进行监控,愿意是遇到表空间不足导致业务数据库的不可用,我们知道通过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。

我们需要把脚本放到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、创建模板,并添加自动发现规则

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

2、创建Item prototypes

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

使用率:

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

3、创建Trigger prototypes

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

4、创建Graph prototypes

五、结果验证

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

USERS表空间的图标情况:

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

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

Zabbix 3.2.6 通过Discovery批量监控Oracle表空间相关推荐

  1. python创建数据库表空间_7.自动化监控多个Oracle表空间

    自动化监控多个Oracle表空间 上节讲了如何利用Python自动监控Oracle表空间使用率 这节会利用一个循环一次性查询多个表空间使用率 环境设置 Linux系统为 Centos 6.8 Pyth ...

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

    监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创 ...

  3. Zabbix监控系统系列之十五:自动发现Oracle表空间并监控

    ======= 系列目录 ======= Zabbix监控系统系列之一 : Server部署 Zabbix监控系统系列之二 : 初始化配置 Zabbix监控系统系列之三 :版本升级 Zabbix监控系 ...

  4. mysql 表空间监控shell_一种通过zabbix监控mysql表空间的方法

    一种通过zabbix监控mysql表空间的方法[ 技术领域: ][0001]本发明涉及计算机自动化运维与监控领域,具体地说是一种通过ZABBIX监控MYSQL表空间的方法.[ 背景技术: ][0002 ...

  5. oracle表空间 unifor,Oracle 表空间的监控

    现在所有业务系统上面都部署了各种类型针对各方面的监控,那么咱们Oracle也不例外,也需要做关于oracle方面的监控,比如实例的存活状况,监听器的存活状况,系统的运行情况(包括,磁盘使用率,进程数, ...

  6. 自动监控Oracle 表空间信息并发送邮件脚本

    服务器越来越多了,日常管理起来也越来越麻烦,也没找到特别称心如意的工具,如何自动的监控Oracle 告警日志和表空间信息呢?加入一台服务器有多个实例又如何监控呢?自己动手写了一个小shell,贴出来以 ...

  7. 批量迁移oracle表存储

    场景:网友marine遇到问题,要求将某用户的表从表空间A移动到表空间B,用户表的个数在1000+以上 分析1:首先可以确定的是针对用户单张表移动表空间使用alter table table_name ...

  8. zabbix监控oracle缓冲区,Zabbix监控oracle各服务器连接数

    需求: 根据机器名查询oracle连接数,并通过zabbix进行监控 脚本: [root@rac1 Zabbix_S]# cat get_conns.py #!/usr/bin/python #cod ...

  9. zabbix mysql 表空间_Zabbix监控达梦数据库表空间

    技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...

最新文章

  1. nginx在linux下安装,Nginx在linux下安装及简单命令
  2. 让Hinton后悔投少了的AI公司:吴恩达弟子徒孙创办,LeCun李飞飞Jeff Dean投资,产品让人无法拒绝...
  3. controller配对与接触配对
  4. 无聊说说 strong VS weak
  5. Error:To install them, you can run: npm install --save vue-style-loader css-loader……
  6. 微软Azure、谷歌GAE、亚马逊AWS比較
  7. Symantec 赛门铁克招聘 Security Response Manager
  8. fluidsim元件库下载_FluidSIM
  9. 掂清自己在别人心中的分量,是人际…
  10. ACM中国国家集训队论文集目录(1999-2009)
  11. 利用vegas去除视频水印
  12. 微服务开发中的数据架构设计 1
  13. libuv访问mysql_浅析libuv源码-编译启动
  14. springboot项目接入天猫精灵
  15. 【趣题分享】关于蒋干盗书你所需要知道的
  16. 业界首家720p/1080p移动端实时超分,打造抖音极致画质体验
  17. 遇到的问题以及解决办法
  18. 挖掘高流量网站长尾词
  19. python实现按键精灵的功能_利用Python实现Windows下的鼠标键盘模拟的实例代码
  20. [音乐] 《犬夜叉》主题曲 Misses beyond time - 穿越时空的思念

热门文章

  1. 飘逸的python - property及实现lazy property
  2. windows installer清理实用工具
  3. Redhat 6 git 服务器 配置 (http)
  4. WinCE下冷启动程序自动安装装载
  5. java操作mongodb基础(查询 排序 输出list)
  6. MySQL数据类型以及元数据的使用
  7. 乐视美国官网下线,官方公告称一周后还会回来
  8. str函数和repr函数的区别
  9. AngularJs 基础教程​ —— Select(选择框)
  10. 03Spring_bean的创建和作用域以及生命周期