Centos6.4 搭建smokeping
参考官网文档:http://oss.oetiker.ch/smokeping/doc/index.en.html
一、什么是smokeping?
smokeping是IDC网络监控利器。Smokeping 是rrdtool 的作者Tobi Oetiker 的作品,是用Perl 写的,主要是监视网络性能,包括常规的ping,用echoping监控www 服务器性能,监视dns 查询性能,监视ssh 性能等。底层也是rrdtool做支持,特点是画的图非常漂亮,网络丢包和延迟用颜色和阴影来表示。
二、smokeping架构组成
RRDtool、Fping、Echoping、Curl、Dig、SSh
Perl模块,Perl、SpeedyCGI、Apache、NGINX
三、smokeping分布式介绍
1)使用Smokeping的过程中,很容易就发现,如果从单个节点去探测网络性能,往往是不够的,Smokeping提供了多节点的分布式部署功能,也就 是可以从多个节点去探测到某个地区的网络状态,这样才是我们监控网络希望看到的情况。
2)Smokeping称其为主从模式,主从模式的配置很简单,从服务器的安装和主服务器相同,只是从服务器不用自己的config文件,而是在启动的过程中请求主服务器的config文件,这样你只需要维护主服务器上的配置文件即可。
3)Smokeping检测分布式的检测方式是被动模式,由从节点启动时获得主节点的config文件,然后进行测试,测试完毕后直接将数据提交给主节点。主从通信验证是通过我们可以设置多个从服务器,主从服务器通过指定–shared-secret=filename来和主进行密码验证。
4)smokeping默认探测分别从主从去同时探测节点,如果希望屏蔽掉master探测,则需要在master配置文件config中顶级层中加入nomasterpoll = yes这个参数是递归到下面层次目录中.
博文来自:www.51niux.com
四、smokeping的搭建
1. yum安装必要包组
# yum -y install perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-CGI-SpeedyCGI perl-FCGI perl-CGI-SpeedCGI perl-Time-HiRes perl-ExtUtils-MakeMaker perl-RRD-Simple rrdtool rrdtool-perl curl fping echoping httpd httpd-devel gcc make wget libxml2-devel libpng-devel glib pango pango-devel freetype freetype-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel mod_fastcgi screen openssl*
#提示一下:这里可能由于yum源的不同fping没能yum安装,所以如果No package fping,就要手工安装一下
# wget www.fping.org/dist/fping-3.13.tar.gz
# tar zxf fping-3.13.tar.gz
# cd fping-3.13
# ./configure
# make && make install
2. 编译安装CGI和Config-Grammar
#wget search.cpan.org/CPAN/authors/id/L/LE/LEEJO/CGI-4.35.tar.gz
#tar zxf CGI-4.35.tar.gz
#cd CGI-4.35
# perl Makefile.PL
# make && make install
提示:如果不安装CGI模块smokeping在运行gmake install的时候会提示:
Can't locate CGI.pm in @INC (@INC contains: /usr/local/smokeping/thirdparty/lib/perl5 ../lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ../lib/Smokeping.pm line 5.
BEGIN failed--compilation aborted at ../lib/Smokeping.pm line 5.
# wget search.cpan.org/CPAN/authors/id/D/DS/DSCHWEI/Config-Grammar-1.12.tar.gz #smokeping的主配置文件config就使用的这个perl模块
# tar zxf Config-Grammar-1.12.tar.gz
# cd Config-Grammar-1.12
# perl Makefile.PL
# make && make install
提示:如果不安装Config-Grammar模块时,安装smokeping在运行gmake install的时候会提示:
Can't locate Config/Grammar.pm in @INC (@INC contains: /usr/local/smokeping/thirdparty/lib/perl5 ../lib /usr/local/smokeping/thirdparty/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ../lib/Smokeping/Config.pm line 5.
3. 安装smokeping
# wget oss.oetiker.ch/smokeping/pub/smokeping-2.6.10.tar.gz
# ./configure --prefix=/usr/local/smokeping #2.6.10版本就不用提前执行并且也不能执行./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty,如果后面老是提示你少这个perl模块哪个perl模块的话,如果嫌麻烦可以下载一个2.6.8的软件包,进行一下./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty来补一下。
# gmake install
4. 配置smokeping
cd /usr/local/smokeping/
mkdir {cache,data,var}
touch /var/log/smokeping.log
chown apache:apache cache data var
chown apache:apache /var/log/smokeping.log
cd /usr/local/smokeping/htdocs/
cp smokeping.fcgi.dist smokeping.fcgi
cd /usr/local/smokeping/etc
cp config.dist config
vim config
cgiurl = http://192.168.1.108/smokeping
step = 60 #这里是定义采集时间,单位是秒,在启动服务前设置
pings = 60 #在规定时间内发多少包
chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist #不然会报下面的错误:
ERROR: /usr/local/smokeping/bin/../etc/config, line 121: File '/usr/local/smokeping/etc/smokeping_secrets.dist' is world-readable or writable, refusing it
setenforce 0 #selinux要关闭,不然http日志里面报下面的错误:
(13)Permission denied: exec of '/usr/local/smokeping/htdocs/smokeping.fcgi' failed
5.配置apache
vim /etc/httpd/conf/httpd.conf #在DocumentRoot "/var/www/html" 下面添加内容
Alias /cache "/usr/local/smokeping/cache/"
Alias /cropper "/usr/local/smokeping/htdocs/cropper/"
Alias /smokeping "/usr/local/smokeping/htdocs/smokeping.fcgi"
<Directory "/usr/local/smokeping">
AllowOverride None
Options All
AddHandler cgi-script .fcgi .cgi
AllowOverride AuthConfig
Order allow,deny
Allow from all
AuthName "Smokeping"
AuthType Basic
AuthUserFile /usr/local/smokeping/htdocs/htpasswd
Require valid-user
DirectoryIndex smokeping.fcgi
</Directory>
6. 其他配置
htpasswd -c /usr/local/smokeping/htdocs/htpasswd admin #生成admin用户的密码文件
echo "/usr/local/smokeping/bin/smokeping --logfile=/var/log/smokeping.log 2>&1 &" >> /etc/rc.local #添加开机启动
chkconfig httpd on
chkconfig iptables off
7. 启动服务
# /etc/init.d/httpd restart
# /usr/local/smokeping/bin/smokeping restart
8. 访问测试
通过web页面:IP/smokeping来访问网站,如http://192.168.1.108/smokeping
访问页面,有一个报错信息:
Software error:
Can't locate CGI/Fast.pm in @INC (@INC contains: /usr/local/smokeping/bin/../lib /usr/local/smokeping/bin/../thirdparty/lib/perl5 /usr/local/smokeping/thirdparty/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/smokeping/bin/smokeping_cgi line 19. BEGIN failed--compilation aborted at /usr/local/smokeping/bin/smokeping_cgi line 19.
For help, please send mail to the webmaster (root@localhost), giving this error message and the time and date of the error.
解决办法:
# wget search.cpan.org/CPAN/authors/id/L/LE/LEEJO/CGI-Fast-2.10.tar.gz
# tar zxf CGI-Fast-2.10.tar.gz
# cd CGI-Fast-2.10
# perl Makefile.PL
# make && make install
#输入我们的用户名和密码之后跳转到下面的界面。然后我随便点了一个页面是有数据的,表示搭建成功。
如果页面还提示:
Software error:
Can't locate FCGI.pm in @INC (@INC contains: /usr/local/smokeping/bin/../lib /usr/local/smokeping/bin/../thirdparty/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/share/perl5/CGI/Fast.pm line 9. BEGIN failed--compilation aborted at /usr/share/perl5/CGI/Fast.pm line 9. Compilation failed in require at /usr/local/smokeping/bin/smokeping_cgi line 19. BEGIN failed--compilation aborted at /usr/local/smokeping/bin/smokeping_cgi line 19. #那就像上面那样再安装一个perl模块: 下载链接:http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/FCGI-0.78.tar.gz
至此一个smokeping的简单搭建就操作完毕了。
博文来自:www.51niux.com
五、smokeping的配置文件参数详解
# vi /usr/local/smokeping/etc/config
*** General *** #强制性部分,基本配置
owner = Peter Random #联系人的姓名类或者管理员的姓名,配置好后,再前端页面Maintained by的下方可以点击联系人。
contact = some@address.nowhere #管理员的联系方式,点击了上面设置的姓名,这里就会被调用。
mailhost = smtp.163.com #不是使用sendmail, 指定一个smtp服务器的名称和使用perl的Net::smtp模块发送邮件(警报和动态客户端脚本)。 可以指定多个逗号分隔mailhosts。如果5秒不回答SmokePing会一个接一个的试。
sendmail = /usr/sbin/sendmail #sendmail二进制路径。 它将用于发送邮件的支持与动态地址。
# NOTE: do not put the Image Cache below cgi-bin
# since all files under cgi-bin will be executed ... this is not
# good for images.
imgcache = /usr/local/smokeping/cache #目录是可见的在你的网络服务器SmokePing可以缓存图表。这里跟apache的配置是相关联的。
imgurl = cache #一个绝对URLimgcache目录或一个相对目录保持SmokePing cgi。
datadir = /usr/local/smokeping/data #SmokePing可以保持rrd文件的目录。
piddir = /usr/local/smokeping/var #pid文件存放位置
cgiurl = http://192.168.1.108/smokeping #SmokePing.cgi的完整的URL路径
smokemail = /usr/local/smokeping/etc/smokemail.dist #邮件模板路径动态主机。 这个邮件模板必须包含关键字的形式< # #关键字# # >。 附带一个Smokeping示例模板。大家可以自己看一下。
tmail = /usr/local/smokeping/etc/tmail.dist #tsmoke HTML邮件模板文件路径。
# specify this to get syslog logging
syslogfacility = local0 #syslog工具使用, 如。 local0…local7。 注意:syslog日志只有如果你指定使用。
# each probe is now run in its own process
# disable this to revert to the old behaviour
# concurrentprobes = no
*** Alerts *** #报警配置
to = test@51niux.com #发送地址
from = cs@51niux.com #发邮件地址
#+someloss
#type = loss
# in percent
#pattern = >0%,*12*,>0%,*12*,>0%
#comment = loss 3 times in a row
+someloss #定义了一个名称
type = loss #类型为丢包,可以设置丢包和延迟模式,也就是损失和rrt模式探测
pattern = >40%,*30*,>40%,*30*,>40% # 这句话的意思是在30次的检查中,如果出现了两次次单包丢包率大于40%的情况,然后又一个30个包单包丢包率大于40%出现两次,相当于60个包出现三次单包丢包率大于40%就进行alert。
comment = a packages loss gt 40% in 30 continuous 3 times. #评论,也可以理解我你对上面语句的解释,也可以写成对这个问题的判断,会出现在邮件里。
#说道这里就多说1种(不在配置文件里面):
+rttdetect
type = rtt #设置为延迟类型探测
<10,<10,<10,<10,<10,>10,>100,>100,>100 #这个的意思就是前五次的检查都小于10毫秒,但是第六次大于了10毫秒,后三次连续大于了100毫秒就触发alert.
+manyloss
type = loss
pattern = >60%,*30*,>60%,*30*,>60%
comment = loss 12 packages in 30 continuous 3 times.
*** Database ***
step = 60 #多长时间检测一次
pings = 20 #检测一次发送多少个包,官网建议是20个ping包。
# consfn mrhb steps total
AVERAGE 0.5 1 1008
AVERAGE 0.5 12 4320
MIN 0.5 12 4320
MAX 0.5 12 4320
AVERAGE 0.5 144 720
MAX 0.5 144 720
MIN 0.5 144 720
*** Presentation ***
charset = utf-8 #支持中文不然页面乱码
template = /usr/local/smokeping/etc/basepage.html.dist
+ charts #定义一级目录
menu = Charts #一级目录显示名称
title = The most interesting destinations #页面首部显示的内容
++ stddev #二级目录
sorter = StdDev(entries=>4)
title = Top Standard Deviation
menu = Std Deviation
format = Standard Deviation %f
++ max
sorter = Max(entries=>5)
title = Top Max Roundtrip Time
menu = by Max
format = Max Roundtrip Time %f seconds
++ loss
sorter = Loss(entries=>5)
title = Top Packet Loss
menu = Loss
format = Packets Lost %f
++ median
sorter = Median(entries=>5)
title = Top Median Roundtrip Time
menu = by Median
format = Median RTT %f seconds
+ overview #这些都是图标显示内容的样式
width = 600
height = 50
range = 10h
+ detail
width = 600
height = 200
unison_tolerance = 2
"Last 3 Hours" 3h
"Last 30 Hours" 30h
"Last 10 Days" 10d
"Last 400 Days" 400d
#+ hierarchies
#++ owner
#title = Host Owner
#++ location
#title = Location
*** Probes ***
+ FPing
binary = /usr/sbin/fping #如果是编译安装的这里要更改位置
*** Slaves ***
secrets=/usr/local/smokeping/etc/smokeping_secrets.dist
+boomer
display_name=boomer
color=0000ff
+slave2
display_name=another
color=00ff00
*** Targets *** #目标配置。在这里可以单独配置一台服务器的监控情况,这里要注意一下。+代表一级菜单 +下面的++是继承上面的+成为二级菜单。 而且可以有多个一级菜单和二级菜单。
probe = FPing
menu = Top
title = Network Latency Grapher
menu= Targets
host = localhost
+Other
menu = 机房网络监控
title = 所有机房网络监控列表
++dianxin
menu = 电信网络监控
title = 电信网络监控列表
host = /Other/dianxin/dianxin-yc-218_92_241_1 /Other/dianxin/dianxin-yc-218_92_242_1 #这里我就以两个机房的例子,比如现在盐城有两个出口需要监控网络状况,分别为218.92.214.1和218.92.242.1两个出口IP,这时候呢我们想让rrd文件按照我们定义的目录和格式来,就这样定义一下,然后产生的rrd文件也是我们所定义的。这个之间用空格隔开啊。
+++ dianxin-yc-218_92_241_1
menu = 盐城电信241段 #显示的目录名称
title = 盐城电信-218.92.241.1 #页面首部显示的内容标题
alerts = someloss #这里跟上面定义的alerts就对上了哈。
host = 218.92.241.1 #这里才是真正定义IP地址的地方
+++ dianxin-yc-218_92_242_1
menu = 盐城电信242段
title = 盐城电信-218.92.242.1
alerts = someloss
host = 218.92.242.1
++ liantong
menu = 联通网络监控
title = 所有联通网络监控列表
host = /Other/liantong/liantong-zz-182_118_51_1 /Other/liantong/liantong-zz-182_118_52_1
+++ liantong-zz-182_118_51_1
menu = 郑州联通51段
title = 郑州联通-182.118.51.1
alerts = manyloss
host = 182.118.51.1
+++ liantong-zz-182_118_52_254
menu = 郑州联通52段
title = 郑州联通182.118.52.1
alerts = manyloss
host = 182.118.52.1
如果要关联多报警阀值,多报警阀值之间可用逗号隔开,如alerts = someloss,manyloss
其他的就以此来推就好了,然后都配置完毕之后,出错就看报错信息或者日志。下面是效果图
博文来自:www.51niux.com
#这是一个概述图:av表示ping的平均中值,ls表示平均丢包率,sd表示平均标准偏差在每一轮多个测量,am表示平均中值和平均标准差的比值
Median RTT 中间数:
它是中间数并不是平均值。Smokeping有多种类型的探针,探针在默认的设置下,每300秒向目标设备发送20测探测数据包。假如这20个数据包都返回的话,它就记录下了20个RTT,那么Median RTT就是第十个包的RTT;如果有5个包丢失的话,那么Median RTT就是第八个返回的包的RTT值。
#这是一个细节图:
第一列:ping中间数得平均、最大、最小、当前值
第二列:表示丢包率,平均、最大、最小、当前值
第三列表示:丢包数量,丢不同的包邮相同的颜色小时,绿色说明网络最好。
第四列:就是说60s之内发了20个ping包
注:有的时候安装完之后有数据但是,smokeping图片中文显示乱码也就是图片中文显示方框,如下图:
#解决办法:
这个问题就是图片想显示中文,但是系统本身没有中文字体支持导致了显示乱码。
/usr/share/fonts #可以yum下载中文字体,也可以从本地传一个中文字体到这个目录下面,这就OK了。
#如上图我就从本地上传了一个微软雅黑的字体上来,图片就显示中文OK了。
注意:
注一:smokeping邮件报警设置
smokeping默认是调用本地的postfix或者sendmail发送程序,当然这显然不符合我们的需求,我们需要调用外部的邮箱发送报警。那么要下面设置一下:
#wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.16.tar.gz #安装 Authen::SASL 模块(auth 需要用的)
#tar zxf Authen-SASL-2.16.tar.gz
#cd Authen-SASL-2.16
#perl Makefile.PL
#make && make install
#vim /usr/local/smokeping/lib/Smokeping.pm #需要修改三个地方
use Authen::SASL; #添加到开头加载模块认证的位置,大概添加到24行的位置
$smtp->auth(split(/\s*,\s*/, $cfg->{General}{mailusr}),split(/\s*,\s*/, $cfg->{General}{mailpwd})); #找到sub sendmail ($$$),在my $smtp = Net::SMTP->new([split /\s*,\s*/, $cfg->{General}{mailhost}],Timeout=>5) ){的下方,也就是在264行添加上面的一句话。
smokemail cgiurl mailhost mailusr mailpwd snpphost contact display_name #找到_vars =>所在的行,此行上方是DOC,此行下方是[ qw(owner imgcache,在2552行的mailhost后面添加mailusr mailpwd ,不然重启smokeping会报错,因为我们下面的config要添加两个参数,不加这两个参数的话,更改完config重启smokeping,会提示找不到此参数。
下面是更改后的pm文件和更改前的pm文件的diff截图:
#vim /usr/local/smokeping/etc/config #下面三句话就是smtp服务器,邮箱账户和邮箱密码。配置正确,重启smokeping就可以调用外部的邮箱服务器发送邮件了。
mailhost = smtp.51niuxcom
mailusr = smokeping@51niux.com
mailpwd = 51niuxpasswd
注二:smokeping报警次数
如果smokeping检测到了我们设置的丢包报警规则,如果问题不得到解决,默认是一分钟发送一次报警,如果我们认为这种频繁的报警对我们造成了干扰,不想发送报警如此频繁。就采用边界触发的形式来发送报警邮件。所谓边界触发就是只在状态发生改变的时候发出告警。这样断开的时候发一封邮件,恢复的时候再发一封邮件。
#vim /usr/local/smokeping/etcconfig
+someloss
type = loss
# in percent
pattern = >20%,*20*,>20%,*20*,>20%
edgetrigger = yes #edgetrigger = yes 加了这个参数,就让someloss这个阀值报警规则变成了只在触发此状态的时候发一封报警,然后状态恢复的时候再发送一封报警。
comment = loss 4 packages in 20 continuous 3 times.
注三:smokeping报警触发设置
第一点:报警设置的小误区
>20%,*20*,>20% #这里官网给出的说明是:>20%是单个包的丢包率是20%,然后*代表忽略,*20*中的20 代表包的数量,这句话的整体意思就是*20*将两个>20%隔开了,也就是说不是连续大于20%,而是>20%中间不管是恢复还是丢包小于20%就不管了,然后在20个包里面又出现了一次>20%,这就算达到我们要报警的条件了。
pattern = >20%,*20*,>20%,*20*,>20% #而这个呢,网上都是说20个包丢大于20%包出现三次就报警,但是实际使用过程中不是这么理解的,应该理解为第一个20个包出现了两次>20%,然后第二个20个包出现了两次>20%就触发报警。
显然你要像上面那样设置了,那么你将会经常受到报警邮件的频繁骚扰,因为机房间网络经常出现几个单包丢包率大于20%的现象,而又瞬间恢复,就达不到如果机房间网络出现故障了报警出来的目的。
pattern = >50%,>50%,>50%,>50%,*20*,>50%,>50%,>50%,>50% # in percent #感觉这样设置还是比较不错的方式,将单包丢包率调大一点,然后连续次数多一点,生产中既解决了频繁报警的困扰又能及时将网络故障报出来。
第二点:引用多报警阀值的问题
alerts = someloss,manyloss #多阀值模板的引用用逗号来隔开,可以设置轻度报警和严重报警或者其他类型的报警。
注四:报警标题的设置
smokeping默认的报警标题比较模糊,不好从手机邮箱的弹窗区分出是网络报警还是恢复报警,如何设置成像cacti那样报警标题比较醒目呢?
#vim /usr/local/smokeping/lib/Smokeping.pm #修改1859行的内容,改成类似于下面哪种形式,这样标题就会比较醒目了。
$what = ($prevmatch == 0 ? "ALERT:Loss Packages " : "NORMAL:Restored to Normal");
下面是邮件报警标题效果: