监控Oracle表空间
编写自动发现规则,监控Oracle表空间的使用率、剩余空间;
1、编写获取Oracle表空间的shell脚本 check_tablespace.sh,放入到计划任务执行
#!/bin/bash
#
# Oracle tablespace usagep check
# Run this script in crond at oracle user
source ~/.bash_profile
# check tableSpace funtion
check {
sqlplus -S user/passwd@orcl << 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 /tmp/ora_autex.txt
select tablespace_name,autoextensible from dba_data_files;
spool off
exit
EOF
}
# Execute command and log into file
check &> /dev/null
将脚本放入计划任务执行:
# check Oracle tablespace usagep and process by use zabbix
5 * * * * bash /opt/zabbix/share/script/check_tablespace.sh
2、编写生成自动发现规则模板的shell脚本discovery_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、编写zabbix获取数据脚本zabbix_check_tablespace.sh
#!/bin/bash
#
# zabbix check oracle tablespace
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 -i "YES" &>/dev/null;then
echo "YES"
else
echo "NO"
fi
}
case $CEHCK_TYPE in
pre)
usagepre ;;
free)
available ;;
check)
check ;;
*)
echo -e "Usage: $0 [pre|free|check] [TABLESPACE_NAME]"
esac
4、在zabbix_agentd上增加UserParamete
[zabbix@DB1 ~]$ cat /opt/zabbix/etc/zabbix_agentd.conf.d/oracle.conf
## tablespace
UserParameter=discovery.oracle.tablespace[*],/bin/bash /opt/zabbix/share/script/discovery_tablespace.sh
UserParameter=tablespace.check[*],bash /opt/zabbix/share/script/zabbix_check_tablespace.sh $1 $2
5、服务端测试键值(客户端需要先重启)
[root@zabbix ]# zabbix_get -s 192.168.1.10 -p 10050 -k 'tablespace.check[pre,SYSTEM]'
43
[root@zabbix ]# zabbix_get -s 192.168.1.10 -p 10050 -k 'tablespace.check[free,SYSTEM]'
15194.5
[root@zabbix ]# zabbix_get -s 192.168.1.10 -p 10050 -k 'tablespace.check[check,SYSTEM]'
0
6、增加监控模板
6.1、添加自动发现规则
Oracle_TableSpace:{#TABLESPACE_NAME}使用率
tablespace.check[pre,{#TABLESPACE_NAME}]
6.2、添加自动发现规则下的监控项目--表空间使用率
Oracle_TableSpace:{#TABLESPACE_NAME}使用率
tablespace.check[pre,{#TABLESPACE_NAME}]
6.3、添加自动发现规则下监控规则--表空间剩余空间
Oracle_TableSpace:{#TABLESPACE_NAME}可用容量
tablespace.check[free,{#TABLESPACE_NAME}]
6.4、创建触发器,使用率大于80%则告警
7、效果图
资料下载
上传的资料包含监控模板、数据库连接数监控、表空间自动发现规则(监控),下载地址