-----------------------------
一、介紹
多種探測方式,包括fping、echoping、dig、curl等;
易用可擴充的插件;
很有特色的alert設定,不隻是簡單的設定一個閥值;
二、安裝
1、準備工作:
smokeping是一個用perl寫的程式,是以不需要安裝。但是他需要使用一些工具以及perl的module,比如rrdtool、fping、echoping等,這些都需要預先安裝好。
如果是用debian的話,直接用apt來安裝就可以了:
aptitude install rrdtool apache2 fping echoping libapache2-mod-speedycgi libwww-perl libsocket6-perl libnet-telnet-perl libnet-dns-perl libnet-ldap-perl libio-socket-ssl-perl libauthen-radius-perl libcgi-perl librrds-perl librrdp-perl
smokeping啟動的時候,也會自己去檢查需要用到的程式是否能找到。
2、設定:
在smokeping的子目錄中會發現很多“*.dist”命名的檔案,這些檔案使用的時候請将其改名為“*“并進行配置。
bin/smokeping
主程式,運作在背景。
在這個檔案裡面我們需要修改前面兩個lib和後面config檔案的path。
兩個lib分别是smokeping的lib和rrdtool的lib。
我的smokeping安裝在/usr/local/目錄中,是以我的設定是:
use lib qw(/usr/lib/perl5/);
use lib qw(/usr/local/smokeping/lib);
Smokeping::main("/usr/local/smokeping/etc/config");
htdocs/smokeping.cgi
顯示頁面、圖像和作為slave傳輸資料的接口,設定方法與"bin/smokeping"類似。
但是第一行的speedy的路徑可能需要修改,否則浏覽器中隻會看到一個白色的頁面。
htdocs/cropper/*
用來作頁面圖像放大縮小的工具。
etc/config
主配置檔案,非常重要。
在section:
*** General ***
裡面我主要配置幾個path:
imgcache = /home/temp/smokeping/cache
imgurl = https://smokeping/smokepingcache
datadir = /home/temp/smokeping/data
piddir = /home/temp/smokeping/var
cgiurl = https://smokeping/smokeping/smokeping.cgi (我使用了ssl)
要在頁面中顯示中文的話,在section:
*** Presentation ***
中,加入:
charset = gb2312
不過rrdtool圖像中還是顯示不了中文。
etc/basepage.html
顯示頁面的主架構。裡面之需要配置"htdocs/cropper/"的位置即可。
3、配置apache:
<Directory /usr/local/smokeping/htdocs/>
AllowOverride None
AddHandler cgi-script cgi
Options ExecCGI
</Directory>
Alias /smokeping/ "/usr/local/smokeping/htdocs/"
Alias /smokepingcache/ "/home/temp/smokeping/cache/"
三、普通使用
1、開始使用
smokeping的配置檔案"etc/config"使用Config::Grammar形式的config檔案,以"+"作為層的開始符号。
比如:
+layer1
menu = layer1
title = layer1
++site1
menu = layer2
title = layer2
+++myhost1
menu = layer3
title = layer3
host = myhost.com
+++myhost2
menu = layer4
title = layer4
host = yourhost.com
...
其中myhost1、myhost2屬于site1,而site1則屬于layer1。 另外子層的"menu"、"title"并不是必需的。
配置好以後,可以啟動smokeping了:
./bin/smokeping
如果有錯誤的話可以debug一下:
./bin/smokeping --debug
2、multi-graph功能
也就是在一張圖裡面畫上多個監測點的數值,很簡單:
+++ Multi
menu = Multi
title = My Multi
host = /layer1/site1/myhost1 /layer1/site1/myhost2
其它都一樣,不同的是在"host"中指定要放在一起的host(要之前有設定的host)的路徑就可以了。
四、smoketrace
作者在2.4版本中加入的新功能,個人覺得用處不太大。
最後在section:
*** Targets ***
中加入:
menuextra = <a target='_blank' href='tr.html{HOST}' class='{CLASS}' /
onclick="window.open(this.href,this.target, /
'width=800,height=500,toolbar=no,location=no,
status=no,scrollbars=no'); /
return false;">*</a>
即可看到頁面左邊的的每一個host的後面都多了個"*"号,點這個"*"号就會彈出trace的頁面。
這個trace比較像"MTR"的trace結果,為什麼說它沒有什麼用呢?因為它傳回結果比較慢,而且隻能使用"master"的機器來進行trace。
五、master/slave模式
[slave 1] [slave 2] [slave 3]
| | |
+-------+ | +--------+
| | |
v v v
+---------------+
| master |
從圖上可以看到,slave主機會自己去檢查監測點的情況(loss and rtt),并将數值送出給master主機(通過smokeping.cgi)。
值得注意的是,slave并不需要config檔案,每次slave送出完資料以後,會詢問master它自己的配置檔案是否有修改,如果有修改的話slave會進行更新。
配置方法我就簡單說說好了:
設定slave資訊:
*** Slaves ***
secrets=/usr/local/smokeping/etc/slavesecrets.conf
+slave1
display_name=bjcnc
location=China
color=ff0000
要注意的是"slave1"這個名字需要設定為slave主機的hostname,并且寫在"slavesecrets.con"檔案裡面,如:
slave1:12345
如果不想用slave主機的hostname,那麼在slave主機啟動smokeping服務的時候需要使用"--slave-name"來指定自己的名字。
slaves = slave1 slave2
...
+dest1
slaves =
+dest2
slaves = slave1
+dest3
在section
中指定那個host需要使用哪個slave幫忙進行檢測。下層會繼承上層的配置,如果下層不像繼承的話,可以配置"slaves ="來避免使用slave。
設定好以後,master的伺服器重新開機一下:
./bin/smokeping --restart
啟動slave:
./bin/smokeping --master-url=http://smokeping/smokeping.cgi /
--cache-dir=/var/tmp/smokeping/ /
--shared-secret=/usr/local/smokeping/secret.txt /
--slave-name=slave1
其中secret.txt記載着在master的slavesecrets.conf檔案裡面對應的slave的密碼(隻有密碼,沒有slave名稱)。
slavesecrets.conf和secret.txt檔案的檔案權限都要是"600"的。
master/slave模式中,master和slave的圖檔都會顯示在同一個頁面中,如果不希望顯示master的圖檔,可以使用
nomasterpoll=yes
參數。
另外要注意的一點是,master上面啟動"smokeping"程序和apache程序的使用者必須要一緻。因為rrd檔案是由"smokeping"程序建立的,而資料的update卻是由"smokeping.cgi"進行的,也就是apache使用者。如果不一緻的話會出現rrd檔案無法被更新的情況,這個情況即使在slave主機上面進行debug也是看不出來的。具體的現象是在頁面上面看到master的圖像出現資料,但是slave的圖像一直是空白的,資料顯示是"nan"。
六、alert設定
smokeping的alert設定有點複雜,但是卻很好用,考慮得很周全。
它預設可以使用郵件進行alert,也可以直接調用外部程式進行IM的報警,也就是說你隻需要寫一個簡單的腳本,就可以實作smokeping的MSN 、 gtalk 、飛信等IM、短信報警了。
例子:
*** Alerts ***
to = |/usr/local/smokeping/bin/alert.sh
from = joe@somehost
"to" 選項,預設是要填入一個email位址的,但是隻要在"="後面加上"|",後面再跟你自定義的腳本的路徑,就可以調用自己的腳本進行alert了。
腳本會讀入5或者6個參數:name-of-alert, target, loss-pattern, rtt-pattern, hostname,[raise]。
自己選擇使用哪些參數alert即可。
+someloss
type = loss
# in percent
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times in a row
+rttbad
type = rtt
# in milliseconds
pattern = ==S,>50,>50
comment = route
+rttdetect
type = rtt
# in milliseconds
pattern = <10,<10,<10,<10,<10,<100,>100,>100,>100
comment = routing messed up again ?
alert的類型我們主要使用"loss"和"rtt"兩種(當然還有更多更複雜的類型)。上面的兩個alert設定的意思是:
someloss:
如果在12次檢查中出現了3次丢包的情況(不論丢多少個包),就進行alert;
rttbad:
如果連續出現兩次50毫秒以上的延時,就進行alert;
rrtdetect:
之前5次檢查延時都少于10毫秒,前6次檢查延時都少于100毫秒,第7次開始連續3次檢查延時都大于100毫秒的話,就進行alert。
從上面可以看出,smokeping的alert做得很全面和仔細,并非像其他工具一樣,就使用一個閥值來進行預警的。
最後在你希望進行alert的target裡面加上:
alerts = rttbad,someloss
即可。
和"slaves"一樣,也是向上繼承的,避免繼承的方法也是"alerts =",做一個空的alerts。
參考: