前言

個人架站或者系統維運,裝個監控也很正常,在非常早期的時候通常會使用MRTG作為監控工具,主要是可以配合SNMP監控網路流量,也可以自己寫Script來擴充,用以監控CPU、RAM或者其他自訂資源,雖然現在大多都是Grafana、Kibana的時代的,但秉持復古(?)的原則,所以來記錄一下現在這個時代如何佈署MRTG+RRDtool的監控。

MRTG與RRDtool

MRTG的功能是可透過crontab,每隔一段時間使用Perl來產生可供檢視的天、週、月、年的監控圖片以及網頁,歷史資料則是以文字檔儲存,但這樣在早期很容易資源瓶頸的主機來說,只要監控的指標一多時,會造成跑監控本身就是一件消耗資源的事情。

可能是作者注意到這一點,後來又重新實作開發了RRDtool,主要改變是程式會產生.rrd的資料檔案,後續要檢視再配合程式將.rrd繪製成圖片,故執行監控時的資源消耗變成只有對.rrd檔的修改,大幅降低資源消耗,以上雖然也是個人解釋,沒有去求證過。

綜上所述後來找到了方法,由於是同個作者,所以MRTG後來也可輸出RRDtool格式的rrd檔案,故可將MRTG本身輸出格式改成RRDtool,配合mrtg-rrd.cgi做瀏覽,則可以在檢視監控時才使用RRDtool產生圖片,比起直接使用MRTG來繪製圖片,可以非常顯著的降低資源消耗。

先前環境是使用lighttpd,但因為這個好像有點要死不死的,後來也沒用了,最近幾年都是使用nginx,故會研究以上環境如何佈署於nginx上,此外,實驗環境為Ubuntu 20.04

MRTG監控

安裝可直接使用apt安裝,除了MRTG以外,還需安裝RRDtool、SNMP相關工具。

apt install mrtg rrdtool snmpd libcgi-pm-perl libfcgi-perl librrds-perl

首先是SNMP的部分,設定檔案位於/etc/snmp/snmpd.conf,於任意位置加上以下設定:

rocommunity mrtg

上述mrtg為community name,可任意修改成自己喜歡的名字,修改完再重啟snmpd。

systemctl restart snmpd

再來是MRTG的部分,其本身有cfgmaker可產生cfg檔案,使用主程式配合cfg檔案執行,即可產生監控圖片以及網頁,這邊主要需要指定資料產生位置以及上述設定過的snmp的community name。

cfgmaker --global 'WorkDir: /var/www/mrtg' --output mrtg.cfg mrtg@localhost

產生完設定檔後將其打開,預設會將所有網卡都設定進去,如果沒有需要某些網卡,可將設定註解掉,另外最重要的是要加上以下設定:

LogFormat: rrdtool
PathAdd: /usr/bin/

以上LogFormat改為rrdtool,PathAdd則是RRDtool的執行檔路徑,如沒問題可以執行,執行後會產出.rrd檔案。

env LANG=C /usr/bin/mrtg mrtg.cfg --lock-file $(pwd)/mrtg_l --confcache-file $(pwd)/mrtg.ok

重複執行個三次確定沒有錯誤的話,再來就可以配合crontab重複執行。

mrtg-rrd.cgi

再來是mrtg-rrd.cgi,本身是沒有維護了,最後停在0.7版本,GitHub上有找到以下兩個修改版本,但沒有比較過,不知道差異在哪。

下載或者Clone下來後,使用make產生mrtg-rrd.fcgi

接下來可使用spawn-fcgi將mrtg-rrd以FastCGI的方式跑起來,如果沒有spawn-fcgi,可使用apt安裝。

spawn-fcgi -s /tmp/fcgi-socket -u www-data -f $(pwd)/mrtg-rrd.fcgi

以上主要要注意的是,使用者需跟nginx一樣,因使用apt安裝,所以是www-data

再來是nginx設定檔,只要存取網址<url>/mrtg-rrd開頭的都會執行mrtg-rrd.cgi。

location ~ ^(.*mrtg-rrd)(.*)$ {
    include fastcgi_params;
    gzip off;
    fastcgi_pass unix:/tmp/fcgi-socket;
    #  fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_split_path_info ^(.*mrtg-rrd)(.*)$;
    fastcgi_param PATH_INFO       $fastcgi_path_info;
  }

都沒問題的話可存取網址<url>/mrtg-rrd,就可以看到監控畫面了。

結語

雖然說這東西真的非常老了,以前可說是大多數人都在使用的解決方案,但這監控粒度不足,也不太好查詢指定時間範圍的資料,故後來有人開發了Cacti,主要是使用PHP配合RRDtool,彈性就比上述方案好多了,也可配合Script做出彈性,但這也很老了,如果現在要佈署,還是使用Grafana、Kibana相關的解決方案吧。