使用Zabbix監控Oracle資料庫

来源:http://www.cnblogs.com/raobing/archive/2016/12/22/6173529.html
-Advertisement-
Play Games

監控Oracle資料庫我們需要安裝第三方提供的Zabbix插件,我們先測試比較有名的Orabbix,http://www.smartmarmot.com/product/orabbix/ 從部署架構圖上可以看出,orabbix是通過JDBC去連接被監控資料庫的,其實不是必須在資料庫主機上安裝Agen ...


 

Orabbix介紹

監控Oracle資料庫我們需要安裝第三方提供的Zabbix插件,我們先測試比較有名的Orabbix,http://www.smartmarmot.com/product/orabbix/

clip_image001

從部署架構圖上可以看出,orabbix是通過JDBC去連接被監控資料庫的,其實不是必須在資料庫主機上安裝Agent,而運行orabbix的主機,可以是Zabbix Server,也可以是資料庫主機和zabbix server之外的任意一臺主機,為了測試方便,我們將orabbix安裝在Zabbix Server上。

下載軟體及安裝服務

Ø 下載 Orabbix ,上傳到你的 Zabbix Server

Ø unzip 軟體到這個目錄: /opt/orabbix

Ø 安裝服務:

Ø 複製啟動腳本

#cp /opt/orabbix/init.d/orabbix /etc/init.d/orabbix

Ø 運行許可權:

#chmod +x /etc/init.d/orabbix

#chmod +x /opt/orabbix/run.sh

Ø #chkconfig --add orabbix

建立監控用戶及授權

CREATE USER ZABBIX

IDENTIFIED BY welcome1

DEFAULT TABLESPACE SYSTEM

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

REM 2 Roles for ZABBIX

GRANT CONNECT TO ZABBIX;

GRANT RESOURCE TO ZABBIX;

ALTER USER ZABBIX DEFAULT ROLE ALL;

REM 5 System Privileges for ZABBIX

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;

如果是11g資料庫,執行下列語句:

exec dbms_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配置文件

#cd /opt/orabbix/conf

#cp config.props.sample config.props

根據實際的部署情況修改文件,比如:

#comma separed list of Zabbix servers

ZabbixServerList=ZabbixServer1

ZabbixServer1.Address=192.168.0.41 ##Zabbix伺服器地址

ZabbixServer1.Port=10051 ##Zabbix伺服器埠

#pidFile

OrabbixDaemon.PidFile=./logs/orabbix.pid

#frequency of item's refresh

OrabbixDaemon.Sleep=300

#MaxThreadNumber should be >= than the number of your databases

OrabbixDaemon.MaxThreadNumber=100

#put here your databases in a comma separated list

DatabaseList=DB1,DB2,DB3 ##資料庫列表,名稱隨便起

#Configuration of Connection pool

#if not specified Orabbis is going to use default values (hardcoded)

#Maximum number of active connection inside pool

DatabaseList.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=100

DatabaseList.MaxIdle=1

#define here your connection string for each database

DB1.Url=jdbc:oracle:thin:@192.168.0.31:1521:test1 ##資料庫連接串

DB1.User=zabbix ##監控資料庫用戶名

DB1.Password=welcome1 ##監控資料庫口令

保存配置文件,然後重啟orabbix。

導入模板

在orabbix的軟體包裡面有4各模板文件,導入下麵途中這個模板文件就可以了,包含了其他所有模板文件的內容。

clip_image002

適用Orabbix

在zabbix界面上配置資料庫監控時,要註意,orabbix是把每個資料庫都配置成一個“主機”的,這塊看著有點彆扭,而且,註意在配置主機時,名稱一定要和config.props文件中配置的資料庫名稱一樣,比如我這裡就是DB1:

clip_image003

前面說了,這個“主機”的地址可以隨便寫,因為被監控的主機端不需要一定有agent,但是為了方便管理,我覺得還是寫上Oracle主機的地址比較好。

定義了主機後,就可以適用模板中預定義的監控項、觸發器和圖表了。

比如圖表:

clip_image004

clip_image005

比如最簡單的檢查資料庫適用可用的觸發器:

clip_image006

當然,對應觸發器的動作還是需要自己配置。

自定義SQL檢查

Orabbix提供了表空間的監控,監控項對應的SQL:

tbl_space.Query=SELECT * FROM ( \

select '- Tablespace ->',t.tablespace_name ktablespace, \

'- Type->',substr(t.contents, 1, 1) tipo, \

'- Used(MB)->',trunc((d.tbs_size-nvl(s.free_space, 0))/1024/1024) ktbs_em_uso, \

'- ActualSize(MB)->',trunc(d.tbs_size/1024/1024) ktbs_size, \

'- MaxSize(MB)->',trunc(d.tbs_maxsize/1024/1024) ktbs_maxsize, \

'- FreeSpace(MB)->',trunc(nvl(s.free_space, 0)/1024/1024) kfree_space, \

'- Space->',trunc((d.tbs_maxsize - d.tbs_size + nvl(s.free_space, 0))/1024/1024) kspace, \

'- Perc->',decode(d.tbs_maxsize, 0, 0, trunc((d.tbs_size-nvl(s.free_space, 0))*100/d.tbs_maxsize)) kperc \

from \

( select SUM(bytes) tbs_size, \

SUM(decode(sign(maxbytes - bytes), -1, bytes, maxbytes)) tbs_maxsize, tablespace_name tablespace \

from ( select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name \

from dba_data_files \

union all \

select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name \

from dba_temp_files \

) \

group by tablespace_name \

) d, \

( select SUM(bytes) free_space, \

tablespace_name tablespace \

from dba_free_space \

group by tablespace_name \

) s, \

dba_tablespaces t \

where t.tablespace_name = d.tablespace(+) and \

t.tablespace_name = s.tablespace(+) \

order by 8) \

where kperc > 93 \

and tipo <>'T' \

and tipo <>'U'

tbl_space.NoDataFound=none

這個SQL會返回93%滿的表空間信息,而對應這個監控項,orabbix也定義了觸發器,因為監控項的返回值是文本,而沒有滿足條件的記錄時返回字元串“none“,所以監控項對應的觸發器會檢查返回值開頭是不是none,如果不是,就報警,這樣,用戶除了收到預警信息,還能從返回值的具體值中看到具體時哪個表空間快滿了。

當然,大部分時間監控項會返回none,所以我們無法畫出正常未滿的表空間的空間占用時間曲線。只有超過93%慢時,我們才知道具體的占用情況。

如果想收集並保留更多信息,就需要使用自定義查詢,方法就是在query.props文件中加入你想檢查的SQL,比如我們想瞭解表空間信息,就加以下SQL:

customtbl.Query=select 'TBL:'||a.tablespace_name||',' TBL, \

'Total Size:'||trunc(sum(a.tots) / 1024 / 1024, 2)||',' Tot_Size_mb, \

'Free MB:'||round(sum(a.sumb) / 1024 / 1024, 2)||',' Tot_Free_mb, \

'PCT Free:'||round(sum(a.sumb) * 100 / sum(a.tots), 2)||',' Pct_Free, \

'Max Free MB:'||round(sum(a.largest) / 1024 / 1024, 2)||',' Max_Free_mb, \

'Chunks Free:'||sum(a.chunks)||',' Chunks_Free \

from (select tablespace_name, \

0 tots, \

sum(bytes) sumb, \

max(bytes) largest, \

count(*) chunks \

from dba_free_space a \

group by tablespace_name \

union \

select tablespace_name, sum(bytes) tots, 0, 0, 0 \

from dba_data_files \

group by tablespace_name) a \

group by a.tablespace_name

customtbl.NoDataFound=none

然後在orabbix對應的模板中添加這個監控項customtbl就可以了,下麵時從最新數據菜單查看的SQL的返回結果:

clip_image007

當然,我們要做進一步的分析和展示,就需要使用別的工具或者開發工具來做了,這個就不是這篇文章討論的範圍了。

Orabbix不足

初步測試,感覺orabbix有2點明顯缺陷:

1. 被監控資料庫信息要逐個寫進配置文件,如果資料庫個數比較多,管理會比較麻煩

2. 被監控資料庫的賬號信息是寫在配置文件中,而且口令是明文存儲,有很大的安全隱患

3. 對RAC的支持還是很初級


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一種方法: 第二種方法: ...
  • Observer協處理器通常在一個特定的事件(諸如Get或Put)之前或之後發生,相當於RDBMS中的觸發器。Endpoint協處理器則類似於RDBMS中的存儲過程,因為它可以讓你在RegionServer上對數據執行自定義計算,而不是在客戶端上執行計算。 本文是以上兩者的簡單實例,使用的環境:環境 ...
  • MongoDB提供了備份和恢復的功能,分別是MongoDB下載目錄下的mongodump.exe和mongorestore.exe文件 1.備份數據使用下麵的命令: >mongodump -h dbhost -d dbname -o dbdirectory -h:MongDB所在伺服器地址,例如:1 ...
  • 1.創建集合有兩種方式,顯示創建和隱式創建 顯示創建可以使用命令 db.createCollection(“集合名稱") 隱式創建可以使用命令 db.集合名稱.insert({}),指創建集合併同時向集合中插入數據,例如:db.customer.insert({name:”jack”}) 刪除集合使 ...
  • 前段時間在做用戶畫像的時候,遇到了這樣的一個問題,記錄某一個商品的用戶購買群,剛好這種需求就可以用到Redis中的Set,key作為productID,value 就是具體的customerid集合,後續的話,我就可以通過productid來查看該customerid是否買了此商品,如果購買了,就可 ...
  • 本文地址 分享提綱: 1.為查詢緩存優化你的查詢 2. EXPLAIN 你的 SELECT 查詢 3. 當只要一行數據時使用 LIMIT 1 4. 為搜索欄位建索引 5. 在Join表的時候使用相當類型的例,並將其索引 6. 千萬不要 ORDER BY RAND() 7. 避免 SELECT * 8 ...
  • 一、更改my.cnf配置文件 1.用命令編輯/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-tables,然後保存並退出 3.重啟mysql服務:service mysqld restart 二 ...
  • mysql查詢過程: 客戶端發送查詢請求。 伺服器檢查查詢緩存,如果命中緩存,則返回結果,否則,繼續執行。 伺服器進行sql解析,預處理,再由優化器生成執行計劃。 Mysql調用存儲引擎API執行優化器生成的執行計划進行查詢。 返回結果。 mysql查詢過程: 優化數據訪問: 是否查詢了多餘的記錄; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...