Raspberry Pi 筆記(46):安裝流量圖形顯示 MRTG

公司最近在發展的系統之一就是將設備的syslog收集起來,作為查詢、儀表板及報表用,但是最近要將SNMP跟Netflow的資料加到系統中。利用樹莓派先瞭解一下SNMP (簡單網路管理協定 Simple Network Management Protocol)的設定方式,到時可跟工程師討論作法。這裡我們實作一下將SNMP的資料,呈現到 MRTG(Multi Router Traffic Grapher)網頁。 

MRTG流量圖常被用來作為網路流量使用,除此也可以將CPU、記憶體以及磁碟用量等透過網頁呈現。若要經由網頁顯示,就需要有Web Server,如Apache、Nginx、Lighttpd 都可以用來作為顯示MRTG流量的網頁伺服器。本實作以Lighttpd來提供網頁服務,安裝過程可自行更換成喜好的Web Server。流量顯示圖如下:


MRTG的安裝有好幾個方式,可以執行下載壓縮檔安裝,或是直接從套件庫進行安裝,指令如下:
$ sudo apt-get -y install mrtg snmp snmpd

安裝過程會出現一個視窗畫面,如果要設定讀取SNMP資料的權限,可以設定為YES,只有 root 才能讀取 /etc/mrtg.cfg,但是如果要用RRD Tool 來畫圖的話,需要設成NO。


設定SNMP
這裡先設定基本的 SNMP,讓SNMP可以運作,重新啟動前先編輯SNMP Daemon設定檔:
$ sudo nano /etc/snmp/snmpd.conf

將這兩行
    agentAddress  udp:127.0.0.1:161
    #rocommunity public  localhost

改成
    agentAddress  udp:161
    rocommunity public localhost

重新啟動 snmpd 服務。
$ sudo service snmpd restart


安裝 Web Server
使用以下指令安裝lighttpd 套件:
$ sudo apt-get install lighttpd

Lighttpd的工作目錄首頁在 /var/www/html,在該目錄下建立一個 mrtg目錄,作為存放mrtg的網頁使用
$ sudo mkdir /var/www/html/mrtg

設定 MRTG
產生一個新的 MRTG 設定檔,放在 /etc目錄下:
$ sudo cfgmaker --output /etc/mrtg.cfg public@localhost

修改mrtg.cfg的工作目錄,從 /var/www/mrtg 改成 /var/www/html/mrtg :
$ sudo nano /etc/mrtg.cfg



除了工作目錄要設定,還有另一個部分要修改,您會看到 /etc/mrtg.cfg 檔案內,有lo、eth0跟wlan0幾段看起來像html語法的段落,這是稍後要產生index.html的設定檔,因我的樹莓派使用無線網路連接,我就將wlan0那段的 # 全刪掉,前幾行設定如下:
Target[localhost_3]: 3:public@localhost:
SetEnv[localhost_3]: MRTG_INT_IP="192.168.0.106" MRTG_INT_DESCR="wlan0"
MaxBytes[localhost_3]: 12500000
Title[localhost_3]: Traffic Analysis for 3 -- raspberrypi

使用indexmaker指令產生 MRTG 首頁:
$ sudo indexmaker --output=/usr/www/html/mrtg/index.html /etc/mrtg.cfg

連結至樹莓派 Web Server,就可以看到 MRTG 流量圖。剛啟動時,不會有流量,要過1-2個小時之後,才會產生流量:
http://192.168.0.106/mrtg/index.html

點下首頁的流量圖(這是過了一天的紀錄),可再細分日、週、月、年的流量分析。


以上只是實作網路的流量記錄,如要紀錄CPU、記憶體還要再進行設定。

[CPU使用量、溫度及記憶體用量]

若要得知CPU 的可用率,可用 snmpget 指令查詢受監控CPU的可用率,指令如下:
$ snmpget -v 1 -c public localhost .1.3.6.1.4.1.2021.11.11.0
傳回以下值:
iso.3.6.1.4.1.2021.11.11.0 = INTEGER: 99
.1.3.6.1.4.1.2021.11.11.0 是 cpu的 OID (Object Identifier),99表示目前可用率。

若要得知CPU的溫度,可以 cat /sys/class/thermal/thermal_zone0/temp 這個檔案,這裡紀錄CPU的溫度,寫一個批次執行檔來取得:
$ nano snmp-cpu-temp.sh
#!/bin/bash
if [ "$1" = "-g" ]
then
        echo .1.3.6.1.2.1.25.1.8
        echo gauge
        cat /sys/class/thermal/thermal_zone0/temp
fi
exit 0

將文字檔改成執行檔:
$ chmod +x snmp-cpu-temp.sh

執行指令時,用 -g 帶入參數:
$ ./snmp-cpu-temp.sh -g

得到以下結果,溫度為攝氏 41.160度:
.1.3.6.1.2.1.25.1.8
gauge
41160

接著將這個批次指令設定到 snmpd.conf  :
$ sudo nano /etc/snmp/snmpd.conf

加入以下設定:
pass     .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp-cpu-temp.sh

修改完設定檔後,重新啟動snmpd服務:
$ sudo /etc/init.d/snmpd restart

透過snmp取得cpu溫度:
$ snmpget -v 1 -c public localhost .1.3.6.1.2.1.25.1.8
得到以下結果:
iso.3.6.1.2.1.25.1.8 = Gauge32: 41160

接著編輯 MRTG 設定檔,加上CPU使用率、溫度跟記憶體使用量:
$ su nano /etc/mrtg.cfg
在設定檔中增加以下這段設定:
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt

Target[CPU]: 100 - .1.3.6.1.4.1.2021.11.11.0&.1.3.6.1.4.1.2021.11.11.0:public@localhost 
Options[CPU]: integer, gauge, nopercent, growright, unknaszero, noo 
MaxBytes[CPU]: 100 
YLegend[CPU]: CPU % 
ShortLegend[CPU]: % 
LegendI[CPU]: CPU 
Legend1[CPU]: CPU usage 
Title[CPU]: Raspberry Pi CPU load 
PageTop[CPU]: <H1>Raspberry Pi - CPU load</H1>

Target[Memory]: .1.3.6.1.2.1.25.2.3.1.6.1&.1.3.6.1.2.1.25.2.3.1.6.3:public@localhost 
Options[Memory]: integer, gauge, nopercent, growright, unknaszero, noo 
MaxBytes[Memory]: 100524288 
YLegend[Memory]: Mem - 1K pages 
Factor[Memory]: 1024 
ShortLegend[Memory]: B 
LegendI[Memory]: Physical 
LegendO[Memory]: Virtual 
Legend1[Memory]: Physical 
Legend2[Memory]: Virtual Memory 
Title[Memory]: Raspberry Pi Memory Usage 
PageTop[Memory]: <H1>Raspberry Pi - Memory Usage</H1>

Target[CPU-temp]: .1.3.6.1.2.1.25.1.7.0&.1.3.6.1.2.1.25.1.8:public@localhost 
Options[CPU-temp]: integer, gauge, nopercent, growright, unknaszero, noi 
Factor[CPU-temp]: 0.001 
MaxBytes[CPU-temp]: 100000 
Title[CPU-temp]: CPU temperature on Raspberry Pi 
YLegend[CPU-temp]: Temperature °C 
ShortLegend[CPU-temp]: °C 
Legend2[CPU-temp]: CPU temperature in °C 
LegendO[CPU-temp]: CPU temperature
PageTop[CPU-temp]: <H1>Raspberry Pi - CPU Temperature</H1>

接著設定將 MRTG 加到樹莓派啟動時就自動執行,產生一個 mrtg 啟動檔於 /etc/init.d
$ sudo nano /etc/init.d/mrtg
開機批次執行檔如下:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
DAEMON="/usr/bin/mrtg" 
PARAM=" --user=root /etc/mrtg.cfg --logging /var/log/mrtg.log" 
NAME="MRTG" 
DESC="Multi Router Traffic Grapher Daemon"

test -f $DAEMON || exit 0 
set -e 
case "$1" in 
start) 
        echo -n "Starting $DESC: " 
        env LANG=C $DAEMON $PARAM 
        echo "$NAME." 
        ;; 
stop) 
        echo -n "Stopping $DESC: " 
        killall -9 mrtg 
        echo "$NAME." 
        ;; 
restart|force-reload) 
        echo -n "Restarting $DESC: " 
        killall -9 mrtg 
        sleep 1 
        env LANG=C $DAEMON $PARAM 
        echo "$NAME." 
        ;; 
*) 
        N=/etc/init.d/$NAME 
        echo "Usage: $N {start|stop|restart|force-reload}" 
        exit 1 
        ;; 
esac 
exit 0 

設定為可執行的檔案後,啟動服務:
$ sudo chmod +x /etc/init.d/mrtg
$ sudo /etc/init.d/mrtg start

就可以看到如本頁最上方的流量圖了。

[參考資料]
• MRTG Home: oss.oetiker.ch/mrtg/
Khurram Aziz : Monitoring Raspberry Pi

[修訂紀錄]
2018.03.28 初稿

Post a Comment

較新的 較舊