https://blog.newtouch.com/setup-config-smokeping/

安装需要注意的是selinux需要关闭

安装遇到问题显示没有权限访问smokeping,但是访问apache是正常的

解决办法:修改smokeping文件隶属于apache,且权限修改为755

smokeping_系统/运维然后重启smokeping和apache服务

如进不去xxx.xxx.xxx.xxx的 apache界面,需要把iptables关掉,使用命令iptables -F临时关闭

简介

SmokePing 是 RRDtool 的作者 TobiOetiker 的作品,主要是监视网络性能,特点是画的图非常亮,网络丢包和延迟用颜色和阴影来表示。
这里值得注意的是,smokeping取值取的是中位数,而阴影部分则是其他取值的绘图,可以持续跟踪你的网络延迟,主要功能如下:

· 最佳的延迟可视化图表。

· 交互式图形浏览。

· 多种延迟测量插件。

· 主/从系统用于分布式测量。

· 可灵活配置的警报系统。

· 实时延迟图表与一些有趣的图表。

技术特点

SmokePing 是用Perl 写的,采用 fping 用于ping测试,用 echoping 监视 www 服务器性能,监视 dns 查询性能,监视 ssh 性能等,底层也是 RRDtool 做支持。

基础安装

网上的安装配置说明杂乱,坑很多,从无数个坑中爬起后,果断编写此文,需要说明的是以下安装配置说明都是基于centos7.2操作系统。

包更新和时间同步

如果环境中已配置了统一的时间同步服务,可跳过此设置。

yum -y install ntpdate

ntpdate times.aliyun.com

安装依赖包

yum groupinstall "Compatibility libraries" "Base" "Development tools" -y

yum -y install cpan perl perl-FCGI perl-CGI perl-Digest-HMAC perl-Net-Telnet perl-Net-OpenSSH perl-Net-SNMPperl-LDAP perl-Net-DNS perl-IO-Pty-Easy perl-Test-Simple perl-Sys-Syslog perl-libwww-perlperl-IO-Socket-SSL perl-Socket6 perl-CGI-SpeedyCGI perl-FCGI perl-Time-HiResperl-ExtUtils-MakeMaker rrdtool rrdtool-perl curl fping httpd httpd-devel gccmake wget libxml2-devel libpng-devel glib pango pango-devel freetypefreetype-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel mod_fcgidscreen

Copy

安装fping

安装fping,源代码可以从官方站点下载,下载地址https://fping.org/dist/fping-3.16.tar.gz

tar -zxvf fping-3.16.tar.gz -C /usr/local/src

cd /usr/local/src/fping-3.16

./configure

make && make install

Copy

安装Echoping

网上下载https://fossies.org/linux/misc/old/echoping-6.0.2.tar.gz

tar -zxvf echoping-6.0.2.tar.gz -C /usr/local/

cd /usr/local/echoping-6.0.2

yum install -y popt-devel openssl openssl-devel

./configure --prefix=/usr/local/echoping --with-ssl --without-libidn

make && make install

Copy

安装SmokePing

下载SmokePing源代码 http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.11.tar.gz

tar -zxvf smokeping-2.6.11.tar.gz -C /usr/local/src

cd /usr/local/src/smokeping-2.6.11

export PERL5LIB=/usr/local/smokeping/thirdparty/lib/perl5/

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

./configure --prefix=/usr/local/smokeping

gmake install

Copy

如果./configure过程中提示找不到某些perl扩展,如下所示

checking checking for perl module'Config::Grammar'... Can't locate Config/Grammar.pm in @INC

(@INC contains:/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 -e line 1.

BEGIN failed--compilation aborted at -e line 1.

Copy

请使用以下命令安装对应模块:

perl -MCPAN -e 'install Config::Grammar'

perl -MCPAN -e 'install "LWP::Simple"'

perl -MCPAN -e 'install "Net::SNMP"'

perl -MCPAN -e 'install "Net::LDAP"'

perl -MCPAN -e 'install IO::Pty'

Copy

注意:有时候需要重复安装几次才能装上模块。
注意要选择国内的的模块源,不然速度很慢。

创建相关目录和日志文件

cd /usr/local/smokeping

mkdir cache data var

touch /var/log/smokeping.log

chown apache:apache cache/ data/ var/ /var/log

Copy

因为这里的web服务使用的是httpd,所以相关文件的属主属组均为apache:
/usr/local/smokeping/cache/ 存放缓存文件;
/usr/local/smokeping/data/ 存放SmokePing的RRD数据文件;
/usr/local/smokeping/var/log/ 存放SmokePing的日志文件;
由于SmokePing通过Web的fcgi程序运行,所以建议如果需要查看运行错误日志,大都直接记录在httpd服务的日志中,使用以下命令查看:

tail /var/log/httpd/error_log

Copy

参数基本配置

创建相关配置文件

cp /usr/local/smokeping/htdocs/smokeping.fcgi.dist /usr/local/smokeping/htdocs/smokeping.fcgi

cp /usr/local/smokeping/etc/config.dist /usr/local/smokeping/etc/config

Copy

修改配置文件

sed -i 's#cgiurl   = http://some.url/smokeping.cgi#cgiurl   = http://可访问本机的IP/smokeping#g' /usr/local/smokeping/etc/config

sed -i 's#step    = 300#step     = 60#g' /usr/local/smokeping/etc/config

Copy

此设置的含义为每60秒ping20次。

安装字体并支持中文

yum -y install wqy-zenhei-fonts

vim /usr/local/smokeping/lib/Smokeping/Graphs.pm

Copy

修改文件中,增加一行字体配置部分('--font', "TITLE:20:WenQuanYi Zen Hei Mono",):

...

if ($mode =~ /[anc]/){

my $val = 0;

for my $host (@hosts){

my ($graphret,$xs,$ys) = RRDs::graph

            ("dummy",

'--start', $tasks[0][1],

'--end', $tasks[0][2],

'--font', "TITLE:20:WenQuanYi Zen Hei Mono",

"DEF:maxping=$cfg->{General}{datadir}${host}.rrd:median:AVERAGE",

'PRINT:maxping:MAX:%le' );

my $ERROR = RRDs::error();

            return "RRDtool did not understand your input: $ERROR." if $ERROR;

            $val = $graphret->[0] if $val < $graphret->[0];

        }

        $val = 1e-6 if $val =~ /nan/i;

        $max = { $tasks[0][1] => $val * 1.5 };

    }

...

Copy

修改字符集,增加一行(charset= utf-8)

vim /usr/local/smokeping/etc/config

Copy

...

***Presentation ***

charset= utf-8

template = /usr/local/smokeping/etc/basepage.html.dist

...

Copy

增加登录验证

htpasswd -c /usr/local/smokeping/htdocs/htpasswd smokeping

chmod 600 /usr/local/smokeping/etc/smokeping_secrets.dist

Copy

增加SmokePing的web界面

vim /etc/httpd/conf/httpd.conf

Copy

增加下面的web站点配置:

...

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>

...

Copy

添加监控对象

vim /usr/local/smokeping/etc/config

Copy

增加入web页面的菜单

*** Targets ***

...

++ Localhost

menu = Localhost

title = Localhost

alerts = someloss

#slaves = boomer slave2

host = 本机外网地址

Copy

添加监控节点

vim /usr/local/smokeping/etc/config

Copy

监控节点样例如下,将x.x.x.x替换为实际的IP地址,注意+是第一层,++是第二层,+++ 是第三层:
smokeping会根据配置文件中配置监控节点的内容,在/usr/local/smokeping/data目录下生成对应的moniter文件夹,其下包含website子文件夹。

+ IDC

menu = IDC网络监控

title = 通往各IDC网络监控

++ IDC-zp

menu = 周浦机房

title = 周浦机房网络监控列表

host = /IDC/IDC-zp/IDC-zp-1-dianxin /IDC/IDC-zp/IDC-zp-2-BGP

+++ IDC-zp-1-dianxin

menu = 上海一区电信联通网络

title = 上海一区电信联通网络

alerts = someloss

host = x.x.x.x

+++ IDC-zp-2-BGP

menu = 华东一区网络

title = 华东一区网络

alerts = someloss

host = x.x.x.x

++ IDC-fx

menu = 斐讯机房

title = 斐讯机房网络监控列表

host = /IDC/IDC-fx/IDC-fx-1-dianxin /IDC/IDC-fx/IDC-fx-1-liantong /IDC/IDC-fx/IDC-fx-2-dianxin /IDC/IDC-fx/IDC-fx-2-liantong /IDC/IDC-fx/IDC-fx-3-liantong

+++ IDC-fx-1-dianxin

menu = 华东二区电信网络

title = 华东二区电信网络

alerts = someloss

host = x.x.x.x

+++ IDC-fx-1-liantong

menu = 华东二区联通网络

title = 华东二区联通网络

alerts = someloss

host = x.x.x.x

+++ IDC-fx-2-dianxin

menu = 华东三区电信网络

title = 华东三区电信网络

alerts = someloss

host = x.x.x.x

+++ IDC-fx-2-liantong

menu = 华东三区联通网络

title = 华东三区联通网络

alerts = someloss

host = x.x.x.x

+++ IDC-fx-3-liantong

menu = 华东四区联通网络

title = 华东四区联通网络

alerts = someloss

host = x.x.x.x

++ IDC-cq

menu = 重庆机房

title = 重庆机房网络监控列表

host = /IDC/IDC-cq/IDC-cq-1-dianxin

+++ IDC-cq-1-dianxin

menu = 西南二区电信网络

title = 西南二区电信网络

alerts = someloss

host = x.x.x.x

++ IDC-gy

menu = 贵阳机房

title = 贵阳机房网络监控列表

host = /IDC/IDC-gy/IDC-gy-1-liantong

+++ IDC-gy-1-liantong

menu = 西南一区联通网络

title = 西南一区联通网络

alerts = someloss

host = x.x.x.x

+ Other

menu = 三大网络监控

title = 监控统计

++ dianxin

menu = 电信网络监控

title = 电信网络监控列表

host = /Other/dianxin/dianxin-bj

+++ dianxin-bj

menu = 北京电信(202.96.199.133)

title = 北京电信(202.96.199.133)

alerts = someloss

host = 202.96.199.133

Copy

注意:每次修改配置文件后需要重启smokeping进程

/usr/local/smokeping/bin/smokeping --restart

Copy

ERROR: /usr/local/smokeping/bin/../etc/config, line 110: ERROR: FPing 'binary' does not point to an executable

vim /usr/local/smokeping/etc/config

#第110更改fping的目录为

binary = /usr/local/sbin/fping

/usr/local/smokeping/bin/smokeping --reload

Copy

pkill smokeping

/usr/local/smokeping/bin/smokeping

Copy

smokeping会根据配置文件中配置监控节点的内容,在/usr/local/smokeping/data目录下生成对应的monitor文件夹,其下包含website子文件夹。

yum -y install tree

/usr/local/smokeping/data/

IDC

 IDC-cq

  IDC-cq-1-dianxin.rrd

  IDC-cq-1.rrd

 IDC-fx

  IDC-fx-1-dianxin.rrd

  IDC-fx-1-liantong.rrd

  IDC-fx-2-dianxin.rrd

  IDC-fx-2-liantong.rrd

  IDC-fx-3-liantong.rrd

 IDC-gy

  IDC-gy-1-liantong.rrd

 IDC-zp

     IDC-zp-1-dianxin.rrd

     IDC-zp-2-BGP.rrd

Other

 dianxin

     dianxin-bj.rrd

__sortercache

 data.FPing.storable

Test

    James.rrd

    Localhost.rrd

Copy

修改邮件报警相关配置

vim /usr/local/smokeping/etc/config

Copy

修改邮件告警地址

*** Alerts ***

to = 接收告警邮件的Email地址

from = 发送告警邮件的Email地址

Copy

启动服务并验证

systemctl start httpd

/usr/local/smokeping/bin/smokeping

Copy

Master/Slave分布式模式配置

在使用smokeping过程中,很容易发现,如果从单个节点去探测网络性能,并不能充分检测到整个网络的一个状态。smokeping提供了基于多节点的分布式模式,可以从多个节点去探测到网络的状态,这样我们才能全面客观的监控真个网络。
smokeping的分布式为主从模式,M/S模式配置起来很简单,slave的配置基本与master的配置相同,只是slave不需要config文件,而是在启动过程中请求master上面的config文件,这样只需要维护master上面的config文件即可。
smokeping分布式的检测方式为被动方式,由slave节点在启动时从master上获取config文件,然后进行探测,探测后的数据在通过cgi提交给master。slave可为多个,M/S直接通信认证是通过--shared-secret=filename来和master进行密码认证。

    slave 1        slave 2        slave 3

        |             |              |

        +-------+     |     +--------+

                |     |     |

                v     v     v

              +---------------+

              |    master     |

              +---------------+

Copy

安装Slave服务器的SmokePing环境

安装方式完全等同于上面的基础安装

Master/Slave通讯认证配置

smokeping主从验证通过Master和Slave的/usr/local/smokeping/etc/smokeping_secrets文件进行的,但是Master和Slave的验证文件书写方式是有所不同。

Master服务器验证文件

cp /usr/local/smokeping/etc/smokeping_secrets.dist /usr/local/smokeping/etc/smokeping_secrets

chown apache:apache /usr/local/smokeping/etc/smokeping_secrets

Copy

注意:/usr/local/smokeping/etc/smokeping_secrets 文件属性必须是600,而且所属用户和用户组必须和httpd的用户和用户组一致

vim /usr/local/smokeping/etc/smokeping_secrets

Copy

SlaveName:Password

Copy

Slave服务器验证文件

cp /usr/local/smokeping/etc/smokeping_secrets.dist /usr/local/smokeping/etc/smokeping_secrets

vim /usr/local/smokeping/etc/smokeping_secrets

Copy

下面是正文格式,需要与master服务器上的/usr/local/smokeping/etc/smokeping_secrets文件中,以SlaveName:后面的密码一致

Password

Copy

注意:/usr/local/smokeping/etc/smokeping_secrets 文件属性必须是600

Master服务器分布式模式配置

修改Master上面的config文件

vim /usr/local/smokeping/etc/config

Copy

如果有多个SlaveName,可以依次增加

*** Slaves ***   

#master验证密码文件

secrets=/usr/local/smokeping/etc/smokeping_secrets

#要和smokeping_secrets保持一致,slave启动时的--slave-name后面跟着的也是这个名字

+ SlaveName

display_name=图表中显示的服务器名称

#页面图表中显示的颜色

color=0000ff

Copy

启动并验证分布式环境

注意:首先启动master服务器的SmokePing服务,再启动Slave服务器的SmokePing服务

/usr/local/smokeping/bin/smokeping --master-url=http://master的httpd的验证用户名:httpd的验证用户密码@master的外网IP/smokeping --cache-dir=/usr/local/smokeping/cache/ --shared-secret=/usr/local/smokeping/etc/smokeping_secrets --slave-name=SlaveName --logfile=/var/log/smokeping_slave.log

Copy