一、介绍
smokeping是rrdtool的作者Tobi Oetiker的作品,所以它在图形显示方面有很大优势,也是一个很有特点的opensource工具:
多种探测方式,包括fping、echoping、dig、curl等;
易用可扩展的插件;
master/slave的工作方式,可以在多个节点收集同一个监测点的数据;
很有特色的alert设置,不只是简单的设置一个阀值;
smokeping当前的版本是2.4.2,本文也是基于这个版本。
二、安装
下载页面:http://oss.oetiker.ch/smokeping/pub/
1、准备工作:
smokeping是一个用perl写的程序,所以不需要安装。但是他需要使用一些工具以及perl的module,比如rrdtool、fping、echoping等,这些都需要预先安装好。
如果是用debian的话,直接用apt来安装就可以了:
如果是其他linux的发行版,可以使用CPAN来安装perl的module。
smokeping启动的时候,也会自己去检查需要用到的程序是否能找到。
2、设置:
在smokeping的子目录中会发现很多“*.dist”命名的文件,这些文件使用的时候请将其改名为“*“并进行配置。
bin/smokeping
主程序,运行在后台。
在这个文件里面我们需要修改前面两个lib和后面config文件的path。
两个lib分别是smokeping的lib和rrdtool的lib。
我的smokeping安装在/usr/local/目录中,所以我的设置是:
htdocs/smokeping.cgi
显示页面、图像和作为slave传输数据的接口,设置方法与"bin/smokeping"类似。
但是第一行的speedy的路径可能需要修改,否则浏览器中只会看到一个白色的页面。
htdocs/cropper/*
用来作页面图像放大缩小的工具。
etc/config
主配置文件,非常重要。
它使用的是perl的Config::Grammar模块。
更详细的配置请点击这里。
在section:
里面我主要配置几个path:
要在页面中显示中文的话,在section:
中,加入:
不过rrdtool图像中还是显示不了中文。
etc/basepage.html
显示页面的主框架。里面之需要配置"htdocs/cropper/"的位置即可。
3、配置apache:
三、普通使用
1、开始使用
smokeping的配置文件"etc/config"使用Config::Grammar形式的config文件,以"+"作为层的开始符号。
比如:
其中myhost1、myhost2属于site1,而site1则属于layer1。 另外子层的"menu"、"title"并不是必需的。
配置好以后,可以启动smokeping了:
如果有错误的话可以debug一下:
2、multi-graph功能
也就是在一张图里面画上多个监测点的数值,很简单:
其它都一样,不同的是在"host"中指定要放在一起的host(要之前有设置的host)的路径就可以了。
四、smoketrace
作者在2.4版本中加入的新功能,个人觉得用处不太大。
这里有详细的安装方法,如果你也是将"htdocs"目录作为cgi的目录的话,什么都不用改,只需要将"htdocs/tr.cgi.dist"文件改名为"tr.cgi",并配置里面的lib路径即可。
最后在section:
中加入:
即可看到页面左边的的每一个host的后面都多了个"*"号,点这个"*"号就会弹出trace的页面。
这个trace比较像"MTR"的trace结果,为什么说它没有什么用呢?因为它返回结果比较慢,而且只能使用"master"的机器来进行trace。
五、master/slave模式
下面说说master、slave模式,详细请看这里。
从图上可以看到,slave主机会自己去检查监测点的情况(loss and rtt),并将数值提交给master主机(通过smokeping.cgi)。
值得注意的是,slave并不需要config文件,每次slave提交完数据以后,会询问master它自己的配置文件是否有修改,如果有修改的话slave会进行更新。
配置方法我就简单说说好了:
设置slave信息:
要注意的是"slave1"这个名字需要设置为slave主机的hostname,并且写在"slavesecrets.con"文件里面,如:
如果不想用slave主机的hostname,那么在slave主机启动smokeping服务的时候需要使用"--slave-name"来指定自己的名字。
在section
中指定那个host需要使用哪个slave帮忙进行检测。下层会继承上层的配置,如果下层不像继承的话,可以配置"slaves ="来避免使用slave。
设置好以后,master的服务器重启一下:
启动slave:
其中secret.txt记载着在master的slavesecrets.conf文件里面对应的slave的密码(只有密码,没有slave名称)。
slavesecrets.conf和secret.txt文件的文件权限都要是"600"的。
master/slave模式中,master和slave的图片都会显示在同一个页面中,如果不希望显示master的图片,可以使用
参数。
另外要注意的一点是,master上面启动"smokeping"进程和apache进程的用户必须要一致。因为rrd文件是由"smokeping"进程创建的,而数据的update却是由"smokeping.cgi"进行的,也就是apache用户。如果不一致的话会出现rrd文件无法被更新的情况,这个情况即使在slave主机上面进行debug也是看不出来的。具体的现象是在页面上面看到master的图像出现数据,但是slave的图像一直是空白的,数据显示是"nan"。
六、alert设定
smokeping的alert设置有点复杂,但是却很好用,考虑得很周全。
它默认可以使用邮件进行alert,也可以直接调用外部程序进行IM的报警,也就是说你只需要写一个简单的脚本,就可以实现smokeping的MSN 、 gtalk 、飞信等IM、短信报警了。
例子:
"to" 选项,默认是要填入一个email地址的,但是只要在"="后面加上"|",后面再跟你自定义的脚本的路径,就可以调用自己的脚本进行alert了。
脚本会读入5或者6个参数:name-of-alert, target, loss-pattern, rtt-pattern, hostname,[raise]。
自己选择使用哪些参数alert即可。
alert的类型我们主要使用"loss"和"rtt"两种(当然还有更多更复杂的类型)。上面的两个alert设置的意思是:
someloss:
如果在12次检查中出现了3次丢包的情况(不论丢多少个包),就进行alert;
rttbad:
如果连续出现两次50毫秒以上的延时,就进行alert;
rrtdetect:
之前5次检查延时都少于10毫秒,前6次检查延时都少于100毫秒,第7次开始连续3次检查延时都大于100毫秒的话,就进行alert。
从上面可以看出,smokeping的alert做得很全面和仔细,并非像其他工具一样,就使用一个阀值来进行预警的。
最后在你希望进行alert的target里面加上:
即可。
和"slaves"一样,也是向上继承的,避免继承的方法也是"alerts =",做一个空的alerts。
参考:
SmokePing Documentationhttp://oss.oetiker.ch/smokeping/doc/index.en.html