公司最近在發展的系統之一就是將設備的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的安裝有好幾個方式,可以執行下載壓縮檔安裝,或是直接從套件庫進行安裝,指令如下:
安裝過程會出現一個視窗畫面,如果要設定讀取SNMP資料的權限,可以設定為YES,只有 root 才能讀取 /etc/mrtg.cfg,但是如果要用RRD Tool 來畫圖的話,需要設成NO。
設定SNMP
這裡先設定基本的 SNMP,讓SNMP可以運作,重新啟動前先編輯SNMP Daemon設定檔:
將這兩行
agentAddress udp:127.0.0.1:161
#rocommunity public localhost
改成
agentAddress udp:161
rocommunity public localhost
安裝 Web Server
使用以下指令安裝lighttpd 套件:
Lighttpd的工作目錄首頁在 /var/www/html,在該目錄下建立一個 mrtg目錄,作為存放mrtg的網頁使用
設定 MRTG
產生一個新的 MRTG 設定檔,放在 /etc目錄下:
修改mrtg.cfg的工作目錄,從 /var/www/mrtg 改成 /var/www/html/mrtg :
除了工作目錄要設定,還有另一個部分要修改,您會看到 /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 首頁:
連結至樹莓派 Web Server,就可以看到 MRTG 流量圖。剛啟動時,不會有流量,要過1-2個小時之後,才會產生流量:
點下首頁的流量圖(這是過了一天的紀錄),可再細分日、週、月、年的流量分析。
以上只是實作網路的流量記錄,如要紀錄CPU、記憶體還要再進行設定。
[CPU使用量、溫度及記憶體用量]
若要得知CPU 的可用率,可用 snmpget 指令查詢受監控CPU的可用率,指令如下:
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的溫度,寫一個批次執行檔來取得:
將文字檔改成執行檔:
執行指令時,用 -g 帶入參數:
得到以下結果,溫度為攝氏 41.160度:
.1.3.6.1.2.1.25.1.8
gauge
41160
接著將這個批次指令設定到 snmpd.conf :
加入以下設定:
pass .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp-cpu-temp.sh
修改完設定檔後,重新啟動snmpd服務:
透過snmp取得cpu溫度:
iso.3.6.1.2.1.25.1.8 = Gauge32: 41160
接著編輯 MRTG 設定檔,加上CPU使用率、溫度跟記憶體使用量:
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
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
Target[CPU-temp]: .1.3.6.1.2.1.25.1.7.0&.1.3.6.1.2.1.25.1.8:public@localhost
接著設定將 MRTG 加到樹莓派啟動時就自動執行,產生一個 mrtg 啟動檔於 /etc/init.d
test -f $DAEMON || exit 0
設定為可執行的檔案後,啟動服務:
就可以看到如本頁最上方的流量圖了。
[參考資料]
• MRTG Home: oss.oetiker.ch/mrtg/
• Khurram Aziz : Monitoring Raspberry Pi
[修訂紀錄]
2018.03.28 初稿
MRTG流量圖常被用來作為網路流量使用,除此也可以將CPU、記憶體以及磁碟用量等透過網頁呈現。若要經由網頁顯示,就需要有Web Server,如Apache、Nginx、Lighttpd 都可以用來作為顯示MRTG流量的網頁伺服器。本實作以Lighttpd來提供網頁服務,安裝過程可自行更換成喜好的Web Server。流量顯示圖如下:
$ 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>
$ 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 初稿
張貼留言