Zabbix的自定義鍵值和自動發現功能監控Oracle數據庫的表空間


   前面介紹了利用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.  添加發現規則
  之前安裝過orabbix,直接在Template_Oracle下添加發現規則
 
5.1 創建發現規則
模板-->Template_Oracle-->創建自動發現規則
 
名稱:tablespacediscovery
鍵值:ora.tab.discovery
數據更新間隔:60
 

 

5.2 給發現規則創建監控項原型

名稱:{#TABLENAME}autopercent

鍵值:tablespace[{#TABLENAME},autopercent]

新的應用集:tablespace

同樣的方法創建剩下的兩個監控原型

注意autopercent的單位是浮點型

5.3  創建圖形原型

名稱:{#TABLENAME}monitor

 

 整體的發現規則:

 

過一分鍾左右就會產生監控到的數據了

圖形界面

 

我的模板附件:http://files.cnblogs.com/files/zydev/zbx_export_templates.xml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM