如今,定期的提供网络服务质量报告,让用户和开发者清楚的知道自己的网络质量的好坏至关重要,大家需要更为高效的网络质量拨测工具。
SmokePing是由RRDtool的作者TobiOetiker开发的一款监控网络状态和稳定性的开源软件。SmokePing会不断向目标发送各种类型的数据包,并对返回值进行测量和记录,通过RRDtool制图程序图形化地展示在各个时段内网络的延迟和丢包情况,帮助我们更清楚、更直观地了解监控机和监控目标之间短期和长期的网络状况。
本文以腾讯云轻量应用服务器香港地域为例,演示和教学网络质量拨测工具SmokePing的编译和个性化配置。腾讯云轻量应用服务器目前提供北京、广州、上海、南京、成都、中国香港、新加坡、东京、硅谷和莫斯科等10个地域的机器供用户购买。
一、准备工作
1.1服务器及其系统选择
SmokePing需要的资源不多,正常运行的话仅需MB左右的内存,因此低配高配轻量套餐均可搭建。
目前经过严密测试,SmokePing2.7.3及以上版本支持AmazonLinux2(AMI),CentOS7及以上、Debian9及以上、OracleLinux7及以上和Ubuntu18及以上的Linux发行版。因此系统选择时可以在CentOS,Debian和Ubuntu之间随意选择。
1.2安装依赖
CentOS用户请依次执行:
sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/config
setenforce0
yuminstallwgetcurlca-certificatesdmidecodeepel-release-y
update-ca-trustforce-enable
yuminstalltarzipunzipopensslopenssl-devellsofgitjqsocatcrontabsmakegccrrdtoolrrdtool-perlperl-corespawn-fcgitraceroutezlibzlib-develwqy-zenhei-fonts-y
Debian/Ubuntu用户请依次执行:
aptupdate
aptinstallwgetcurlgnupg2ca-certificatesdmidecodelsb-release-y
update-ca-certificates
aptinstalltarzipunzipopenssllibssl-devlsofgitjqsocatcronmakegccrrdtoollibrrds-perlspawn-fcgitraceroutezlib1gzlib1g-devfonts-droid-fallback-y
1.3获取TCPPing组件
新建文件/usr/bin/tcpping-sp并填入以下内容:
#!/bin/sh-e
#
#Copyright(c),TorbjrnLnnemark
#
#Permissiontouse,copy,modify,and/ordistributethissoftwareforany
#purposewithorwithoutfeeisherebygranted,providedthattheabove
#copyrightnoticeandthispermissionnoticeappearinallcopies.
#
#THESOFTWAREISPROVIDED"ASIS"ANDTHEAUTHORDISCLAIMSALLWARRANTIES
#WITHREGARDTOTHISSOFTWAREINCLUDINGALLIMPLIEDWARRANTIESOF
#MERCHANTABILITYANDFITNESS.INNOEVENTSHALLTHEAUTHORBELIABLEFOR
#ANYSPECIAL,DIRECT,INDIRECT,ORCONSEQUENTIALDAMAGESORANYDAMAGES
#WHATSOEVERRESULTINGFROMLOSSOFUSE,DATAORPROFITS,WHETHERINAN
#ACTIONOFCONTRACT,NEGLIGENCEOROTHERTORTIOUSACTION,ARISINGOUTOF
#ORINCONNECTIONWITHTHEUSEORPERFORMANCEOFTHISSOFTWARE.
if[$#!=5-a$#!=4]
then
echo"Wrongnumberofarguments"
exit
fi
output="$4:"foriin$(seq$3)do
portflag=""
if[$#=5]
then
portflag="-p$5"
fi
tr=$(traceroute-n-T-f-m-q1-w3$portflag$
tail-n1
seds///g)
if!echo"$tr"
grepms$/dev/null
then
output="$output-"
else
ms=$(echo"$tr"
cut-d""-f3)
output="$output$ms"
fi
done
echo$output
执行chmod+x/usr/bin/tcpping-sp赋予其执行权。
1.4获取SmokePing源码包
海外用户请执行wget
执行cdsmokeping-2.7.3进入SmokePing源代码目录,执行./configure--prefix=/usr/local/smokeping执行SmokePing编译检查和配置。
执行makeinstall进行编译。
三、配置FsatCGI前端程序
较为流行的教程均以Apache2作为SmokePing的默认FCGI程序,但目前Nginx较为流行。本文以Nginx作为SmokePing的FastCGI程序。
3.1安装Nginx
注意:如果你已经安装Nginx,则无需再次安装Nginx。本文以包安装的Nginx为例。
安装Nginx的教程多如牛毛,使用包安装方案、LNMP.org一键包方案和通过宝塔面板安装的Nginx均可。
3.2配置Nginx站点配置文件
3.2.1获取Nginx的fastcgi_params位置
执行find/-namefastcgi_params查找Nginx的fastcgi_params位置。一般情况下,包安装的Nginx的fastcgi_params位置为/etc/nginx/fastcgi_params,LNMP.org一键包方案安装的Nginx的fastcgi_params位置为/usr/local/nginx/conf/fastcgi_params宝塔面板安装的Nginx的fastcgi_params位置为/
使用包安装的Nginx的用户请在/etc/nginx/conf.d目录新建一个空白文件,文件名为域名.conf(请自定义域名)。
使用LNMP.org一键包方案安装的Nginx的用户请执行lnmpvhostadd以添加一个站点,暂时不要配置SSL。
使用宝塔面板安装的Nginx的用户请新建一个站点。
3.2.3修改Nginx站点配置文件
使用包安装的Nginx的用户请将如下内容粘贴到/etc/nginx/conf.d/域名.conf;使用LNMP.org一键包方案安装的Nginx的用户请使用如下内容将/usr/local/nginx/conf/vhost/域名.conf的原始内容覆盖掉;使用宝塔面板安装的Nginx的用户请使用如下内容将站点配置的原始内容覆盖掉。
server{
listen80;
listen[::]:80;
listen.0.0.1:;
server_name$domain;
indexindex.htmlindex.htmsmokeping.fcgi;
root/usr/local/smokeping/htdocs/;
#error_page/.html;
location~.*\.fcgi\${
fastcgi_pass.0.0.1:;
include$nginx_fastcgi/fastcgi_params;
}
access_log/dev/null;
error_log/dev/null;}
其中,请将domain替换为先前定义的域名,将nginx_fastcgi/fastcgi_params替换为先前获得的Nginx的fastcgi_params位置。
使用包安装的Nginx的用户和使用LNMP.org一键包方案安装的Nginx的用户请执行nginx-sreload;使用宝塔面板安装的Nginx的用户请在修改站点配置后单击“保存”按钮。
四、SmokePing守护和配置
4.1守护进程
新建文件/etc/systemd/system/smokeping.service,填入以下内容:
[Unit]
Description=SmokePingService
After=network-online.targetremote-fs.targetnss-lookup.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/bash/usr/local/smokeping/bin/slave.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
执行systemctlenablesmokeping使其开机启动。
4.2配置从服务器运行脚本
新建文件/usr/local/smokeping/bin/slave.sh,填入以下内容:
#/bin/bash
kill-9$(ps-ef
grepsmokeping_cgi
awk$0!~/grep/{print$2}
tr-s\n)
kill-9$(ps-ef
grepsmokeping/bin/smokeping
awk$0!~/grep/{print$2}
tr-s\n)
chown-R
将SLAVE_CODE替换为自定义的英文+数字组合。
4.3配置SmokePing主服务器
新建文件/usr/local/smokeping/etc/config,填入以下内容:
***General***
owner=X
contact=some
address.nowheremailhost=my.mail.host
imgcache=/usr/local/smokeping/htdocs/cache
imgurl=cache
datadir=/usr/local/smokeping/htdocs/data
piddir=/usr/local/smokeping/htdocs/var
cgiurl=
将第10行的some.url修改为第三部分使用的域名;将SLAVE_CODE替换为与步骤4.2相同的自定义的英文+数字组合;将SLAVE_NAME替换为自定义的名字,支持包括中文在内的任何UTF-8字符。
4.4配置通信密钥
新建文件/usr/local/smokeping/etc/smokeping_secrets.dist,填入以下内容:
$code:$sec
其中,code为步骤4.2相同的自定义的英文+数字组合;sec为自定义的英文+数字组合。
新建文件/usr/local/smokeping/etc/secrets,将上面的$sec填入。
4.5安全和收尾
依次执行以下命令:
chmod/usr/local/smokeping/etc/secrets/usr/local/smokeping/etc/smokeping_secrets.dist
chown
依次执行以下命令:
cd/usr/local/smokeping/htdocs
mkdir-pdatavarcache../cache
mvsmokeping.fcgi.distsmokeping.fcgi
执行systemctlstartsmokeping以启动SmokePing。
五、个性化配置SmokePing
SomkePing所监控的节点全部配置在/usr/local/smokeping/etc/config中;监控节点可以分目录层级,+为第一级目录,++为第二级目录,+++为第三级目录,以此类推。增加或修改节点时请保持slaves=相同。
六、结语
手动编译SmokePing太复杂了,在此推荐我自己写的项目KukiSa/smokeping-lnmp,一键脚本直接安装(适用于已经安装了Nginx的用户)以及jiuqi/smokeping(适用于未安装Nginx的用户)。
本文参考来源/iks