天天看點

使用smokeping監測網絡

-----------------------------

一、介紹

多種探測方式,包括fping、echoping、dig、curl等;

易用可擴充的插件;

很有特色的alert設定,不隻是簡單的設定一個閥值;

使用smokeping監測網絡

二、安裝

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。

參考:

繼續閱讀