柴少的官方网站 技术在学习中进步,水平在分享中升华

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

blob.png

#输入我们的用户名和密码之后跳转到下面的界面。然后我随便点了一个页面是有数据的,表示搭建成功。

如果页面还提示:

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

blob.png

至此一个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

blob.png

blob.png

#这是一个概述图:av表示ping的平均中值,ls表示平均丢包率,sd表示平均标准偏差在每一轮多个测量,am表示平均中值和平均标准差的比值

Median RTT 中间数:

它是中间数并不是平均值。Smokeping有多种类型的探针,探针在默认的设置下,每300秒向目标设备发送20测探测数据包。假如这20个数据包都返回的话,它就记录下了20个RTT,那么Median RTT就是第十个包的RTT;如果有5个包丢失的话,那么Median RTT就是第八个返回的包的RTT值。

blob.png

#这是一个细节图:

第一列:ping中间数得平均、最大、最小、当前值

第二列:表示丢包率,平均、最大、最小、当前值

第三列表示:丢包数量,丢不同的包邮相同的颜色小时,绿色说明网络最好。

第四列:就是说60s之内发了20个ping包


注:有的时候安装完之后有数据但是,smokeping图片中文显示乱码也就是图片中文显示方框,如下图:

图片.png

#解决办法:

这个问题就是图片想显示中文,但是系统本身没有中文字体支持导致了显示乱码。

/usr/share/fonts  #可以yum下载中文字体,也可以从本地传一个中文字体到这个目录下面,这就OK了。

图片.png

#如上图我就从本地上传了一个微软雅黑的字体上来,图片就显示中文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截图:

图片.png


#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");

图片.png

下面是邮件报警标题效果:

图片.png

作者:忙碌的柴少 分类:监控系统 浏览:10219 评论:5
留言列表
immaple
immaple 你这篇文档非常有用,赞  回复
忙碌的柴少
忙碌的柴少 有用就好哈  回复
少侠
少侠 您好,我看您在监控系统这一部分的开源项目了解挺多,比如:cacti,nagios,ganglia,zabbix,open-falcon等。想问问您有比较过这几款开源项目的优劣势,或者功能上的对比吗?还有就是如果既想监控服务器,又想监控该服务器上的kvm虚拟机,这几款开源项目里,有没有不代理的方式就能去监控到虚拟机的?就是只要在服务器里装监控代理,它能够自动获取到该服务器上虚拟机,进而去监控到虚拟机,就算虚拟机断网了也能监控到呢?  回复
访客
访客 大哥你说的这种方式,貌似阿里从pci里面取值不过技术难度比较大,如果只是单纯的取CPU、内存这些值你就把虚拟机当成进程得了,我KVM那里也有些在宿主机上面执行命令来查看虚拟机的性能,还有装个agent很合理啊,有啥特殊需求吗?  回复
访客
访客 仁者见仁 智者见智  回复
发表评论
来宾的头像