zabbix通過orabbix和自訂指令碼監控oracle資料庫

來源:互聯網
上載者:User

標籤:zabbix   oracle   orabbix   指令碼   自動探索   

由於公司要上oracle資料庫,需要對這個東西驚醒監控,於是去網上淘資料,發現有一個套件orabbix監控oracle的效果還不錯,於是拿來實驗了一下。orabbix是由JAVA寫的一個套件,需要在oracle伺服器上面安裝JAVA環境才能運行。這裡為了簡便,可以使用yum -y install java來安裝JAVA環境。

安裝完java環境之後可以通過下面命令來檢測是否安裝成功:

[[email protected] ~]# java -versionjava version "1.7.0_45"OpenJDK Runtime Environment (rhel-2.4.3.3.0.1.el6-x86_64 u45-b15)OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

如我上面這樣顯示就證明java環境已經安裝成功了。

之後,我們就需要在oracle伺服器上面安裝orabbix套件了,可以去官網下載,目前最新版本是1.2.3,為:http://www.smartmarmot.com/downloads/orabbix-1.2.3.zip

下載完之後將其解壓到/opt目錄下,接下來,需要配置orabbix的設定檔了。先將設定檔的模板複製一份出來,然後開始配置:

cp orabbix/conf/config.props.sample orabbix/conf/config.propsvi !$#comma separed list of Zabbix serversZabbixServerList=ZabbixServer1ZabbixServer1.Address=10.6.0.180              #zabbix伺服器的IP地址ZabbixServer1.Port=10051                      #zabbix伺服器的監聽連接埠#pidFileOrabbixDaemon.PidFile=./logs/orabbix.pid#frequency of item‘s refreshOrabbixDaemon.Sleep=300#MaxThreadNumber should be >= than the number of your databasesOrabbixDaemon.MaxThreadNumber=100#put here your databases in a comma separated listDatabaseList=DB_QM                            #這個名字可以自行命名,但是需要和下面的名字保持一致,並且在zabbixserver上面配置的主機名稱要和這個保持一致#Configuration of Connection pool#if not specified Orabbis is going to use default values (hardcoded)#Maximum number of active connection inside poolDatabaseList.MaxActive=10#The maximum number of milliseconds that the pool will wait#(when there are no available connections) for a connection to be returned#before throwing an exception, or <= 0 to wait indefinitely.DatabaseList.MaxWait=100DatabaseList.MaxIdle=1#define here your connection string for each databaseDB_QM.Url=jdbc:oracle:thin:@10.6.0.207:1521:test        #orabbix是通過jdbc連結oracle資料庫的,orcl指定的是被監控伺服器的串連資訊(例如採用jdbc的聯結方式,伺服器位址是10.6.0.207,oracle的連接埠是1521,test指的是資料庫的執行個體)DB_QM.User=zabbix                                       #連結oracle資料庫的帳號密碼,這個需要在oracle資料庫中配置DB_QM.Password=123456#Those values are optionals if not specified Orabbix is going to use the general valuesDB_QM.MaxActive=10                                      #刪除用不到的多餘的配置,保留這些就可以了。DB_QM.MaxWait=100DB_QM.MaxIdle=1DB_QM.QueryListFile=./conf/query.props#DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2

然後在oracle資料庫中建立zabbix使用者:

CREATE USER ZABBIX IDENTIFIED BY 123456  DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;     GRANT CONNECT TO ZABBIX;     GRANT RESOURCE TO ZABBIX;     ALTER USER ZABBIX DEFAULT ROLE ALL;     GRANT SELECT ANY TABLE TO ZABBIX;     GRANT CREATE SESSION TO ZABBIX;     GRANT SELECT ANY DICTIONARY TO ZABBIX;     GRANT UNLIMITED TABLESPACE TO ZABBIX;     GRANT SELECT ANY DICTIONARY TO ZABBIX;

如果是Oracle 11g,則需要添加如下命令

execdbms_network_acl_admin.create_acl(acl => ‘resolve.xml‘,description =>‘resolve acl‘, principal =>‘ZABBIX‘, is_grant => true, privilege =>‘resolve‘);exec dbms_network_acl_admin.assign_acl(acl=> ‘resolve.xml‘, host =>‘*‘);commit;

複製orabbix開機檔案到etc目錄下:

cp /opt/orabbix/init.d/orabbix/etc/init.d/orabbixchmod 755 !$

啟動orabbix

systemctl start orabbixchkconfig --add orabbixchkconfig orabbix on

啟動orabbix之後,沒有報錯,證明啟動成功,如果有報錯,一般是設定檔的問題,仔細排查一下應該就沒問題。

啟動之後,還需要安裝上zabbix agentd用戶端,至於怎樣安裝agentd用戶端在我的另一篇部落格中有介紹,這裡就不贅述了。傳送門在這裡

安裝完之後,將模板匯入到zabbixserver中:

匯入模版,模版放置在/opt/orabbix/template下

Orabbix_export_full.xml   全部匯入(圖表 監控項 觸發器)

Orabbix_export_graphs.xml  圖表

Orabbix_export_items.xml   監控項

Orabbix_export_triggers.xml 觸發器

這裡匯入所有的模板,匯入模版之後,將oracle主機添加進zabbixserver中,如所示

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/70/E5/wKiom1XAjHPj0GI7AANFnohw7Rw359.jpg" title="1.png" alt="wKiom1XAjHPj0GI7AANFnohw7Rw359.jpg" />

配置完之後,正常的話就能夠監控oracle資料庫的資訊了。

下面是出圖後的效果:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/70/E4/wKioL1XAl9WwyB-EAAUg8S2lq7M100.jpg" title="2.png" alt="wKioL1XAl9WwyB-EAAUg8S2lq7M100.jpg" />

本來到這裡就結束了,但是前面這些都不是重點,重點是後面同事需求監控oracle資料庫的tablespace的使用量,於是,為了實現這個需求,我在原先的模板中進行了修改。,使用自動探索功能實現監控tablespace的使用方式。

首先,需要建立指令碼,擷取到oracle資料庫中的資料,下面是指令碼:

[[email protected] opt]# cat /home/oracle/oracle_cron.sh #!/bin/bashsource /home/oracle/.bash_profilesqlplus -s zabbix/123456  > /tmp/tablespace.log<<EOFset linesize 140 pagesize 10000col "Status"   for a10col "Name"     for a25col "Type"     for a10col "Extent"   for a15col "Size (M)" for a20col "Used (M)" for a20col "Used %"   for a20SELECT 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_filesgroup 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

通過執行這個指令碼可以擷取到moracle資料庫中的tablespace列表,並輸出到/tmp/tablespace.log日誌中去,這個執行指令碼需要修改屬主屬組為oracle.oracle,並且需要給於執行許可權,在crontab中設定每一分鐘執行一次,下面是執行得到的結果:

[[email protected] opt]# cat /tmp/tablespace.log Status   Name      TypeExtentSize (M)     Used (M)  Used %---------- ------------------------- ---------- --------------- -------------------- -------------------- --------------------ONLINE   UNDOTBS1     UNDOLOCAL280       12     4.38ONLINE   QWERTY     PERMANENTLOCAL 101    10.00ONLINE   USERS     PERMANENTLOCAL  51    20.00ONLINE   SYSTEM     PERMANENTLOCAL700      377    53.88ONLINE   TEMP      TEMPORARYLOCAL 20       11    55.00ONLINE   SYSAUX     PERMANENTLOCAL550      400    72.786 rows selected.

上面就是取出來的資料,既然資料取出來了,那麼剩下的要做的就是把資料弄到zabbix中去咯。

下面將使用下面兩個指令碼來對取出的這些資料進行格式化轉換和取值:

[[email protected] opt]# cat /usr/local/zabbix/scripts/oracle_discovery.sh #!/bin/bashTABLESPACE=`cat /tmp/tablespace.log |awk ‘{print$2}‘|awk ‘NR>3{print}‘`COUNT=`echo "$TABLESPACE" |wc -l`INDEX=0echo ‘{"data":[‘echo "$TABLESPACE" | while read LINE; do    echo -n ‘{"{#TABLENAME}":"‘$LINE‘"}‘    INDEX=`expr $INDEX + 1`    if [ $INDEX -lt $COUNT ]; then        echo ‘,‘    fidoneecho ‘]}‘

這個指令碼的功能是從tablespace.log檔案中取出Name那一列,並進行JSON格式化輸出(因為zabbix的自動探索功能擷取的資料類型是JSON格式的),下面是執行效果:

[[email protected] opt]# sh /usr/local/zabbix/scripts/oracle_discovery.sh {"data":[{"{#TABLENAME}":"UNDOTBS1"},{"{#TABLENAME}":"QWERTY"},{"{#TABLENAME}":"USERS"},{"{#TABLENAME}":"SYSTEM"},{"{#TABLENAME}":"TEMP"},{"{#TABLENAME}":"SYSAUX"},{"{#TABLENAME}":""},{"{#TABLENAME}":"rows"}]}[[email protected] opt]#

 還有一個指令碼是擷取tablespace.log中的最後三列資料,指令碼內容如下:

[[email protected] opt]# cat /usr/local/zabbix/scripts/oracle_check.sh#!/bin/bashEQ_DATA="$2"ZBX_REQ_DATA_TAB="$1"SOURCE_DATA=/tmp/tablespace.logcase $2 in  maxmb)        grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $5*1024*1024}‘;;  used)   grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $6*1024*1024}‘;;  autopercent)  grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk ‘{print $7}‘;;  *) echo $ERROR_WRONG_PARAM; exit 1;;esacexit 0

其中maxmb和used取出的值是M,所以這裡給轉換成了byte,方便zabbix取值,下面是舉例取出來的值:

[[email protected] opt]# sh /usr/local/zabbix/scripts/oracle_check.sh SYSAUX maxmb576716800[[email protected] opt]#

這裡配置完成之後就需要在zabbixagentd的設定檔中添加監控key了:

[[email protected] opt]# tail -3 /usr/local/zabbix/etc/zabbix_agentd.confUserParameter=ora.tab.discovery,/usr/local/zabbix/scripts/oracle_discovery.shUserParameter=tablespace[*],/usr/local/zabbix/scripts/oracle_check.sh $1 $2

添加key之後需要重啟zabbix agentd服務。

然後我們就需要在zabbixserver中添加監控模板了,首先建立一個發現規則:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/70/E4/wKioL1XAnCDAq3xWAAJNDgXounY591.jpg" title="3.png" alt="wKioL1XAnCDAq3xWAAJNDgXounY591.jpg" />

其中的索引值ora.tab.discovery就是我們在agentd的設定檔中定義的,由這個發現規則擷取到的是一個JSON格式的傳回值。要注意其中的資料更新間隔,這個值指的是你的發現規則執行的時間間隔,我這裡暫時設定為60s

然後我們開始建立項目原型了,下面是建立的詳細內容:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/70/E7/wKiom1XAmuihaLLPAAJGOuKStD4770.jpg" title="5.png" alt="wKiom1XAmuihaLLPAAJGOuKStD4770.jpg" />

按照上面的項目原型依次建立{#TABLENAME}used和{#TABLENAME}autopercent,對應的索引值是tablespace[{#TABLENAME},used]和tablespace[{#TABLENAME},autopercent],建立完發現規則後,開始建立圖形原型了,下面是圖形原型的詳細內容:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/70/E7/wKiom1XAm7WCLfwvAAPBZVfNV_k297.jpg" title="6.png" alt="wKiom1XAm7WCLfwvAAPBZVfNV_k297.jpg" />

儲存完成後,該發現規則就做好了,之後等待大約一分鐘之後就可以看到採集到的資料了,這和上面設定的60s的資料更新間隔是一致的。下面是擷取到的監控tablespace的結果:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/70/E4/wKioL1XAnnKCDzfXAAQt59eAtrk089.jpg" title="7.png" alt="wKioL1XAnnKCDzfXAAQt59eAtrk089.jpg" />

好了,監控tablespace的目標暫時實現了,具體的一些細節還有待改進。附件中將會附上我的根據官網模板修改後的模板,好了,結束了,希望該教程能夠協助到大家!

本文出自 “檸檬” 部落格,請務必保留此出處http://xianglinhu.blog.51cto.com/5787032/1681687

zabbix通過orabbix和自訂指令碼監控oracle資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.