為了嘗試Munin,我們將再次使用Docker容器運(yùn)行Munin服務(wù)
docker run—p 3000:80 lrivallain/munin:latest
第一次運(yùn)行Munin需要一點(diǎn)時(shí)間,所以,在瀏覽web界面前先稍等一下。如果你不喜歡等待,可以在容器中手動(dòng)運(yùn)行munin-update的命令,如下所示。它會(huì)顯式地輪詢所有的Munin節(jié)點(diǎn)來獲取統(tǒng)計(jì)數(shù)據(jù)。
現(xiàn)在你應(yīng)該可以看到第一次運(yùn)行過程中創(chuàng)建的圖。如果讓它運(yùn)行一段時(shí)間,你可以看到圖是如何發(fā)展的。
實(shí)現(xiàn)一個(gè)監(jiān)控應(yīng)用程序棧的特定數(shù)據(jù)統(tǒng)計(jì)的Munin插件并不困難。你可以編寫一段shell腳本讓Munin調(diào)用,來獲得你想要追蹤的統(tǒng)計(jì)數(shù)據(jù)。
Munin是用Perl實(shí)現(xiàn)的,但是你可以用大多數(shù)的語言實(shí)現(xiàn)Munin的插件,只要遵從一個(gè)簡(jiǎn)單的接口即可。
程序使用config參數(shù)調(diào)用時(shí)應(yīng)當(dāng)返回一些元數(shù)據(jù)。這是為了讓Munin在圖上標(biāo)出正確的標(biāo)簽。
下面是一個(gè)圖配置的例子:
graph title Load average
graph_vlabel load
load.label load
發(fā)送數(shù)據(jù)只要打印到stdout即可。
printf "load.value "
cut -d' ' -f2 /proc/loadavg
下面這段腳本可以繪制出機(jī)器的平均負(fù)載
#! /bin/sh
case$1 in
config)
Cat<< 'EOM'
graph_title Load average
graph_vlabel load
load.label load
EOM
exit 0; ;
esac
printf "load.value "
cut -d' ' -f2 /proc/loadavg
這個(gè)系統(tǒng)很簡(jiǎn)單也很可靠,你也能很容易為自己的應(yīng)用實(shí)現(xiàn)它。需要做的只是將你的數(shù)據(jù)統(tǒng)計(jì)打印到stdout即可。