偵測 Linux 上面的流量
最近更新日期:2001/10/13

前言
MRTG運作過程
安裝前的準備工作
開始安裝 MRTG
偵測網路卡流量
偵測 CPU 負載量

  • 前言
    網路伺服器主機的資料總流量(網路卡的資料傳送總數),以及 CPU 使用率和特殊服務(例如 squid 的代理服務)等等的封包傳送率(或者說是流量),是網路管理人員所必須要注意的事項,因為當主機的 CPU 使用率過高的時候,系統可能呈現不穩定的狀態,而當流量過高的時候,就需要注意是哪一個服務或者是哪一個傢伙在嘗試竊取我們的資料呢?因此,網路管理方面,有必要瞭解一下,我們主機的流量狀態,並視流量來加以限制或者是加大頻寬!
    目前網路上有一套蠻好用軟體可以用來偵測主機的資料流量,這也是各大伺服器常使用的軟體,就是 MRTG (Multi Router Traffic Grapher) 這一套軟體。MRTG 耗用的系統資源很小,因此有很多外掛的程式也依附在 MRTG 底下,因為 MRTG 的繪圖挺漂漂的說!我們這裡僅提供下面的偵測方法:
    1. 網路卡整體流量;(或者說是 Router 整體流量)
    2. CPU 使用率;
    3. RAM 使用率。

  • MRTG 的運作過程:
  • 要瞭解 MRTG 的運作,就必須瞭解一下 SNMP (Simple Network Management Protocol) 這個協定,因為 MRTG 是透過 SNMP 協定來監控流量的。所以,所有的 MRTG 所偵測的裝置都必須符合 SNMP 的協定。那什麼是 SNMP 呢?簡單的說,就是一種可以提供裝置(主機設備)的各類資訊的一種協定,諸如:網路流量、主機名稱、CPU用量等等的資訊都可以藉由此一協定來提供。不過,由於不同廠牌的裝置可能會有無法相容的情況,因而後來又有所謂 MIB (Management Information Base) 的協定產生。不論如何, MRTG 就是藉由 SNMP 這個協定來監測與取得相關的資訊以製作圖表的!詳細的 SNMP 你可以在 http://www.net-snmp.org/ 查得。
    所以我們可以知道,MRTG 基本上是透過以 SNMP 的協定,向主機詢問相關的資料後,主機傳遞數值給 MRTG 程式,然後 MRTG 再繪製成網頁上的圖表。由於 MRTG 是以 SNMP 協定來向主機要求資料,因此,您要使用 MRTG 來製作圖表時,必須先確定您的機器(或者說是設備)必須支援 SNMP 協定。好在 Linux 上面的網路卡,通常已經支援了 SNMP 協定了!當然, Windows 2000 也可以被偵測的到喔!
    另外,有一點是特別需要注意的,在 mrtg 這個程式中,其實他總共需要要求四個數據(前兩個用來作圖,後兩個提供相關資訊,基本上,繪圖只會用到前兩個數據),因此,你可以隨時製作 MRTG 的圖表,只要你能提供兩個數字(當然要是數字了,不然如何作圖!)給 mrtg 即可製圖!這個在後面的偵測 CPU 或者是 RAM 的地方,加掛自己寫的程式後,就可以得到啦!

  • 安裝前的準備工作:

  • 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 是透過 SNMP 通訊協定來要求資料,因此你的 Linux 上面需要先安裝相關的軟體,通常我們都是安裝 ucd-snmp 這套軟體的,那就來安裝吧!
    1. 下載 ucd-snmp-4.2.1.tar.gz, mrtg-2.9.17.tar.gz

    2.  
    3. 安裝 ucd-snmp-4.2.1.tar.gz:
    4. [root @tsai /root]# cd /usr/local/src
      [root @tsai src]# cp /root/ucd-snmp-4.2.1.tar.gz .
      [root @tsai src]# tar -zxvf ucd-snmp-4.2.1.tar.gz
      [root @tsai src]# cd ucd-snmp-4.2.1
      [root @tsai ucd-snmp-4.2.1]# ./configure --prefix=/usr/local/snmp
      .......(過程我就省略了)
               ************** Configuration Section **************

              You are about to be prompted by a series of questions.  Answer
      them carefully, as they determine how the snmp agent and related
      applications are to function.

              After the configure script finishes, you can browse the newly
      created config.h file for further - less important - parameters to
      modify.  Be careful if you re-run configure though since config.h will
      be over written.

      -Press return to continue- (這裡按 enter 吧)

      disabling above prompt for future runs...  yes
      checking System Contact Information...
       

      *** System Contact Information:

              Describes who should be contacted about the host the agent is
      running on.  This information is available in the MIB-II tree.  This
      Can Also Be Over-Ridden Using The "syscontact" Syntax In The Agent'S
      Configuration Files.

      System Contact Information (root@):root@tsai.adsldns.org (這裡輸入你的 e-mail)
      setting System Contact Information to...  root@tsai.adsldns.org
      checking System Location...
       

      *** System Location:

              Describes the location of the system.  This information is
      available in the MIB-II tree.  This Can also be over-ridden using the
      "syslocation" syntax in the agent's configuration files.

      System Location (Unknown):RedHat 6.1 (這裡可以隨便輸入,不正確也沒關係)
      setting System Location to...  RedHat 6.1
      checking Location to write logfile...
       

      *** Logfile location:

              Enter the default location for the snmpd agent to dump
      information & errors to.  If not defined (enter the keyword "none"
      at the prompt below) the agent will use stdout and stderr instead.
      (Note: This value can be over-ridden using command line options.)

      Location to write logfile (/var/log/snmpd.log):(按 enter 即可)
      setting Location to write logfile to...  /var/log/snmpd.log
      checking Location to write persistent information...
       

      *** snmpd persistent storage location:

              Enter a directory for the snmp library to store persistent
      data in the form of a configuration file.

      Location to write persistent information (/var/ucd-snmp):(按 enter 即可)

      [root @tsai ucd-snmp-4.2.1]# make
      [root @tsai ucd-snmp-4.2.1]# make install

      上面輸入的資訊,在進行 MRTG 的製圖時,會顯示在圖表上面,不過,這也是可以改的資訊,所以,如果不小心輸入錯誤也沒關係的。這樣就將 ucd-snmp 安裝妥當了!
       
    5. 啟動 ucd-snmp :

    6. 直接在 shell 下面打上 /usr/local/snmp/sbin/snmpd 即可!或者直接加在 /etc/rc.d/rc.local 當中,就可以自動開機時啟動了!
       
    7. 安裝 MRTG :
    8. [root @tsai /root]# cd /usr/local/src
      [root @tsai src]# cp /root/mrtg-2.9.17.tar.gz .
      [root @tsai src]# tar -zxvf mrtg-2.9.17.tar.gz
      [root @tsai src]# cd mrtg-2.9.17
      [root @tsai mrtg-2.9.17]# ./configure  --prefix=/usr/local/mrtg-2  \
      > --with-gd=/usr/include  \
      > --with-gd-lib=/usr/lib  \
      > --with-gd-inc=/usr/include  \
      > --with-png=/usr/include  \
      > --with-zlib=/usr/include

      [root @tsai mrtg-2.9.17]# make; make install
      [root @tsai mrtg-2.9.17]# mkdir /usr/local/apache/htdocs/mrtg (請注意,這裡與你的 WWW 主頁的放置地點有關,請依你的系統來設定,另外,由於我們需要設定 網路流量、CPU與RAM使用率,因此在 mrtg 中,可以再建立三個子目錄,比較容易管理啦!)
      [root @tsai mrtg-2.9.17]# mkdir /usr/local/apache/htdocs/mrtg/net
      [root @tsai mrtg-2.9.17]# cp images/*  /usr/local/apache/htdocs/mrtg/net (將一些影像檔拷貝到即將使用的目錄中去備用)

      就樣就安裝妥當了!再來就是開始要設定 MRTG 的組態囉!

  • 偵測網路卡流量

  • 要使用 mrtg 來作圖真的是太簡單了,只要幾個小步驟就可以自動的監測流量喔!首先以 mrtg 附的程式來製作一個參數檔 (預設檔名是 mrtg.cfg),然後修改一下 mrtg.cfg 這個參數檔之後,在直接執行三次參數檔,之後以 mrtg 程式附的小軟體,直接製作成首頁,就可以察看圖表囉!看下去吧!
    1. 設定 MRTG:
    2. [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 中,就是主網頁啦!
       

    3. 設定五分鐘偵測一次:

    4. 好了,開始偵測吧,就修改 /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
       

      這樣就每五分鐘可以自動偵測一次網路卡的流量囉!
       
    5. 設定 Web site:

    6. 以上面的例子為例,則你的 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

    2. 不要說還不會使用 rpm 安裝套件喔!打屁屁!
      rpm -ivh sysstat-4.0.2-1.i386.rpm
    1. 編寫外掛程式:

    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 參數檔:

    4. 我的參數檔有點像這樣:
      [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>
      ---- 檔案結束 ----

    5. 開始執行參數檔:(一樣,要執行三次以上)

    6. /usr/local/mrtg-2/bin/mrtg  /usr/local/apache/htdocs/mrtg/cpu/mrtg.cpu
       
    7. 寫入 /etc/rc.d/rc.local 當中:

    8. */2 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/cpu/mrtg.cfg > /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:每三秒看一次實體與虛擬記憶體用量,三次後算平均!
  • 其他的功能有待你的發掘囉!


VBird during 2001
歡迎來信指正與討論

 

 

--------------------------------

關於技巧心得裡面的文章... 『偵測 Linux 上面的流量 』補遺
作者: 日京三子 (---.hwayi.com)
日期: 01/10/19 15:38

嗯... 那篇文章寫的真的很不錯,但是有一個小小的瑕疵... 不,應該說是Intel公司的敗筆,就是===>他們家的網路卡不能使用一般的snmp檔案! 必須安裝他們家自己的檔案!網址在 http://appsr.intel.com/scripts-df/Product_Filter.asp?ProductID=60

此致