centos smokeping nginx 部署,监控网络状况

   自己搭建的时候,踩了不少坑,下面是一些网上搜集的资料.整合了一下...希望能帮上人.
不能上传附件,比较郁闷.   关于nginx-fcgi的方法去找官网,有一个脚本可以直接用的。

如果要做主从,nginx-fcgi 千万不要监听socket,一定要监听端口,不然100次主从也出不来。


epel源:


smokeping基于perl,所以涉及使用CPAN进行安装
perl: CPAN源
    国内:
                   http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
                   ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
                   
http://mirrors.geoexpat.com/cpan/
                    http://cpan.nctu.edu.tw/
                    
    国外:http://www.cpan.org/ 


perl安装模块命令:
perl-CPAN
perl -MCPAN -e 'install "IO::All"'

简介

smokeping是rrdtool的作者Tobi Oetiker的作品,采用多种方式对网络性能进行监控检测并告警,它支持较多的插件方式对网络的多项指标进行监控,并且支持Matser/Slave的架构,多个节点的监控数据可以在同一个图上展现。通过颜色和阴影表示网络延迟和丢包情况,图像很漂亮。适用于对多IDC机房网络的监控和网络性能的采集分析。

Smokeping安装部分

安装smokeping依赖的一部分perl模块还有一些其他检测组件

1
2
3
4
5
6
7
# yum install rrdtool fping echoping curl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-CGI-SpeedyCGI perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket -y
# mkdir /root/packages
# wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.8.tar.gz -P /root/packages
# cd /root/packages
# tar zxf smokeping-2.6.8.tar.gz
# cd smokeping-2.6.8
# ./configure --prefix=/usr/local/smokeping

抛出如下错误:
** Aborting Configure ******************************

If you know where perl can find the missing modules, set
the PERL5LIB environment variable accordingly.

FIRST though, make sure that ‘perl’ starts the perl
binary you want to use for SmokePing.

Now you can install local copies of the missing modules
by running

./setup/build-perl-modules.sh /usr/local/thirdparty

The RRDs perl module is part of RRDtool. Either use the rrdtool
package provided by your OS or install rrdtool from source.
If you install from source, the RRDs module is located
PREFIX/lib/perl

根据提示,运行./setup/build-perl-modules.sh /usr/local/thirdparty
可以查看./setup/build-perl-modules.sh脚本内容,发现其实就是在安装smokeping所依赖的一些perl模块

1
2
3
# C
# ./configure --prefix=/usr/local/smokeping
# /usr/bin/gmake install
Smokeping简单配置部分

创建主配置文件

1
2
# cp /usr/local/smokeping/etc/config.dist /usr/local/smokeping/etc/config
# vim /usr/local/smokeping/etc/config

*** :标示的区块属于不同类型的内容
+ :代表一级菜单 +下面的++是继承上面的+成为二级菜单。 而且可以有多个一级菜单和二级菜单。
第一部分General区块,属于基本配置
owner = daemon smokeping运行的用户
contact = admin@coocla.org smokeping管理员联系邮件地址
mailhost = localhost 邮件服务器地址
sendmail = /usr/sbin/sendmail 发送邮件件的二进制可执行程序
imgcache = /usr/local/smokeping/cache smokeping图片缓存
imgurl = cache 定义cgi程序显示图片的url目录
datadir = /usr/local/smokeping/data smokeping保存rrd文件的目录
piddir = /usr/local/smokeping/var 顾名思义,其pid目录
cgiurl = http://some.url/smokeping.cgi 完整的smokeping的url路径
smokemail = /usr/local/smokeping/etc/smokemail.dist 发送邮件的邮件内容模板
tmail = /usr/local/smokeping/etc/tmail.dist HTML邮件模板的路径
syslogfacility = local0 syslog日志记录的设备编号

第二部分Alter区块,属于报警配置
to = admin@coocla.org 报警邮件接收人地址
from = smokealert@company.xy 报警邮件发送人地址

+someloss 定义一个名为someloss的报警
type = loss 类型为丢包
pattern = >0%,*12*,>0%,*12*,>0% 对监控内容进行阀值的模式匹配
comment = loss 3 times in a row 检测12次,出现了3次丢包的情况,不论丢多少个包,就进行报警

第三部分Database区块,属于RRDTOOL数据库的配置
step = 300 步长,也就是多长时间为一个周期
pings = 20 ping的次数,这两项的组合意思是,每300秒进行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区块,属于网络状态,web显示的一些配置项
这块还没看,暂时先放这

第五部分Probes区块,属于Fping指针的配置
+ FPing
binary = /usr/sbin/fping

第六部分Slave区块,属于Matster,Slave架构的配置
暂时先将其注释起来,并连带上下文中所涉及的项注释下,否则待会启动时会报错

第七部分Targets区块,属于监控目标的配置
probe = FPing 指定监控指针

menu = Top 定义一个菜单,类型为Top,titile 注释等信息,均可自定义
title = Network Latency Grapher
remark = Welcome to the SmokePing website of xxx Company. \
Here you will learn all about the latency of our network.

+ Test
menu= Targets 定义一个一级菜单
#parents = owner:/Test/James location:/

++ James 定义一个主机为James
menu = James 菜单名为James
title =James
alerts = someloss 报警阀值为上文定义的someloss
#slaves = boomer slave2
host = blog.coocla.org 监控的主机blog.coocla.org

创建必要的目录

1
2
# mkdir /usr/local/smokeping/{var,cacahe,data}
# chown daemon.daemon -R /usr/local/smokeping

下载启动脚本,并启动smokeping

1
2
3
4
5
# wget http://oss.oetiker.ch/smokeping/pub/contrib/smokeping-start-script -P /etc/init.d/smokeping
# chmod +x /etc/init.d/smokeping
# /etc/init.d/smokeping start
 
注:请按照自己的安装环境修改脚本中的 smokeping命令的路径以及 pid的存放路径

1.观察cache目录下回立即生成两个文件rrdtool.png smokeping.png和刚才配置文件中以定义的那个监控主机的名字为名的目录被创建
2.data目录下也会生成一个和定义的主机名一致的目录,并且观察目录里面的rrd文件每5分钟是否正常更新一次

Nginx-cgi配置安装部分

由于nginx不能直接执行外部可执行程序,需要nginx支持CGI,也就是将CGI的处理请求反向代理到后端的处理器,对于CGI的请求处理可以使用nginx-fcgi,其项目地址是:https://aur.archlinux.org/packages/nginx-fcgi/?setlang=zh_CN
这里我们只需要该项目中的nginx-fcgi.txt,nginx-fcgi.txt是一个用Perl脚本写的wrapper实例,所以,操作系统必须要安装Perl程序以及相关模块,下载下来后,可以看到其中有以下部分内容
use FCGI;
use Getopt::Long;
use IO::All;
use Socket;

说明其依赖于 FCGI,Getopt::Long,IO::All,Socket 这些模块,安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# wget http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz
# wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.19.tar.gz
# wget http://search.cpan.org/CPAN/authors/id/J/JV/JV/Getopt-Long-2.42.tar.gz
IO - All 依赖于 IO - String
# wget http://search.cpan.org/CPAN/authors/id/F/FR/FREW/IO-All-0.48.tar.gz
# wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/IO-String-1.08.tar.gz
Socket 依赖于 ExtUtils :: Constant
# wget http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/Socket-2.012.tar.gz
# wget http://search.cpan.org/CPAN/authors/id/N/NW/NWCLARK/ExtUtils-Constant-0.23.tar.gz
 
# tar zxf FCGI-0.74.tar.gz
# cd FCGI-0.74
# perl Makefile.PL
# make && make install

按照这种方式进行安装以上几个包,根据个人环境,仔细解决依赖关系。全部正常安装完后。

将nginx-fcgi.txt重命名为nginx-fcgi并放置于/etc目录下,创建nginx-fcgi启动脚本fcgi

PS:因为http://www.nginx.eu已经无法打开,所以本文附上  nginx-fcgi.txt   可以在文末下载得到。

1
2
3
4
5
# mv nginx-fcgi.txt /etc/nginx-fcgi
# vim /etc/init.d/fcgi
# chmod +x /etc/init.d/fcgi
# chkconfig --add fcgi
# /etc/init.d/fcgi start
Nginx配置部分

根据Nginx官方文档内容http://wiki.nginx.org/SimpleCGI,创建cgi配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vim /usr/local/nginx/conf/
fastcgi_param  QUERY _STRING $ query_string ;
fastcgi_param  REQUEST _METHOD $ request_method ;
fastcgi_param  CONTENT _TYPE $ content_type ;
fastcgi_param  CONTENT _LENGTH $ content_length ;
fastcgi_param  GATEWAY_INTERFACE  CGI / 1.1 ;
fastcgi_param  SERVER_SOFTWARE  nginx ;
fastcgi_param  SCRIPT _NAME $ fastcgi_script_name ;
fastcgi_param  REQUEST _URI $ request_uri ;
fastcgi_param  DOCUMENT _URI $ document_uri ;
fastcgi_param  DOCUMENT _ROOT $ document_root ;
fastcgi_param  SERVER _PROTOCOL $ server_protocol ;
fastcgi_param  REMOTE _ADDR $ remote_addr ;
fastcgi_param  REMOTE _PORT $ remote_port ;
fastcgi_param  SERVER _ADDR $ server_addr ;
fastcgi_param  SERVER _PORT $ server_port ;
fastcgi_param  SERVER _NAME $ server_name ;

创建虚拟主机配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vim /usr/local/nginx/conf/vhosts/smokeping.conf
server
{
listen 8090 ;
server_name  smokeping . coocla . org ;
root / usr / local / smokeping / ;
access_log / data / logs / smokeping . access . log  main ;
error_log / data / logs / smokeping . error . log ;
 
location ~ . * \ . ( cgi | fcgi ) $ {
root / usr / local / smokeping / htdocs / ;
fastcgi_index  index . cgi ;
fastcgi_pass  unix : / tmp / nginx - fcgi . sock ;
include  fcgi_params ;
}
}
# /usr/local/nginx/sbin/nginx -s reload

 访问,http://IP/smokeping.fcgi 即可访问到如下信息

5.1图表参数说明

(1) RTT(Round-Trip Time):简单说它是一个数据报在网络上两点中间往返一次的时间。是影响TCP性能和表征网络运行状况的重要参数。在网络中实时、准确地测量大量TCP设备和系统的RTT参数是网络管的重要环节之一。Smokeping就是这样的自动测试系统,它向目标设备和系统发送各种类型的测试数据包,测量、记录和展示RTT。

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

(3) Avg RTT:它是每一个测试回合中所有RTT的算术评价值。

(4) Avg pkt loss:丢包率。

(5) Probe:100ICMP Echo Pings(56 Bytes)every 300s每一个绿色的短横线都是一个测试回合300秒内用ping测试100次。绿色画出的是中间数的位置,一个回合中的其它值都在它附近被以灰度的形式被刻画;





让smokeping支持中文

yum –y install fonts-chinese.noarch

or yum groupinstall -y "Chinese Support"

vim /opt/smokeping/etc/config

*** Presentation ***

charset = utf-8              //注:在这里添加

修改完成以后,再进行输入中文字符。

+ test

menu= 中文

title = 中文



Smokeping 发送告警邮件

Posted by  SEVEN on 2013年11月27日  Leave a Comment

smokeping 默认用sendmail发邮件,这样不好。

改了一下源码 这样可以使用 我QQ的smtp server来发告警邮件了

首先需要安装 Authen::SASL 模块(auth 需要用的) 我用CPAN装的,不细说了

修改 smokeping/lib/Smokeping.pm

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#头上加
 
use Authen::SASL;
 
#定位到sendmail函数,改成下面这样
 
sub sendmail ($$$){
     my $from shift ;
     my $to shift ;
     $to = $1  if $to =~ /<(.*?)>/;
     my $body shift ;
     if ( $cfg ->{General}{mailhost} and
         my $smtp = Net::SMTP->new([ split /\s*,\s*/,  $cfg ->{General}{mailhost}], Timeout =>5) ){
         $smtp ->auth( split (/\s*,\s*/,  $cfg ->{General}{mailusr}), split (/\s*,\s*/,  $cfg ->{General}{mailpwd}));
         $smtp ->mail( $from );
         $smtp ->to( split (/\s*,\s*/,  $to ));
         $smtp ->data();
         $smtp ->datasend( $body );
         $smtp ->dataend();
         $smtp ->quit;
     elsif ( $cfg ->{General}{sendmail} or -x  "/usr/lib/sendmail" ){
         open (M,  "|-" ) ||  exec (( $cfg ->{General}{sendmail} ||  "/usr/lib/sendmail" ), "-f" , $from , $to );
         print $body ;
         close M;
     else {
         warn "ERROR: not sending mail to $to, as all methodes failed\n" ;
     }
}
 
#找到  '_vars =>' ,把 mailusr mailpwd  加进去。不然不能启动哦!General configuration values valid for the whole SmokePing setup.
 
DOC
_vars =>
qw(owner imgcache imgurl datadir dyndir pagedir piddir sendmail offset
 
smokemail cgiurl mailhost mailusr mailpwd snpphost contact display_name
 
syslogfacility syslogpriority concurrentprobes changeprocessnames tmail
 
changecgiprogramname linkstyle precreateperms ) ],

然后修改配置文件
/etc/config

1
2
3
4
mailhost = smtp. qq.com
mailusr = noreply@qq. com<script cf-hash= "f9e31" type= "text/javascript" >
/* <![CDATA[ */!function(){ try {var t= "currentScript" in document?document.currentScript:function(){ for (var t=document.getElementsByTagName( "script" ),e=t. length ;e--;) if (t[e].getAttribute( "cf-hash" )) return t[e]}(); if (t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute( "data-cfemail" ); if (a){ for (e= "" ,r=parseInt(a. substr (0,2),16),n=2;a. length -n;n+=2)i=parseInt(a. substr (n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}} catch (u){}}();/* ]]> */</script>
mailpwd = xxxxxxxxx

由于perl默认使用UTF8  我们的邮件编码默认gb2312 需要更改下发送内容的编码
修改 smokeping/lib/Smokeping.pm
use Encode;
找到$default_mail 在DOC下加上
 my $default_mail = encode("gb2312",$default_mail);

Smokeping主从:

通常情况下,smokeping主机和被监控的主机之间都会存在网络延迟和丢包情况。因此现在比较热火的分布式,多节点监控架构似乎迫在眉睫,而smokeping完全支持master/slave多节点监控
优点:

smokeping的主从结构,默认是开启master和slave所有的检测指针去检测远程主机(当然这个选项也是有个参数可以控制,只让slave去检测远程主机)。一个master可以管理多个slave,而且slave配置起来也很简单
slave从master上获取自己的配置信息,所有的检测数据以及web呈现都在master上,slave只负责按照从master获取的配置信息进行数据检测,所以说master/slave的架构也只需要维护好master的配置文件即可,其他的信息slave都会动态获取到。
Smoking 检测分布式的检测方式是被动模式,由从节点启动时获得主节点的config 文件,然后进行数据检测收集,收集完毕后直接将数据提交给主节点。主从通信验证是通过类似于rsync的密码认证方式,在启动slave节点时指定–shared-secret=filename 来和主进行密码验证

架构:

slave通过master的web接口与master保持正常的通信,slave在初始化启动连接到master的时候,master会告诉slave的作业内容,当slave完成了一轮作业内容时便会将结果返回给master,如果分配给slave的任务发生了改变,master会告诉slave,其他slave已经交付的结果
其实一个slave就是一个单独的实例,slave的配置信息来自于master,不是来自于本地配置文件(这样就减少了大量的维护成本),slave在完成每一轮的作业任务后,就会尝试连接master提交自己的结果。如果无法连接到master,这个结果将会和下一轮的结果一块发送给master,master收到结果后,将检测的数据存储在一个以perl的可存储形式的文件中,以便于重启了smokeping实例后,不会丢失这些数据。

1
2
3
4
5
6
7
8
9
10
从官方获取的 master , slave的架构图的流向可以看出, slave均是从 master上获取配置信息,并将结构汇集给 master .
 
    [ slave 1 ]       [ slave 2 ]        [ slave 3 ]
         |               |                |
         + -- -- -- - +       |       + -- -- -- -- +
                 |       |       |
                 v       v       v
               + -- -- -- -- -- -- -- - +
               |      master       |
               + -- -- -- -- -- -- -- - +
Master配置部分

配置一个主从结构,需要在master的配置文件中添加slave的部分,所有slave需要被定义在master的slave区块中(了解配置文件中的几大区块,猛戳这里)并且每一个slave需要用户一个具有唯一名称的菜单名(层次名),对于slave所设置的章节名一定要和slave的名称保持一致。

1.在配置文件中启用slaves块的配置,并且定义你的slave节点,如下:

1
2
3
4
5
6
7
* * * Slaves * * *
secrets = / usr / local / smokeping / etc / smokeping_secrets . dist          # 定义通信用的秘钥文件,里面包含slave的名字以及对应密码
+ tuosi                  # slave的名字
display_name = tuosi      # slave的别名
location = changzhou      # 这个字段用来定义slave主机的位置,类似于description
color = 0000ff          # slave收集的数据在图像中显示的颜色,

2.将定义的slave节点分配给你需要监控的主机

1
2
3
4
5
6
7
8
9
10
11
12
* * * Targets * * *
 
++ changzhou          # 定义一个菜单,这个值将会作为data下的一个目录名被创建,属于这个菜单下所有数据都会被存放在这个目录下
menu = 拓思机房          # 定义web上显示的菜单名
title = 拓思机房      # 定义web上显示的头部名
 
++ + 29gui < - ( xxx . xxx . xxx . xxx . xxx )          # 定义一个主机,这个主机的数据将会被存放在 data/changzhou/29gui目录下
menu = 29< - ( xxx . xxx . xxx . xxx )              # web上显示的菜单名,可点击
title = 29< - ( xxx . xxx . xxx . xxx )              # 图表头部名称
alerts = someloss                          # 报警阀值
slaves = tuosi                              # slave节点
host = xxx . xxx . xxx . xxx                      # 被监控的主机IP或者域名

3.创建master和slave通信的秘钥文件
创建通信用的秘钥文件,内容为“slave的名字:密码”,这里需要注意秘钥文件的权限,由于smokeping的master/slave是通过smokeping程序进行验证的,所以这个秘钥文件的属主必须是smokeping进程的运行用户身份,并且权限为600.下面slave上的密码文件的权限也是一样,需要同样的权限归属,这点需要注意。

1
2
3
# echo "tuosi:helloworld" > /usr/local/smokeping/etc/smokeping_secrets.dist
# chown daemon:daemon /usr/local/smokeping/etc/smokeping_secrets.dist
# chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist
Slave配置部分

slave端实际上不需要太多的配置,只需要将smokeping正确安装即可,具体可参照 Smokeping的配置安装 一文,进行到gmake install 即可~
是不是so easy~
1.创建master与slave的密码文件

1
2
3
# echo "helloworld" > /usr/local/smokeping/etc/secrets
# chown daemon:daemon /usr/local/smokeping/etc/secrets
# chmod 600 /usr/local/smokeping/etc/secrets

2.启动slave

1
2
3
4
5
6
7
可以使用 / usr / local / smokeping / bin / smokeping -- help
观察到与 slave有关的几个参数如下:
-- master - url          # 当smokeping运行在slave模式下,使用该项指定master的访问url(web接口,用以通信)
-- slave - name          # 默认情况下,不指定改项时,slave连接到master后,master会以slave的hostname作为slavename,如果不希望这样做,就需要手动指定改选项
-- shared - secret          # 和master通信认证的密码文件
-- cache - dir              # 当smokeping运行在slave模式下,临时数据存放在master上的目录路径
-- pid - dir              # slave模式下,其pid存放的目录路径。可选参数,默认继承--cache-dir参数的值

启动slave

1
/usr/local/smokeping/bin/smokeping --master-url= http://smokeping.jidongnet.com/   --cache-dir=/usr/local/smokeping/cache/ --shared-secret=/usr/local/smokeping/etc/smokeping_secrets --slave-name=kaiying --logfile=/usr/local/smokeping/slave.log 

写成脚本,启动方便一点,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
#
# when: 2013/10/18
# who: http://blog.coocla.org
 
SMKEPING = / usr / local / smokeping / bin / smokeping
MASTERURL = http : //xxxx/smokeping.cgi
SLAVENAME = tuosi
CACHEDIR = / usr / local / smokeping / cache
SECRET = / usr / local / smokeping / etc / secrets
LOGFILE = / usr / local / smokeping / slave . log
 
if [ - f $ PIDFILE ] ; then
     PID = ` cat $ PIDFILE `
     if kill - 0 $ PID 2 > / dev / null ; then
         echo "smokeping is running with PID $PID"
         exit 0
     else
         echo "smokeping not running but PID file exists => delete PID file"
         rm - f $ PIDFILE
     fi
else
     echo "smokeping (no pid file) not running"
fi
 
if $ SMKEPING -- master - url = $ MASTERURL -- slave - name = $ SLAVENAME -- cache - dir = $ CACHEDIR -- shared - secret = $ SECRET -- logfile = $ LOGFILE > / dev / null ; then
     echo "smokeping started"
else
     echo "smokeping could not be started"
fi

很简单的一个脚本,没有做过多的判断,小伙伴们有兴趣可以去修改下~

线上配置样例

接下来,来一发重量级的,实战smokeping配置文件内容分享:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
* * * General * * *
 
owner      = daemon
contact    = czlinux @ 163.com
mailhost = localhost
sendmail = / usr / sbin / 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
imgurl     = cache
datadir    = / usr / local / smokeping / data
piddir    = / usr / local / smokeping / var
cgiurl     = http : //some.url.com/smokeping.cgi
smokemail = / usr / local / smokeping / etc / smokemail . dist
tmail = / usr / local / smokeping / etc / tmail . dist
# specify this to get syslog logging
syslogfacility = local0
# each probe is now run in its own process
# disable this to revert to the old behaviour
concurrentprobes = yes
 
* * * Alerts * * *
from = smokeping @ gamewave . net
to = czlinux @ 163.com
 
+ someloss
type = loss
# in percent
pattern = > 3 % , * 12 * , > 3 % , * 12 * , > 3 %
comment = detected  loss 3 times  over  the  last  two  hours
# 定义一个阀值,表示12次检测中。如果有3次大于3%的丢包
 
+ rttdetect5
type = rtt
# in milliseconds
pattern = < 5 , < 5 , < 5 , < 5 , < 5 , > 5 , > 5 , > 5 , > 5
comment = routing  messed  up  again ?
# 定义一个阀值,表示前五次检测延迟小于5ms,从第六次延迟大于5ms
+ rttdetect50
type = rtt
# in milliseconds
pattern = < 50 , < 50 , < 50 , < 50 , < 50 , > 50 , > 50 , > 50 , > 50
comment = routing  messed  up  again ?
# 定义一个阀值,表示前五次延迟小于50ms,从第六次延迟大于50ms
 
+ rttdetect60
type = rtt
# in milliseconds
pattern = < 60 , < 60 , < 60 , < 60 , < 60 , > 60 , > 60 , > 60 , > 60
comment = routing  messed  up  again ?
# 定义一个阀值,表示前五次延迟小玉60ms,从第六次延迟大于60ms
 
+ rttdetect80
type = rtt
# in milliseconds
pattern = < 80 , < 80 , < 80 , < 80 , < 80 , > 80 , > 80 , > 80 , > 80
comment = routing  messed  up  again ?
# 定义一个阀值,表示前五次延迟小玉80ms,从第六次延迟大于80ms
# 小伙伴们可以根据自己的业务重要程度集合网络状况,定义不通的丢包延迟阀值
 
* * * Database * * *
 
step       = 300
pings      = 60
 
# 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 = / data / 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 = 100
range = 12h
 
+ detail
 
width = 600
height = 200
#loss_background = yes
unison_tolerance = 2
 
 
"最后1天"         1d
"最后1周"         7d
"最后1个月"       30d
 
++ loss_colors              # 定义图像中不同丢包率的表示颜色
0      00ff00      "0"
1      00b8ff      "1/100"
2      0059ff      "2/100"
3      5e00ff      "3/100"
4      7e00ef      "4/100"
5      ffff00      "5/100"
10     ff00ff      "10/100"
50     ff0000      "50/100"
#99   ff0000    "99/100"
 
 
* * * Probes * * *
 
+ FPing
binary = / usr / sbin / fping
 
* * * Slaves * * *
secrets = / data / smokeping / etc / smokeping_secrets . dist
 
+ beijing
display_name = beijing
color = ff0000
 
+ zqdx
display_name = zqdx
color = ff0000
 
+ nbdx
display_name = nbdx
color = ff0000
 
# 定义三个slave节点
* * * Targets * * *
 
probe = FPing
menu = Top
title = blog . coocla . org
remark = 欢迎使用 smokeping监控
 
#####################################################################
 
+ tuosikeji
 
menu    = 拓思科技
title = 拓思科技
nomasterpoll = yes
 
#--------------------------------------
++ tuosiqinye
menu    = 拓思 -常州勤业机房
title = 拓思 -常州勤业机房
 
++ + qinye11 - beijing
menu    = 北京 -> 11( xx . xxx . xxx . xxx )
title = 北京 -> 11( xxx . xxx . xxx . xxx )
alerts = rttdetect80 , someloss
slaves = beijing
host    = xxx . xxx . xxx . xxx
 
++ ++ qinye11 - other
menu    = 11( xxx . xxx . xxx . xxx )
title = 11( xxx . xxx . xxx . xxx )
alerts =
slaves = nbdx  zqdx  czdx
host    = xxx . xxx . xxx . xxx
 
++ + qinye16 - beijing
menu    = 北京 -> 16( xxx . xxx . xxx . xxx )
title = 北京 -> 16( xxx . xxx . xxx . xxx )
alerts = someloss , rttdetect80
slaves = beijing
host    = xxx . xxx . xxx . xxx
 
#-------------------------------------
++ tuosidianxin
menu    = 拓思 -常州电信机房
title = 拓思 -常州电信机房
 
++ + dianxinD03 - beijing
menu    = 北京 -> D03 - 04( xxx . xxx . xxx . xxx )
title = 北京 -> D03 - 04( xxx . xxx . xxx . xxx )
alerts = someloss , rttdetect80
slaves = beijing
host    = xxx . xxx . xxx . xxx
 
++ ++ dianxinD03 - other
menu    = D03 - 04( xxx . xxx . xxx . xxx )
title = D03 - 04( xxx . xxx . xxx . xxx )
alerts =
slaves = nbdx  zqdx  czdx
host    = xxx . xxx . xxx . xxx
 
++ + dianxinD05 - beijing
menu    = 北京 -> D05( xxx . xxx . xxx . xxx )
title = 北京 -> D05( xxx . xxx . xxx . xxx )
alerts = someloss , rttdetect80
slaves = beijing
host    = xxx . xxx . xxx . xxx
个人总结:

1.定义好smokeping和web服务器的运行用户,因为会涉及一些权限;
2.smokeping的运行用户调用rrdtools进行数据收集绘图,所以存放rrd数据文件,以及图像文件的目录smokeping的运行用户一定要拥有写权限;
3.web前端对于该况图和监控图的展示,是通过web服务器的运行用户通过smokeping.cgi对所绘制的图像进行展示,所以web服务器的运行用户一定也要对图像目录拥有读写选项;
4.对于web页面的中文显示,无外乎与设置web的字符集以及所在的操作系统要支持对应的字符集;
5.对于其他的rrd文件不更新,web页面没有图像,或者web页面有图像但没有数据,这些一般都是因为以上权限设置不正确或者rrdtool安装不正确导致的;
6.对于master/slave的架构,首先也明白其认证的原理,一定要将slave-name和master配置文件中配置的slave节点名以及密钥文件中的节点名相对应;
7.对于master的密钥文件(包含slave节点名和密码),slave的密码文件(只有密码),要这样去思考,这样两个文件的内容都是smokeping通过smokeping的api进行交互通信的,那么交互通信的用户肯定是smokeping的运行用户,因此这两个文件的属主一定要属于smokeping的运行用户,其次要想到rsync的配置,其文件的属性权限一定要是600权限;
8.对于smokeping的配置文件,由于是用perl写的,大家刚乍一看都觉得乱糟糟的,觉得这玩意很麻烦,其实,去理解了配置文件中各个区块的含义之后,对于整个配置就会一目了然~

小伙伴们赶紧动手,检查下你们的网络状况吧~


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}' \
οnclick="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 = joe@somehost

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值