2011年4月27日

Cacti:使用自訂 script 來繪製圖表

一直以來都有在用 mrtg / cacti 來做主機監控,雖然 mrtg 可以用自己的 script 來抓資料繪製圖表,不過要設定的好我覺得難度有點高… 所以這次就把一些 mrtg 用的 script 改成 cacti 用得來試試看。
大概記一下流程。

就拿擷取 bbs 站上人數來當作範例好了。一般 Maple 3 itoc 版本的 bbs 都會在 login 畫面 show 出目前站上人數,因此我們只要寫個 script 去抓這個數字,再依照 cacti 要吃的參數格式輸出就好。

1. 首先建立擷取資料的 script
以下是我用 php 寫的 script:(當然你可以用 python、ruby、shell script 都可以~)
(在 Debian 下,是存在 cacti 目錄底下的 scripts:/usr/share/cacti/site/scripts)
<?php
    $bbs_ip = 'xxx.xxx.xxx.xxx';

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_connect($socket, $bbs_ip, 23);

    socket_recv($socket, $buffer, 1024, 0);
    socket_recv($socket, $buffer, 1024, 0);
    socket_recv($socket, $buffer, 1024, 0);
    socket_recv($socket, $buffer, 1024, 0);
    socket_recv($socket, $buffer, 1024, 0);
    socket_recv($socket, $buffer, 1024, 0);
    $buffer = iconv("big5","utf8",$buffer);
    preg_match('/\[([0-9]+)\]/', $buffer, $matches);
    printf('user:%s', $matches[1]);
    exit;
?>

要特別注意的是,輸出的格式為
filed1:value1 field2:value2 ...

2. 接著到 cacti [console]->[Collection Methods]->[Data Input Methods]
按右上角的[Add],
Name:Linux - BBS - Online Users(隨便你輸入)
Input Type:Script/Command(雖然他有PHP專用的,但是沒差,用這個通用的就好)
Input String:php <path_cacti>/scripts/bbs.php(就是你 script 的位置)
之後按[save]儲存。

3. 儲存之後在點進去剛剛的 [Linux - BBS - Online Users],在 [Output Fields] 上點下 [Add]
Field [Output]:user(對照到你 script 的 filed1)
Friendly Name: BBS Online Users(取一個比較好記的描述)
Update RRD File:就打勾吧!

4. 接著到 [console]->[Templates]->[Data Templates],按下右上角的[Add],
[Data Templates]
Name:Linux - BBS - Online Users(隨便你輸入)
[Data Source]
Name:Linux - BBS - Online Users(隨便你輸入)
Data Input Method:Linux - BBS - Online Users(請選擇你剛剛建立的 Data Input Method)
Associated RRA's:全選
Step:300(間隔秒數,五分鐘)
Data Source Active:打勾
[Data Source Item]
Internal Data Source Name:Online_Users(隨便你輸入)
Minimum Value:0(先讓他預設是0)
Maximum Value:0(先讓他預設是0)
Data Source Type:GAUGE
Heartbeat:600

5. 接著到 [console]->[Management]->[Data Source],按下右上角的[Add],
Selected Data Template:Linux - BBS - Online Users(選擇你剛剛建立的 Data Template)
Host:(選要繪這個圖的主機)

6. 到 [console]->[Templates]->[Graph Templates],選擇 [Unix - Logged in Users] 後,按右下方的選單調到 [Duplicate] 然後按 [go]。
(以 Unix - Logged in Users 的圖為範本來建立新的圖)
Title Format:Linux - BBS - Online Users(請輸入圖的title)
複製完畢後會跳進設定畫面
[Graph Template Items] 只留下 Item #1,把 Item #2 到 Item #4 砍掉。
[Graph Item Inputs] 基本上不用動,不過也可以點進去改顯示名稱
[Template] 就是改顯示名稱
[Graph Template] 顯示名稱可以改一改,以及下面的 [Upper Limit] 可以改成 0,讓他自動設定上限。

7. 接著在 [console]->[Management]->[Graph Management] 按下右上角的[Add],
Selected Graph Template:Linux - BBS - Online Users(選擇你剛剛建立的 Data Template)
Host:(選要繪這個圖的主機)

8. 建立後會多出兩個選項
Legend Color:(隨便你改)
Data Source:Linux - BBS - Online Users(就選剛剛建立的 Data Source)

9. 到這裡論上應該就建立完成了,如果圖片還是沒有出來的話,表示 rra 檔案可能有問題,
請先到 [console]->[Graph Management] 點進你剛剛建立的 Graph,然後開啟右上角的 [*Turn On Graph Debug Mode.],如果 RRDTool Says: 不是 ok,而是檔案不存在的話,可以到 [console]->[Management]->[Data Source],點進剛剛建立的 Data Source 並且開啟右上角的 [*Turn On Graph Debug Mode.],複製 Data Source Debug 的指令,並且進到系統直接複製貼上來建立這個檔案。

--
參考網站:http://blog.xuite.net/jyoutw/xtech/39869008?ref=rel

2 則留言:

  1. 我看過另二個人寫的, 就你寫的言簡意賅而且還多了 [Duplicate] 作法, 不熟的人走到[Graph Templates]就差不多昏了.

    (隨便你輸入)這句話有幫到我, 不然真不知要不要跟隨之前名單.

    給你一個贊!

    回覆刪除
    回覆
    1. XD 原來有人有看我的網誌,對不起我是怠惰管理者同盟的一員
      能幫上您是我的榮幸~

      刪除