• 安裝前的準備工作:
    MRTG 為使用 Perl 程式寫成的,並且使用到 zlib 、 gd 及 png 的函式庫(zlib 用來壓縮圖表、gd 用來繪製圖表),且由於 MRTG 乃使用 SNMP 協定,並且最後是以 HTTP 的網頁型態輸出成圖表,因此,你需要確定 Linux 主機中已經含有下列的套件:
    • perl  (perl-5.0xx 以上)
    • zlib  (zlib-1.1.3-xx 以上)
    • gd  (gd-1.3.xx 以上)
    • libpng
    • apache
    確定的方法就以 RPM 來確認吧:
    • rpm -qa | grep perl
    • rpm -qa | grep zlib
    • rpm -qa | grep gd
    • rpm -qa | grep libpng

     

    另外的另外,由於 MRTG 的圖表顯示是以 HTTP 的型態(Web 的型態)來顯示的,因此,你也必須安裝好了 Apache 這個套件,如果沒有安裝好的話,請到這個網頁的 Linux 架站文件去看看吧!以下,我們使用了預設的 Apache 路徑,為 /usr/local/apache/htdocs 這個路徑來安裝 mrtg 輸出的圖表,要注意,如果沒有 apache 的話,那就沒有辦法顯示圖表了(雖然可以執行 MRTG !!)

    其實在 Linux 安裝完畢之後,上面的幾個(除了 apache 可能會更新之外)套件都已經安裝好了!所以你可以直接來安裝 MRTG 囉!(基本上,我們這個網頁的 RedHat 6.1 已經包含了這些套件了,所以如果你在安裝的時候是選擇 All 的話,那就直接安裝下列的套件吧)

    • 偵測網路卡流量
      要使用 mrtg 來作圖真的是太簡單了,只要幾個小步驟就可以自動的監測流量喔!首先以 mrtg 附的程式來製作一個參數檔 (預設檔名是 mrtg.cfg),然後修改一下 mrtg.cfg 這個參數檔之後,在直接執行三次參數檔,之後以 mrtg 程式附的小軟體,直接製作成首頁,就可以察看圖表囉!看下去吧!
      1. 設定 MRTG:
        [root @tsai mrtg-2.9.17]# cd /usr/local/mrtg-2/bin
        [root @tsai bin]# ./cfgmaker --output=/usr/local/apache/htdocs/mrtg/net/mrtg.cfg  \
        >  public@vbird.adsldns.org
        上面這個步驟會在你的主機上面製造一個參數檔,
        而你未來的設定都會自動的在這個參數檔中設定完成了!

        [root @tsai bin]# vi  /usr/local/apache/htdocs/mrtg/net/mrtg.cfg
        不過由於程式自動設定的 mrtg.cfg 有些地方會有瑕疵,
        因此,請將底下這三行修改成你的樣式喔!
        WorkDir: /usr/local/apache/htdocs/mrtg/net/
        Options[_]: growright, bits
        Language: big5

        [root @tsai bin]# ./mrtg  /usr/local/apache/htdocs/mrtg/net/mrtg.cfg
        開始測試你的參數檔,正常的話,進行
        這個動作要執行三次,就可以正常工作了,
        不過,若是有問題的話,就需要改 mrtg.cfg ,再執行直到沒有錯誤發生為止!

        [root @tsai bin]# ./indexmaker \
        > --output=/usr/local/apache/htdocs/mrtg/net/index.html \
        > --title=VBird主機流量統計表 \ 
        > /usr/local/apache/htdocs/mrtg/net/mrtg.cfg
        上面這個程式 indexmaker 是在製作首頁!當然,你也可以自訂首頁!
        上面是說,會自動的輸出一個 index.html 的檔案到 
        /usr/local/apache/htdocs/mrtg/net 中,就是主網頁啦!
         

        上面請特別注意:在 public@vbird.adsldns.org 這一行呢,public 是有其意義的(在 snmp 這個通訊服務裡面的預設搜尋的一個代碼),所以,如果你的主機的動態 DNS 名稱為 your.domain.name 則你就『一定』要寫成 public@your.domain.name 才行!千萬不要弄錯了!已經有很多網友遇到這個問題!
         
      2. 設定五分鐘偵測一次:
        好了,開始偵測吧,就修改 /etc/crontab 吧!
        [root @tsai bin]# vi /etc/crontab

        #1. Runing The MRTG Net Flow Control
        */5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/net/mrtg.cfg > /dev/null 2>&1
         

        這樣就每五分鐘可以自動偵測一次網路卡的流量囉!
         
      3. 設定 Web site:
        以上面的例子為例,則你的 mrtg 圖表在:
        http://your.host.domain/mrtg/net/index.html
        就可以看到你的主機上網路卡的流量囉!
      好了,重點說完了,再來說說在 mrtg.cfg 這個參數檔當中你看到的幾個參數的意義吧!
    • Target[裝置名稱]
      • Target[vbird.adsldns.org_2]: 2: public@192.168.1.2
        上面是一般的用法,其中半括號內的是裝置的名稱,同一個裝置的各參數中,這個名稱要一致!
      • Target[vbird.adsldns.org_3]:`/usr/local/apache/htdocs/mrtg/cpu/mrtg.cpu`
        後面接的是一個自訂的加掛的可執行檔案,這個檔案執行之後,會顯示四個數據,這樣就可以繪圖了!在繪製非 MRTG 程式的預設咚咚中,這個是最常使用的方法了!
    • MaxBytes[裝置名稱]:
      • MaxBytes[vbird.adsldns.org_2]: 1250000
        後面的數字代表資料監測時,最大的傳送速率,使用 bytes,所以 10Mbps 則為  1.25MBytes,大約是 1250000 Bytes。這個數值程式會自動判斷啦!不過你也可以自己修改,用到這個數字的時候是在你的圖表下方,每一個說明後面的(xx%)時用到的。
      • MaxBytes[vbird.adsldns.org_3]: 100
        如果你的資料並不是 Bytes 時,例如監測 CPU 負載率時,那這個數值就需要改變啦!
    • Options[裝置名稱]:
      • Options[vbird.adsldns.org_2]: growright, bits  (用在網路流量中)
      • Options[vbird.adsldns.org_3]: growright, nopercent, gauge  (用在 CPU 負載中)
        growright:將資料隨時間變化的順序以右而左繪圖;
        bits:資料單位為 bits;
        nopercent:在圖下方的說明文字中,不顯示百分比;
        gauge:圖表的上限固定!

    • 偵測 CPU 負載量:
      偵測 CPU 負載量時,需要使用到額外的外掛程式,就是 sysstat 這個程式,我只使用在 RedHat 6.1 上面過,是可以使用的!
      1. 下載並安裝 sysstat-4.0.2-1.i386.rpm
        不要說還不會使用 rpm 安裝套件喔!打屁屁!
        rpm -ivh sysstat-4.0.2-1.i386.rpm
         
      2. 編寫外掛程式:
        以安裝完 sysstat 套件後,產生的 /usr/bin/sar 程式進行外掛程式的編寫,我寫了一個監測 CPU 的小程式,使用 bash 寫的,可以參考看看:
        [root @tsai cpu]# vi mrtg.cpu

        ---- 檔案開始 ----
        #!/bin/bash
        # 這個程式是用來偵測 CPU 的小外掛程式!
        # 1. 開始使用 sar 來監測 CPU 的 user 及 System 負載率
          cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'`
          cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'`
          UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'`

        # 2. 列出四個數據(前兩個為數字)
          echo $cpuusr
          echo $cpusys
          echo $UPtime
          echo vbird.adsldns.org  (這裡寫你的主機名稱)
        ---- 檔案結束 ----

        [root @tsai cpu]# chmod 755 mrtg.cpu (設定成可執行)
        [root @tsai cpu]# ./mrtg.cpu (測試看可執行否)
        2.0
        5.4
        1 day, 22:30,
        vbird.adsldns.org

      3. 開始設定 mrtg 參數檔:
        我的參數檔有點像這樣:
        [root @tsai cpu]# vi mrtg.cfg.cpu

        ---- 檔案開始 ----
        ### Global Config Options
        ### To get bits instead of bytes and graphs growing to the right
        WorkDir: /usr/local/apache/htdocs/mrtg/cpu/
        Language: big5

        Target[localhost]: `/usr/local/apache/htdocs/mrtg/cpu/mrtg.cpu`
        MaxBytes[localhost]: 100
        Options[localhost]: gauge, nopercent, growright
        YLegend[localhost]: CPU loading (%)
        ShortLegend[localhost]: %
        LegendO[localhost]:   CPU 使用者負載;
        LegendI[localhost]:   CPU 純系統負載;
        Title[localhost]: CPU ?t???v
        PageTop[localhost]: <H1>VBird 主機 CPU 負載率</H1>
         <TABLE>
           <TR><TD>System:</TD>     <TD>RedHat 6.1 in Linux Kernel 2.2.19</TD></TR>
         </TABLE>
        ---- 檔案結束 ----

      4. 開始執行參數檔:(一樣,要執行三次以上)
        /usr/local/mrtg-2/bin/mrtg  /usr/local/apache/htdocs/mrtg/cpu/mrtg.cfg.cpu
         
      5. 寫入 /etc/crontab 當中:
        */2 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/cpu/mrtg.cfg.cpu > /dev/null 2>&1

        這樣就OK了,直接將 Web 指向 http://your.host.domain/mrtg/cpu/localhost.html

    重點說完了!再來說說 sar 吧!基本上, sar 可以用來偵測很多的咚咚,例如:
    • sar -u 1 5 :每一秒鐘測一次 cpu ,共計五次後算平均;
    • sar -r 3 3:每三秒看一次實體與虛擬記憶體用量,三次後算平均!
    • 其他的功能有待你的發掘囉!

    • 即時偵測線上人數
      如果您曾經上過中山大學的 FTP 網站的話,您會發現『咦!他們有偵測即時的上線人數(online users)呢!』同樣的,她們也是使用 MRTG 這一套相當漂亮的軟體來達成這個目標!那,要如何達到這個目標呢?其實也是很簡單,我們剛剛不是已經介紹了, mrtg 其實只要接受到 2 個數字就可以繪圖了嗎?那這裡就給他兩個數字就可以啦!兩個數字從何而來?如果您知道 netstat 這個指令的話,就會發現,當您下達 netstat -a 的時候,會有這個咚咚會出現:
       
      [root @tsai root]# netstat -a | more
      Active Internet connections (including servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 *:ftp                   *:*                     LISTEN
      tcp        0      0 *:telnet                *:*                     LISTEN
      tcp        0      0 *:pop-2                 *:*                     LISTEN
      tcp        0      0 *:pop-3                 *:*                     LISTEN
      tcp        0      0 *:imap2                 *:*                     LISTEN
      tcp        0      0 *:smtp                  *:*                     LISTEN
      tcp        0      0 *:www                   *:*                     LISTEN
      tcp        0      0 tsai.adsldns.org:www    211.72.119.19:58298     SYN_RECV
      tcp        0      0 *:mysql                 *:*                     LISTEN
      tcp        0      0 *:netbios-ssn           *:*                     LISTEN
      tcp        0  57920 tsai.adsldns.org:www    211.75.193.100:2965     ESTABLISHED
      tcp        0  57920 tsai.adsldns.org:www    211.75.193.100:2966     ESTABLISHED
      tcp        0  57920 tsai.adsldns.org:www    211.75.193.100:2967     ESTABLISHED
      tcp        0  57920 tsai.adsldns.org:www    211.75.193.100:2968     ESTABLISHED
      tcp        0  57920 tsai.adsldns.org:www    211.75.193.100:2969     ESTABLISHED
      tcp        0      1 tsai.adsldns.org:www    202.98.131.11:4374      FIN_WAIT1
      tcp        0      1 tsai.adsldns.org:www    202.98.131.11:4404      FIN_WAIT1
      tcp        0      1 tsai.adsldns.org:www    202.98.131.11:4413      FIN_WAIT1
      tcp        0      1 tsai.adsldns.org:www    202.98.131.11:4453      FIN_WAIT1
      以下省略!

      我們可以很清楚的發現:使用 netstat 可以查到 WWW 的連線數目,那只要將這些數目作一些重複性分析,以去除重複的 IP 網址後,不就可以知道以 WWW 方法上網連線的即時人數了嘛!這就是我們偵測的主要原理了!

      那要如何寫這個偵測的批次檔呢?以下就是鳥哥嘗試寫的一個批次檔!你可以將一些註解符號取消,就可以知道為何這麼寫了:
       
      [root @tsai root]# vi mrtg.person.sh
      檔案開始:
      #!/bin/bash
      # 這個程式主要在計算有多少人以 WWW 的方式連線進我們的主機!

      # 1. 計算連線的數目
      echo `netstat -a | grep www|awk '{print $5}'|sort | wc -l|awk '{print$1 - 1}'`
      # 底下在說明整個咚咚的列出(檢查用) 
      # netstat -a | grep www|awk '{print $5}'|sort| uniq 

      # 2. 計算連線人數:
      echo `netstat -a | grep www|awk '{print $5}'|cut -d":" -f1|sort| uniq |wc -l | awk '{print $1 - 1}'`
      # netstat -a | grep www|awk '{print $5}'|cut -d":" -f1|sort| uniq 

      # 3. 輸出時間咚咚
        UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'`
        echo $UPtime
        echo your.host.name
      檔案結束!

      在上面的式子中,你可以執行出你所需要的咚咚囉!你也可以將 mrtg.person.sh 這個檔案捉下去直接修改!所需要變更的就只有 最後一行的 your.host.name 要改囉!改成您的主機名稱吧!並且將這個檔案改成可以執行的狀態:

        chmod 755 mrtg.person
      即可!
      接下來則是修改 mrtg 的參數檔啦!我們可以建立一個名稱為 mrtg.cfg.person 的參數檔,內容有點像這樣!
       
      [root @tsai root]# vi mrtg.cfg.person
      檔案開始:
      # Created by
      #          VBird 2001/10/29

      ### Global Config Options
      WorkDir: /usr/local/apache/htdocs/mrtg <==請改成您圖表放置的目錄
      Language: big5 

      ### CPU Loading detecting ...
      Target[tsai.adsldns.org_person]: `/usr/local/mrtg-2/bin/mrtg.person.sh` <==檔案放置的路徑與檔名
      MaxBytes[tsai.adsldns.org_person]: 500
      Options[tsai.adsldns.org_person]: gauge, nopercent, growright
      YLegend[tsai.adsldns.org_person]: Online Users
      ShortLegend[tsai.adsldns.org_person]: %
      LegendI[tsai.adsldns.org_person]: &nbsp; 連線數目 :
      LegendO[tsai.adsldns.org_person]: &nbsp; 上線人數 :
      Title[tsai.adsldns.org_person]: WWW 上線人數統計表
      PageTop[tsai.adsldns.org_person]: <H1> WWW 主機上線人數 </H1>
       <TABLE>
        <TR><TD>System:</TD>   <TD>Aerosol Lab. in Redhat 6.1 Kernel 2.2.18</TD></TR>
         <TR><TD>Maintainer:</TD> <TD>VBird</TD></TR>
       </TABLE>
      檔案結束!

      要注意的僅是 `/usr/local/mrtg-2/bin/mrtg.person.sh` 這一行字!這個就是我們剛剛才寫成的 scripts 啦!然後同樣的,執行

        ./mrtg mrtg.cfg.person
      三次之後,就可以正常的產生圖表啦!
      然後在將您的圖表加在 index.html 網頁中,如此則可以即時的偵測與記錄上線人數的統計囉!當然,如果您修改一下上面的 script (mrtg.person.sh),將 www 改成 ftp 的話,那就等於是偵測 ftp 的即時上線人數!如何!簡單吧!
      祝大家架站愉快!

    • 在 Linux 主機上偵測 windows 2000 的網路流量
      好了!我們現在已經可以在 Linux 系統上面偵測任何咚咚啦!那如果要偵測 windows 2000 要如何作呢?其實也真是很簡單,(1) 你要先在 windows 2000 上面安裝 SNMP 通訊協定的套件;(2) 在 Linux 上面針對 windows 2000 進行參數檔的偵測; (3) 做成網頁輸出!簡單的很!
      1. Windows 2000 下啟動 snmp 服務:
        windows 2000 這個系統底下已經有預設的 snmp 通訊協定了,只要開放他即可!那要如何開放呢?你可以開啟『開始』>『設定』>『控制台』>『新增移除程式』>『新增/移除 Windows 元件』。然後就像下面兩張圖一樣,先勾選 Management and Monitoring Tools ,之後選擇 『詳細資料』之後,出現的圖示中,選擇勾選 Simple Network Management Protocol ,然後按下確定之後,就開始安裝啦!在安裝的過程中,安裝程式會要求你放入 windows 2000 的 CD 進入 CD-ROM ,安裝完畢之後就已經有 SNMP 的通訊協定啦!

      2. 在 Linux 上面針對 windows 2000 進行 MRTG 的參數偵測:
        接下來的工作跟之前的工作就差不多啦!先來建立參數檔吧,如何建立呢?假設你的 Windows 2000 的 IP 是 192.168.1.11 ,那麼你就必須要這樣來偵測 Windows 2000 的參數:
         
        [root@vbird mrtg]# /usr/local/mrtg-2/bin/cfgmaker public@192.168.1.11 > mrtg.cfg.vbird

        注意囉! public 是預設的指令,後面接的是你的 IP (當然也可以是 domain 說)。這樣一來,就可以做出一個參數檔案,名稱為 mrtg.cfg.vbird,我們來看一看這個檔案的大概內容吧!
         

        [root@vbird mrtg]# vi mrtg.cfg.vbird
        # Created by
        # /usr/local/mrtg-2/bin/cfgmaker public@192.168.1.11
        ### Global Config Options
        WorkDir: /usr/local/apache/htdocs/mrtg/
        Options[_]: growright, bits

        Target[192.168.1.11_16777219]: 16777219:public@192.168.1.11:
        SetEnv[192.168.1.11_16777219]: MRTG_INT_IP="192.168.1.11" MRTG_INT_DESCR="NDIS 5
        .0 driver"
        MaxBytes[192.168.1.11_16777219]: 1250000
        Title[192.168.1.11_16777219]: Traffic Analysis for 16777219 -- VBLAB2
        PageTop[192.168.1.11_16777219]: <H1>Traffic Analysis for 16777219 -- VBLAB2</H1>
         <TABLE>
           <TR><TD>System:</TD>     <TD>VBLAB2 in </TD></TR>
           <TR><TD>Maintainer:</TD> <TD></TD></TR>
           <TR><TD>Description:</TD><TD>NDIS 5.0 driver</TD></TR>
           <TR><TD>ifType:</TD>     <TD>ethernetCsmacd (6)</TD></TR>
           <TR><TD>ifName:</TD>     <TD></TD></TR>
           <TR><TD>Max Speed:</TD>  <TD>1250.0 kBytes/s</TD></TR>
           <TR><TD>Ip:</TD>         <TD>192.168.1.11 ()</TD></TR>
         </TABLE>
         

        其他的設定不太需要改變,但是上面黃色的那兩行字中,請注意,修改成你的『工作目錄』與一些設定吧!最好是將一些圖表資料都放一起就好了!這樣子大概就OK啦!
         

      3. 做成網頁輸出:
        這一步跟前面就都一樣啦,先執行 mrtg mrtg.cfg.vbird(你的參數檔名)三次,然後在將輸出的圖表寫在你的 index.html 上面即可!這樣就已經可以偵測 windows 2000 的網路流量啦!而且還不需要在 windows 2000 上面有任何的咚咚發生喔!

    • 在 Linux 主機上偵測 windows 98 的網路流量
    MRTG 流量偵測到此為止介紹的都是屬於 NT 或者是 Linux 上面的訊息,那要如何偵測 Windows 98 的系統呢?畢竟使用這個系統的用戶並不少呀!OK!偵測 Windows 系統,最主要的就是要有 snmp 啦!只要有 snmp 之後,往後的工作就都完全一模一樣了!哪我們就在 Windows98 上面安裝 snmp 的服務吧!其實, snmp 套件已經在 windows 98 的原版光碟中了,你可以到原版 98 光碟的 /tools/reskit/netadmin/snmp 這個路徑下找到以下僅提供 snmp 在 windows98 下的安裝方法,至於偵測的方法則與 Windows 2000 的情況一模一樣!目前我已經在 Linux 上以 MRTG 成功的將研究室所有的電腦之網路卡流量偵測了!往後將可便利於管理整個研究室的網路流量,並可以藉以分析是否有不明人士亂玩網路.....
    1. 你可以在 windows 98 下按下『開始』>『控制台』>『網路』,或者是在桌面的『網路上的芳鄰』按『右鍵』選『內容』,會出現如下方框:
    2. 請按下『新增』之後,出現:
    3. 選擇『服務』的項目後,並按下『新增』:
    4. 然後再選擇『從磁片安裝』這一項!並將你的 snmp 套件指向你的原版 windows 98 光碟!
    5. 按下確定之後,再按一次確定!即可安裝 snmp 套件囉!
    6. 就像這樣,出現了這個東西!按下確定吧!開始安裝囉!
    7. 有沒有看到如下圖所示! Microsoft SNMP agent 已經出現了!表示安裝完畢!