1. 程式人生 > >使用smokeping監測網路

使用smokeping監測網路

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

本文可自由轉載,但請遵循“署名-非商業用途-保持一致”的創作共用協議。永久連結:JoeCen's 小貓窩
-----------------------------


一、介紹

smokeping

rrdtool的作者Tobi Oetiker的作品,所以它在圖形顯示方面有很大優勢,也是一個很有特點的opensource工具:

多種探測方式,包括fping、echoping、dig、curl等;
易用可擴充套件的外掛;
master/slave的工作方式,可以在多個節點收集同一個監測點的資料;
很有特色的alert設定,不只是簡單的設定一個閥值;

smokeping

smokeping當前的版本是2.4.2,本文也是基於這個版本。

二、安裝

下載頁面:http://oss.oetiker.ch/smokeping/pub/

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

如果是其他linux的發行版,可以使用

CPAN來安裝perl的module。

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
主配置檔案,非常重要。
它使用的是perl的Config::Grammar模組。
更詳細的配置請點選這裡

在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版本中加入的新功能,個人覺得用處不太大。
這裡有詳細的安裝方法,如果你也是將"htdocs"目錄作為cgi的目錄的話,什麼都不用改,只需要將"htdocs/tr.cgi.dist"檔案改名為"tr.cgi",並配置裡面的lib路徑即可。

最後在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模式
下面說說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"來指定自己的名字。

*** Targets ***
 slaves = slave1 slave2
 ...
 +dest1
 slaves =
 ...
 +dest2
 slaves = slave1
 ...
 +dest3
 ...

在section

*** Targets ***

中指定那個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 = [email protected]

"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。

參考:
SmokePing Documentation http://oss.oetiker.ch/smokeping/doc/index.en.html

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述