前面介紹了利用Orabbix監控了,參考zabbix通過Orabbix監控oracle數據庫,這里我們原先的模板中進行了修改,使用自動發現功能實現監控tablespace的使用情況。
1. 在被監控的數據庫機器上創建3個shell腳本
1.1 得到表空間的使用情況
[oracle@oracledb shellScripts]$ cat /home/oracle/shellScripts/query_tablespace_usage.sh source /home/oracle/.bash_profile sqlplus -s zabbix/zabbix > /tmp/tablespace.log<<EOF set linesize 140 pagesize 10000 col "Status" for a10 col "Name" for a25 col "Type" for a10 col "Extent" for a15 col "Size (M)" for a15 col "Used (M)" for a15 col "Used %" for a20 SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent", TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990') "Size (M)", TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,'999,999,999') "Used (M)", TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990.00') "Used %" FROM sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY') UNION ALL SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent", TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,999') "Size (M)", TO_CHAR(NVL(t.bytes,0)/1024/1024,'999,999,999') "Used (M)", TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Used %" FROM sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a, (select tablespace_name, sum(bytes_cached) bytes from v\$temp_extent_pool group by tablespace_name) t WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) AND d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY' ORDER BY 7; EOF
通過這個腳本我們可以得到表空間的使用情況,並記錄在/tmp/tablespace.log中
1.2 通過腳本取得表空間的名字,並轉換成json格式的(因為zabbix的自動發現功能獲取的數據類型是JSON格式的)
[oracle@oracledb ~]$ cat /usr/local/zabbix-3.6.2/scripts/oracle_discovery.sh #!/bin/bash TABLESPACE=`cat /tmp/tablespace.log |awk '{print$2}'|awk 'NR>3{print}'` COUNT=`echo "$TABLESPACE" |wc -l` INDEX=0 echo '{"data":[' echo "$TABLESPACE" | while read LINE; do echo -n '{"{#TABLENAME}":"'$LINE'"}' INDEX=`expr $INDEX + 1` if [ $INDEX -lt $COUNT ]; then echo ',' fi done echo ']}'
執行腳本可以得到
[oracle@oracledb ~]$ /usr/local/zabbix-3.6.2/scripts/oracle_discovery.sh {"data":[ {"{#TABLENAME}":"COSTCTL_TBS_TEMP"}, {"{#TABLENAME}":"PDMS_DATA_TEMP"}, {"{#TABLENAME}":"UNDOTBS1"}, ..................... .................... {"{#TABLENAME}":"TBLSPACE_PAYMENT"}, {"{#TABLENAME}":"TBLSPACE_CLAIM"}, {"{#TABLENAME}":"TBLSPACE_PAYMENTIDX"}, {"{#TABLENAME}":"TEMP"}, {"{#TABLENAME}":"TBLSPACE_TEMP02"}, {"{#TABLENAME}":"SYSTEM"}]}
1.3 創建腳本獲取/tmp/tablespace.log中的最后3列
[oracle@oracledb ~]$ cat /usr/local/zabbix-3.6.2/scripts/oracle_ oracle_check.sh oracle_discovery.sh [oracle@oracledb ~]$ cat /usr/local/zabbix-3.6.2/scripts/oracle_check.sh #!/bin/bash EQ_DATA="$2" ZBX_REQ_DATA_TAB="$1" SOURCE_DATA=/tmp/tablespace.log case $2 in maxmb) grep -w "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $5*1024*1024}';; used) grep -w "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $6*1024*1024}';; autopercent) grep -w "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $7}';; *) echo $ERROR_WRONG_PARAM; exit 1;; esac exit 0
注意給/usr/local/zabbix-3.6.2/scripts這個目錄執行權限
2. zabbixagent配置文件添加自定義監控key
在/usr/local/zabbix-3.6.2/etc/zabbix_agentd.conf文件末尾添加:
UserParameter=ora.tab.discovery,/usr/local/zabbix-3.6.2/scripts/oracle_discovery.sh UserParameter=tablespace[*],/usr/local/zabbix-3.6.2/scripts/oracle_check.sh $1 $2
3. 將query_tablespace_usage.sh放到系統自動任務中,每隔一分鍾執行。
*/1 * * * * /home/oracle/shellScripts/query_tablespace_usage.sh > /home/oracle/shellScripts/oracle_cron.sh.log 2>&1
4. 重啟zabbix_agentd,使配置生效
/etc/init.d/zabbix_agentd restart
可以在zabbix服務端看是否得到客戶端傳來的數據
[root@lanmp bin]# ./zabbix_get -s 192.168.0.92 -k "tablespace[USERS autopercent]" 94.55 [root@lanmp bin]# ./zabbix_get -s 192.168.0.92 -k "tablespace[USERS maxmb]" 70 [root@lanmp bin]# ./zabbix_get -s 192.168.0.92 -k "tablespace[USERS used]" 66 [root@lanmp bin]# pwd /usr/local/zabbix-3.2.6/bin

5.2 給發現規則創建監控項原型
名稱:{#TABLENAME}autopercent
鍵值:tablespace[{#TABLENAME},autopercent]
新的應用集:tablespace
同樣的方法創建剩下的兩個監控原型
注意autopercent的單位是浮點型
5.3 創建圖形原型
名稱:{#TABLENAME}monitor
整體的發現規則:
過一分鍾左右就會產生監控到的數據了
圖形界面
我的模板附件:http://files.cnblogs.com/files/zydev/zbx_export_templates.xml