一、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,脚本内容如下:
-
#!/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
给创建的脚本添加执行权限。
cd /etc/zabbix/scripts chmod +x tablespace_check.sh chmod +x discovery_oracle_tablespace.sh
4、为Zabbix增加监控Key
在Zabbix客户端配置文件/etc/zabbix/zabbix_agentd.conf增加如下参数:
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
创建文件/etc/zabbix/zabbix_agentd.conf.d/oracle_tablespace.conf,内容如下:
重新启动Zabbix客户端服务。
UserParameter=discovery.oracle.tablespace,/etc/zabbix/scripts/discovery_oracle_tablespace.sh UserParameter=tablespace.check[*],/etc/zabbix/scripts/tablespace_check.sh $1 $2
service zabbix_agentd restart 或 cd /etc/init.d ./zabbix-agent restart
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
二、Zabbix服务端配置
1、创建模板,并添加自动发现规则
Name:Oracle tablespace discover Type:Zabbix agent Key:discovery.oracle.tablespace
2、创建监控项
这里主要添加的三个监控项,须在自动发现规则中建立,监控项原型,就是我们获取到的三个监控项指标,大家可以通过附件下载我的模板,直接导入即可。(3.4.8)
Oracle tablespace:{#TABLESPACE_NAME} 使用率 tablespace.check[pre,{#TABLESPACE_NAME}]
Oracle tablespace:{#TABLESPACE_NAME} 可用大小 tablespace.check[fre,{#TABLESPACE_NAME}]
Oracle tablespace:{#TABLESPACE_NAME} 是否自动化扩展 tablespace.check[check,{#TABLESPACE_NAME}]
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