一、Oracle客户端配置
1、创建脚本check_tablespace.sh
Oracle表空间的信息需要SQL语句查询得到,因此,我们首先创建一个获取表空间信息的原始脚本/home/oracle/check_tablespace.sh,这个脚本由oracle用户去执行,脚本内容如下:
- #!/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计划任务表中,让脚本在后台每5分钟执行一次,一定要保证计划任务能正常按计划执行,否则这可能会被监控欺骗(监控端获取到的数据一直保持不变)。
- [oracle@mail ~]$ crontab -l
- */5 * * * * /home/oracle/check_tablespace.sh
2、创建脚本discovery_oracle_tablespace.sh
通过脚本取得表空间的名字,并转换成json格式的(因为zabbix的自动发现功能获取的数据类型是JSON格式的)。
下面编写一个zabbix自动发现oracle表空间的脚本,我这里的脚本路径是/etc/zabbix/scripts/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\”
3、创建监控项目检测脚本tablespace_check.sh
用于zabbix获取oracle表空间使用率、剩余量和检查是否开启自动扩展。脚本为/etc/zabbix/scripts/tablespace_check.sh,脚本内容如下:
[/code]
- #!/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
[/code]给创建的脚本添加执行权限。
- cd /etc/zabbix/scripts
- chmod +x tablespace_check.sh
- chmod +x discovery_oracle_tablespace.sh
[/code]
4、为Zabbix增加监控Key
在Zabbix客户端配置文件/etc/zabbix/zabbix_agentd.conf增加如下参数:
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
[/code]创建文件/etc/zabbix/zabbix_agentd.conf.d/oracle_tablespace.conf,内容如下:
- UserParameter=discovery.oracle.tablespace,/etc/zabbix/scripts/discovery_oracle_tablespace.sh
- UserParameter=tablespace.check[*],/etc/zabbix/scripts/tablespace_check.sh $1 $2
[/code]重新启动Zabbix客户端服务。
- service zabbix_agentd restart
- 或
- cd /etc/init.d
- ./zabbix-agent restart
[/code]
5、在Zabbix服务端测试监控Key
测试结果如下,一切正常。
- [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
[/code]
二、Zabbix服务端配置
1、创建模板,并添加自动发现规则
- Name:Oracle tablespace discover
- Type:Zabbix agent
- Key:discovery.oracle.tablespace
[/code]
2、创建监控项
这里主要添加的三个监控项,须在自动发现规则中建立,监控项原型,就是我们获取到的三个监控项指标,大家可以通过附件下载我的模板,直接导入即可。(3.4.8)
zabbix 3.4.8 监控表空间模板文件
- Oracle tablespace:{#TABLESPACE_NAME} 使用率
- tablespace.check[pre,{#TABLESPACE_NAME}]
- Oracle tablespace:{#TABLESPACE_NAME} 可用大小
- tablespace.check[fre,{#TABLESPACE_NAME}]
[/code]
- Oracle tablespace:{#TABLESPACE_NAME} 是否自动化扩展
- tablespace.check[check,{#TABLESPACE_NAME}]
[/code]
3、创建触发器(原型)
创建两个触发器,一样需在自动发现中创建触发器原型
- Oracle tablespace is not autoextensible on {#TABLESPACE_NAME}
- {Template App Oracle Service:tablespace.check[check,{#TABLESPACE_NAME}].last()}=0
- {Template App Oracle Service:tablespace.check[check,{#TABLESPACE_NAME}].last()}=1
- Oracle tablespace tu use more 80% on {#TABLESPACE_NAME}
- {Template App Oracle Service:tablespace.check[pre,{#TABLESPACE_NAME}].last()}>80
- {Template App Oracle Service:tablespace.check[pre,{#TABLESPACE_NAME}].last()}<80
[/code]