自动发现规则
监控项原型
定期删除归档日志脚本
#!/bin/bash su - oracle -c "rman target /" cat>/home/check/guidang<<EOF DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1'; DELETE NOPROMPT BACKUPSET COMPLETED BEFORE 'SYSDATE-1'; exit EOF配合计划任务执行即可,例如
00 10 * * 5 /home/SZSqxf/ora_guidang.sh接下来是其他各种脚本不再做配置演示了思路都是一样的。
取值脚本
#!/bin/bash check() { #portarray=(`grep [a-Z] /tmp/database.log | awk '{print $1}'`) #length=${#portarray[@]} printf "{\n" printf '\t' "\"data\":[" #for ((i=0;i<$length;i++)) # do printf '\n\t\t{' printf "\"{#STATUS_NAME}\":\"BACKUP\"}" #if [ $i -lt $[$length-1] ];then #printf ',' # fi #done printf "\n\t]\n" printf "}\n" } back() { status=`grep [0-9] /tmp/backup_status.log | awk '{print $1}'` echo "$status" } stat(){ stat=`grep [a-Z] /tmp/backup_status.log | awk 'NR==3 {print $1}'` if [ "$stat" == COMPLETED ]; then echo "0" else echo "1" fi } $1 # 备份back 函数值大于0 为正常执行。 # 备份状态 stat函数 值为COMPLETED 输出 0 表示正常。不为COMPLETED 为1 表示执行失败。表空间名称取值脚本
#!/bin/bash #zabbix discovery oracle tablespace table_spaces=(`cat /tmp/tablespace.log | 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"表空间使用率取值脚本
#!/bin/bash # oracle tablespace check CEHCK_TYPE= $1 TABLESPACE_NAME= $2 function usagepre { grep "\b$TABLESPACE_NAME\b" /tmp/tablespace.log | awk '{printf "%.f\n",($2-$3)/$2*100}' } function available { grep "\b$TABLESPACE_NAME\b" /tmp/tablespace.log | awk '{printf $3*1024*1024}' } function check { if grep "\b$TABLESPACE_NAME\b" /tmp/tablespace.log | 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表空间变量名脚本
#!/bin/bash #zabbix discovery oracle tablespace table_spaces=(`cat /tmp/temp_tablespace.log | grep TEMP | 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"取值脚本
#!/bin/bash CEHCK_TYPE= $1 TABLESPACE_NAME= $2 function usagepre { grep "\b$TABLESPACE_NAME\b" /tmp/temp_tablespace.log | cut -d% -f1 | awk '{print $2}' } #function available { # grep "\b$TABLESPACE_NAME\b" /tmp/temp_tablespace.log | awk '{printf $3*1024*1024}' #} case $CEHCK_TYPE in pre) usagepre ;; #fre) # available ;; *) echo -e "Usage: $0 [pre] [TABLESPACE_NAME]" esac
输出结果
取值脚本
#!/bin/bash check() { #portarray=(`grep [a-Z] /tmp/database.log | awk '{print $1}'`) #length=${#portarray[@]} printf "{\n" printf '\t' "\"data\":[" #for ((i=0;i<$length;i++)) # do printf '\n\t\t{' printf "\"{#PARTITION_NAME}\":\"SMSDB\"}" #if [ $i -lt $[$length-1] ];then #printf ',' # fi #done printf "\n\t]\n" printf "}\n" } num=`date +%Y%m%d --date= '1 day'` date() { date=(`grep -v [a-Z] /tmp/p_create_smsdb.log | awk 'NR==3 {print $1}'`) #echo $date if [ $date -eq $num ]; then echo "0" else echo "1" fi } $1 # 如果日期为第二天输出为0,表示存储过程执行成功 # 如果日志不是第二天输出为1 表示存储过程执行失败 # zabbix 触发器规则就是 值不为0的时候告警还有其他脚本就不一一贴出来了, 说下大体思路吧。
分区交换脚本思路
例如table1定期为4天数据交换到table2表中,我们利用select count(*) 语句查询table1中4天之前数据,如果结果为0表示数据交换成功。不为0则异常
