您好,登錄后才能下訂單哦!
監控需求
Oracle表空間使用率實時監控,當表空間使用率達到95%時觸發告警機制。Oracle表空間分為系統默認表空間和用戶創建的表空間,而表空間又有自動擴展和非自動擴展兩種類型,用戶(DBA)在創建表空間時可以根據應用需求指定是否開啟表空間自動擴展。那么在這里我們需要分析一個監控策略,就是當zabbix監控到某個表空間使用率達到95%,那么就讓觸發器觸發警告(Warning)信息,并發送郵件給DBA或管理者。當檢測到表空間沒有開啟自動擴展時,則觸發Information信息。說明一下:oracle表空間是否開啟自動擴展以及最大能擴展到多少在最初應該規劃好的,有時在創建表空間時指定初始容量和最大能擴展的容量一致的話,那么就會讓這個表空間立即擁有最大能擴展的容量,而不是隨著表空間的消耗而慢慢增加。所以即使我們檢測到該表空間開啟了自動擴展功能,實際上也不會繼續擴展了。當然在大多數業務場景下一般是不建議開啟表空間自動擴展功能的,除非你的業務是非關鍵的。回到監控這里,當我們同時收到這兩個告警信息時,那么就要及時處理oracle表空間使用率大于95%的問題了。
監控方式
有了zabbix監控系統,我們可以定制任何需要的監控項目,首先通過自動發現腳本發現oracle表空間,然后再制定額外的屬于oracle表空間的監控項目,配置告警觸發器,最后在zabbix的Web頁面端展示oracle表空間的使用率和剩余量。
獲取oracle數據庫表空間信息的原始腳本和自動發現腳本
Oracle表空間的信息需要SQL語句查詢得到,因此,我們首先創建一個獲取表空間信息的原始腳本/home/oracle/bin/check_tablespace.sh,這個腳本由oracle用戶去執行,腳本編寫如下:
oracle@hmracdb1:~/bin> cat check_tablespace.sh #!/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@hmracdb1:~/bin> ls -l /tmp/ora_* -rw-r--r-- 1 oracle oinstall 1030 Mar 23 20:50 /tmp/ora_autex.txt -rw-r--r-- 1 oracle oinstall 929 Mar 23 20:50 /tmp/ora_tablespace.txt oracle@hmracdb1:~/bin> cat /tmp/ora_tablespace.txt TABLESPACE_NAME TOTAL FREE USAGE ------------------------------------------------------------ ---------- ---------- ---------- TEST11 50 49 1 SYSAUX 2048 1197 851 UNDOTBS1 2048 2036.3125 11.6875 USERS 1024 1023 1 SYSTEM 2048 1358.375 689.625 UDB_SPACE 40960 31673.875 9286.125 UNDOTBS2 2048 2035.1875 12.8125 7 rows selected. oracle@hmracdb1:~/bin> cat /tmp/ora_autex.txt TABLESPACE_NAME AUTOEX ------------------------------------------------------------ ------ SYSTEM YES SYSAUX YES UNDOTBS1 YES UNDOTBS2 YES USERS YES UDB_SPACE YES UDB_SPACE YES TEST11 YES 8 rows selected.
我們需要把腳本放到oracle用戶的crontab計劃任務表中,讓腳本在后臺每5分鐘執行一次,一定要保證計劃任務能正常按計劃執行,否則這可能會被監控欺騙(監控端獲取到的數據一直保持不變)。
hmracdb1:~ # crontab -u oracle -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.XXXXj0XHiH installed on Thu Mar 23 11:38:37 2017) # (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $) */5 * * * * /home/oracle/bin/check_tablespace.sh
手動執行SQL語句獲取表空間使用率
SQL> set linesize 200 select ff.s tablespace_name, ff.b total, (ff.b - fr.b)usage, fr.b free, round((ff.b - fr.b) / ff.b * 100) || '% ' usagep from (select tablespace_name s, sum(bytes) / 1024 / 1024 b from dba_data_files group by tablespace_name) ff, (select tablespace_name s, sum(bytes) / 1024 / 1024 b from dba_free_space group by tablespace_name) fr 12 where ff.s = fr.s; TABLESPACE_NAME TOTAL USAGE FREE USAGEP ------------------------------------------------------------ ---------- ---------- ---------- ------------------------------------------------------------------------------------ TEST11 50 1 49 2% SYSAUX 2048 851.375 1196.625 42% UNDOTBS1 2048 12.6875 2035.3125 1% USERS 1024 1 1023 0% SYSTEM 2048 689.625 1358.375 34% UDB_SPACE 40960 9286.125 31673.875 23% UNDOTBS2 2048 12.8125 2035.1875 1% 7 rows selected.
下面編寫一個zabbix自動發現oracle表空間的腳本discovery_oracle_tablespace.sh
hmracdb1:~ # cat 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"
賦予腳本執行權限,并放到$ZABBIX_HOME/scripts/目錄下,下面是執行該腳本輸出為json格式的oracle表空間的信息
hmracdb1:/opt/zabbix/scripts # ./discovery_oracle_tablespace.sh { "data":[ {"{#TABLESPACE_NAME}":"TEST11"}, {"{#TABLESPACE_NAME}":"SYSAUX"}, {"{#TABLESPACE_NAME}":"UNDOTBS1"}, {"{#TABLESPACE_NAME}":"USERS"}, {"{#TABLESPACE_NAME}":"SYSTEM"}, {"{#TABLESPACE_NAME}":"UDB_SPACE"}, {"{#TABLESPACE_NAME}":"UNDOTBS2"} ] }
監控項目檢測腳本tablespace_check.sh用于zabbix獲取oracle表空間使用率、剩余量和檢查是否開啟自動擴展。
hmracdb1:~ # cat 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
確認腳本輸出的值為zabbix監控所取的數值
hmracdb1:~ # ./tablespace_check.sh pre SYSTEM 34 hmracdb1:~ # ./tablespace_check.sh fre SYSTEM 1424359424hmracdb1:~ # ./tablespace_check.sh check SYSTEM 1
將腳本都保存到$ZABBIX_HOME/scpirts目錄下,然后配置UserParameter參數,增加監控key,key名稱分別為discovery.oracle.tablespace、tablespace.check,在以下配置文件末尾增加兩行
hmracdb1:/opt/zabbix/scripts # vim ../etc/zabbix_agentd.conf.d/userparameter_script.conf UserParameter=discovery.oracle.tablespace[*],/opt/zabbix/scripts/discovery_oracle_tablespace.sh UserParameter=tablespace.check[*],/opt/zabbix/scripts/tablespace_check.sh $1 $2
重啟zabbix_ahgentd
在zabbix服務端獲取oracle表空間和監控數值
[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'tablespace.check[pre,SYSTEM]' -s 10.xxx.xxx.xxx 34 [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'tablespace.check[fre,SYSTEM]' -s 10.xxx.xxx.xxx 1424359424 [root@Zabbix_19F ~]# zabbix_get -p10050 -k 'tablespace.check[check,SYSTEM]' -s 10.xxx.xxx.xxx 1
Zabbix Web端配置
新建oracle表空間模版My_Templates_Linux_Discovery_oracle_tablespace,添加自動發現規則,10分鐘更新一次
添加Item prototypes監控項目,第一個表空間使用率
第二個表空間剩余容量
第三個檢查表空間是否開啟自動擴展
創建告警觸發器
首先創建檢測表空間使用率是否大于95%的觸發器
創建檢測是否開啟自動擴展的觸發器
查看監控數據
到這里,zabbix監控oracle表空間使用率就完成了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。