使用smokeping监测网络
本文可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。 永久链接:JoeCen's 小猫窝-----------------------------
易用可扩展的插件;
master/slave的工作方式,可以在多个节点收集同一个监测点的数据;
很有特色的alert设置,不只是简单的设置一个阀值;
在smokeping的子目录中会发现很多“*.dist”命名的文件,这些文件使用的时候请将其改名为“*“并进行配置。
主程序,运行在后台。
在这个文件里面我们需要修改前面两个lib和后面config文件的path。
两个lib分别是smokeping的lib和rrdtool的lib。
use lib qw(/usr/local/smokeping/lib);
Smokeping::main("/usr/local/smokeping/etc/config");
显示页面、图像和作为slave传输数据的接口,设置方法与"bin/smokeping"类似。
但是第一行的speedy的路径可能需要修改,否则浏览器中只会看到一个白色的页面。
用来作页面图像放大缩小的工具。
imgurl = https://smokeping/smokepingcache
datadir = /home/temp/smokeping/data
piddir = /home/temp/smokeping/var
cgiurl = https://smokeping/smokeping/smokeping.cgi (我使用了ssl)
显示页面的主框架。里面之需要配置"htdocs/cropper/"的位置即可。
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文件,以"+"作为层的开始符号。
比如:
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
...
menu = Multi
title = My Multi
host = /layer1/site1/myhost1 /layer1/site1/myhost2
作者在2.4版本中加入的新功能,个人觉得用处不太大。
这里有详细的安装方法,如果你也是将"htdocs"目录作为cgi的目录的话,什么都不用改,只需要将"htdocs/tr.cgi.dist"文件改名为"tr.cgi",并配置里面的lib路径即可。
onclick="window.open(this.href,this.target, \
'width=800,height=500,toolbar=no,location=no,
status=no,scrollbars=no'); \
return false;">*</a>
这个trace比较像"MTR"的trace结果,为什么说它没有什么用呢?因为它返回结果比较慢,而且只能使用"master"的机器来进行trace。
下面说说master、slave模式,详细请看这里。
| | |
+-------+ | +--------+
| | |
v v v
+---------------+
| master |
+---------------+
值得注意的是,slave并不需要config文件,每次slave提交完数据以后,会询问master它自己的配置文件是否有修改,如果有修改的话slave会进行更新。
设置slave信息:
secrets=/usr/local/smokeping/etc/slavesecrets.conf
+slave1
display_name=bjcnc
location=China
color=ff0000
slaves = slave1 slave2
...
+dest1
slaves =
...
+dest2
slaves = slave1
...
+dest3
...
--cache-dir=/var/tmp/smokeping/ \
--shared-secret=/usr/local/smokeping/secret.txt \
--slave-name=slave1
slavesecrets.conf和secret.txt文件的文件权限都要是"600"的。
另外要注意的一点是,master上面启动"smokeping"进程和apache进程的用户必须要一致。因为rrd文件是由"smokeping"进 程创建的,而数据的update却是由"smokeping.cgi"进行的,也就是apache用户。如果不一致的话会出现rrd文件无法被更新的情 况,这个情况即使在slave主机上面进行debug也是看不出来的。具体的现象是在页面上面看到master的图像出现数据,但是slave的图像一直 是空白的,数据显示是"nan"。
smokeping的alert设置有点复杂,但是却很好用,考虑得很周全。
它默认可以使用邮件进行alert,也可以直接调用外部程序进行IM的报警,也就是说你只需要写一个简单的脚本,就可以实现smokeping的MSN 、 gtalk 、飞信等IM、短信报警了。
to = |/usr/local/smokeping/bin/alert.sh
from = joe@somehost
脚本会读入5或者6个参数:name-of-alert, target, loss-pattern, rtt-pattern, hostname,[raise]。
自己选择使用哪些参数alert即可。
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 ?
someloss:
如果在12次检查中出现了3次丢包的情况(不论丢多少个包),就进行alert;
如果连续出现两次50毫秒以上的延时,就进行alert;
之前5次检查延时都少于10毫秒,前6次检查延时都少于100毫秒,第7次开始连续3次检查延时都大于100毫秒的话,就进行alert。
和"slaves"一样,也是向上继承的,避免继承的方法也是"alerts =",做一个空的alerts。
SmokePing Documentation http://oss.oetiker.ch/smokeping/doc/index.en.html