Cacti監控一臺Web伺服器上多個Tomcat埠的實現

yuntui發表於2016-11-03

因為一臺web應用伺服器上面安裝了多臺tomcat,有多個埠,比如預設的8080,還有後續追加的9100,9300,9500等等。一個cacti_host_template_tomcat_server.xml模板只能指定監控一個tomcat服務埠。

 

因此如果想要監控一臺web伺服器上的多個tomcat伺服器,那麼就必須另外想辦法,按照一個host上面一個模板監控一個tomcat服務來說的話,要想在一個host上面監控多個tomcat服務就需要構建多個模板xml檔案。目前想到2種方法:

 

(1),在cactiweb頁面上一步步點選按鈕操作新增新的tomcat埠監控選項。

(2),構建一個新的xml模板檔案,重新載入進去。

 

1 人工在web介面新增多tomcat埠監控選項

看到cacti服務頁面有Add按鈕,可以一步步新增模板,所以首先在介面上手動新增另外一個tomcat 9500模板,大概步驟如下所示:

 

1.1 先建Data Input Source

Data Input Method 一項選擇 step1建立的Tomcat 9500 Status

1.2 建立 Data Tempate

在Data Input Method 一項選擇 step 1建立的Tomcat 9500 Status


在這裡要特別注意 Data Source Type的選擇,是Count還是GAUGE,不要選錯,選錯了,就是NAN值,圖上出不來資料。

PS】:這裡有14Data Source Item,手動一個個確實比較麻煩,而且一個埠需要建一個,一個埠N個服務,一個服務14個埠,如果都是手工一個個新增過來,那就到猴年馬月了,在新增的過程中,還要注意一些下拉選項,很消耗時間和精力。

 

1.3 建立Data Source

新增資料模板



點選Create 按鈕,下一步:

看到有提示準備生成<path_rra>/web-9_bytes_received_568.rrdrrd繪圖檔案,點選Save按鈕儲存,看到已經建立好了:

 

1.4 建立Graph Template

 


1.5 建立Graph Tempate

 

之後,還需要建立顯示圖畫顏色等的Item以及Item Input

(1)     點選當前頁面的Graph Template Items [edit: 9500 Tomcat – Connection Rate] 標題欄後面的Add按鈕,參考已經有的Tomcat – Connection Rate來建立一模一樣的item

(2)     點選 Graph Item Inputs標題欄後面的Add按鈕,參考已經有的Tomcat – Connection Rate來新增資料來源選項。

(3)     確保所有的選項值跟原有的一樣,特別是Unit Grid Value (--unit/--y-grid)的值為0,之後點選Save按鈕儲存。

 

1.6 進去Graph Management介面,建立Graph圖,如下所示:

點選Create之後,進去選擇好Graph Item Fields,開啟Debug Mode模式,就可以看到RRDTool Commands以及出來的debug圖片資料,如下所示:

 

然後,去Graphs介面,檢視建立的rate圖,如下9500埠的資料出來了:

這種辦法雖然笨拙耗時,但是總算一步步來,還是可以新增完成的。

 

2,看到手動在web介面新增cactitomcat模板檔案,太耗時太麻煩,所以另選途徑再構造一份cacti下的tomcat模板檔案。

 

2.1 直接替換tomcat字串在後面加9500

想要弄親自構建另外一個tomcat監控的模板檔案,可以以現在的cacti_host_template_tomcat_server.xml為基礎來實現。開啟模板檔案,可以看到很多標籤,先檢索到帶Tomcat的標籤,替換成Tomcat 9500然後儲存,在介面載入Import成功後,Console --> Collection Methods --> Data Input Methods裡面還是隻有一個選項9500 Tomcat Status,原來的Tomcat Status沒有了,也就是說原來的Tomcat Status被後來的9500的模板xml直接覆蓋了,這一種方式走不通。

 

2.2 繼續從後臺的cacti資料庫裡面的資料進行研究

研究tomcat的模板配置檔案,進去cacti後臺資料庫的模板表裡,檢視匯入的tomcat模板表:


  1. mysql> SELECT * FROM `data_template` WHERE NAME LIKE \'%tomcat%\';
  2. +-----+----------------------------------+--------------------+
  3. | id | hash | name |
  4. +-----+----------------------------------+--------------------+
  5. | 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9300 Tomcat Status |
  6. | 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat Status |
  7. +-----+----------------------------------+--------------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql>


5a135ee7b52669e39cd51a89a2870f66xml檔案中存在,而且是

<hash_0100125a135ee7b52669e39cd51a89a2870f66>

                   <name>9500 Tomcat Status</name>

                   <ds>

……

其中’hash_01’是標示,中間的’0012’cacti版本號碼,在後面的一系列散亂的字串’5a135ee7b52669e39cd51a89a2870f66’就是中的後面數字。

分析到這裡,想到決定是否新加一個模板的關鍵應該就是這些hash資料,如果把模板xml裡面的hash值換成新的hash值,是否就可以載入成另外一個新的tomcat埠的xml模板呢?試試吧。

 

2.3 開始構建新的hash

思路:先找出原有的xml模板中的所有hash值,將後四位擷取換成tomcat埠號9500。

2.3.1 linux下用grep命令獲得所有cash

執行shell命令取得鎖喉hash資料行:

  1. [root@mysqlvm2 ~]# more cacti_host_template_tomcat_server.xml |grep hash > cacti_hash.xml
這裡的cacti_hash.xml裡面包含的內容如下所示:



  1. [root@mysqlvm2 ~]# more cacti_hash2.xml |more
  2.          <hash_020012b1ced03706b799b82f1d62146d959500>
  3.   <graph_templates>hash_0000121df1e862da7c09e91e3d9ccc3f359500|hash_0000123810995e1194c890f50a09388efc9500|hash_000012cf60b10d60b07078fe1429a0575c9500|hash_000012892489f6e4de56c
  4. 7762e90d52cc39500</graph_templates>
  5.          </hash_020012b1ced03706b799b82f1d62146d959500>
  6.          <hash_0000121df1e862da7c09e91e3d9ccc3f359500>
  7.                             <hash_100012aa019bdbe34704dbd5d57a3bccef9500>

  8. <hash_1000121690bcb932496d12d6c31c1614799500>
  9.                                      <task_item_id>hash_08001217cef337fc98ed9edbf507407eb19500</task_item_id>
  10.                                      <gprint_id>hash_060012e9c43831e54eca8069317a2ce8c69500</gprint_id>
  11.                             </hash_1000121690bcb932496d12d6c31c1614799500>
  12. ..


看到其中還有許多<task_item_id> </gprint_id >等等之類的標籤,直接用shell命令

:%s/<task_item_id>//以及 :%s/<\/ gprint _id>//之類的替換命令刪除掉,之後所有的xml標籤都替換掉了,只剩下所有的hash值。這裡注意對於幾個用|符號連結起來的hash值,需要單獨去掉|符號再換行,確保一個hash值是一行。

最終得到一行一行的hash值的cacti_hash.xml檔案。

 

2.3.2 遍歷hash值檔案,生成新的hashxml模板。

原理是寫shell指令碼遍歷cacti_hash.xml檔案,遍歷hash值,然後去原來的模板檔案裡面cacti_host_template_tomcat9500_server.xml找到對於的hash值,將後4位替換成tomcat埠號9500shell命令如下所示:

(1)Copy一個副本xml檔案


  1. [root@mysqlvm2 ~]#
  2. cp cacti_host_template_tomcat_server.xml cacti_host_template_tomcat9500_server.xml


(2),寫一個迴圈shell指令碼


  1. [root@mysqlvm2 ~]# more cacti2.sh
  2. for i in `cat cacti_hash.xml`
  3. do
  4.   # echo $i;
  5.    port=\'9500\';
  6.    new_hash=${i:0:39}$port;
  7.   # echo $new_hash;
  8.    sed -i \"s/$i/$new_hash/\" cacti_host_template_tomcat9500_server.xml
  9. done;
  10. [root@mysqlvm2 ~]#


(3),執行shell命令,生成新的9500模板

[root@mysqlvm2 ~]# sh cacti2.sh

 

2.4 copy出行的9500埠檔案,在介面載入

   載入完成後,就會在Console --> Collection Methods --> Data Input Methods裡面看到新新增上的9500 Tomcat Status選項,

    記得點選9500超連結進去,把Input String換成9500埠的訪問連線,這樣這個9500埠監控所獲取的所有資料都是從9500埠的tomcat伺服器上而來,如下圖所示:

   Console --> Templates --> Data Templates/Graph Templates上面也可以看到新新增上的9500 Tomcat Status選項,如下圖所示:

 

   OK,現在就可以去Console --> Create --> Management --> Graph Management新增tomcat另外一個9500埠的監控選項,點選按鈕的時候,記得在Selected Graph Template下拉選框上選擇9500標示的模板,新增完後如下所示:

 

2.5,報錯處理

有報錯如下:

RRDTool Says:

ERROR: Could not parse line 'GPRINT::MAX:Maximum\:%8.2lf %s\n'

進去 Console-->Graph Templates --9500 Tomcat - Connection Rate --> Data Source [error_count] --> Item #4: GPRINT (MAX) 打勾選上,如下所示:

 

Graphs視窗檢視效果,在同一個web-9伺服器上,一個基本埠8080一個9500埠的影像都出來了,如下所示:

 

最後在進入後臺cacti資料庫去檢視下我們的驗證:

  1. mysql> SELECT * FROM `data_template` WHERE NAME LIKE \'%tomcat%\';
  2. +-----+----------------------------------+--------------------+
  3. | id | hash | name |
  4. +-----+----------------------------------+--------------------+
  5. | 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9300 Tomcat Status |
  6. | 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat Status |
  7. +-----+----------------------------------+--------------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM `data_template` WHERE NAME LIKE \'%tomcat%\';
  11. +-----+----------------------------------+--------------------+
  12. | id | hash | name |
  13. +-----+----------------------------------+--------------------+
  14. | 101 | 5a135ee7b52669e39cd51a89a2870f66 | 9300 Tomcat Status |
  15. | 102 | b58769ff71c16b0126014efdf8f5892c | Tomcat Status |
  16. | 104 | 5a135ee7b52669e39cd51a89a2879500 | 9500 Tomcat Status |
  17. +-----+----------------------------------+--------------------+
  18. 3 rows in set (0.00 sec)


看id為101以及104的hash值和name描述,hash值後四位從0f66變成9500了。

總結:

所有載入的cacti模板檔案中,核心區分點所一個個hash值,如果構造出新的一組hash值,那麼載入後就是新的監控選項。

假如你現在一個web伺服器上又新增了一個9300tomcat服務,你只需要把我分享的9500埠的xml中的hash末尾9500替換成9300,那麼就又是一個新的xml模板。

以此類推,現在喜歡在一個linux伺服器上搭建mysql多例項,那麼多例項mysql如何在cacti下監控,也可以用本文中類似的辦法構建新的mysql的多埠模板xml檔案來重新載入實現。

 
Cacti下監控tomcat多埠模板檔案下載地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127697/,如需轉載,請註明出處,否則將追究法律責任。

相關文章