本文原载于 https://www.idc.moe/archives/qcloud-Lighthouse-SmokePing.html
作者:iks
  SmokePing 是由 RRDtool 的作者 Tobi Oetiker 开发的一款监控网络状态和稳定性的开源软件。SmokePing 会不断向目标发送各种类型的数据包,并对返回值进行测量和记录,通过 RRDtool 制图程序图形化地展示在各个时段内网络的延迟和丢包情况,帮助我们更清楚、更直观地了解监控机和监控目标之间短期和长期的网络状况。
  腾讯云轻量应用服务器目前提供北京、广州、上海、南京、成都、中国香港、新加坡、东京、硅谷和莫斯科等10个地域的机器供用户购买。由于众所周知的原因,我国大陆地区的国际互联网出入口总带宽较小,在日常特别是晚高峰期间较为拥堵,因此在服务器上安装网络质量拨测工具用于监控和记录不同时段的服务器至国内方向测速节点和国际方向的终结点的延迟和丢包率,获取具有连续性的十分直观的数据以便我们进行分析非常有帮助。
  本文以腾讯云轻量应用服务器香港地域为例,演示和教学网络质量拨测工具 SmokePing 的编译和个性化配置。

一、准备工作

1.1 服务器及其系统选择

SmokePing 需要的资源不多,正常运行的话仅需 128 MB 左右的内存,因此低配高配轻量套餐均可搭建。

目前经过严密测试,SmokePing 2.7.3 及以上版本支持 Amazon Linux 2 (AMI), CentOS 7 及以上、Debian 9 及以上、Oracle Linux 7 及以上和 Ubuntu 18 及以上的 Linux 发行版。因此系统选择时可以在 CentOS, Debian 和 Ubuntu 之间随意选择。

1.2 安装依赖

CentOS 用户请依次执行:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
yum install wget curl ca-certificates dmidecode epel-release -y
update-ca-trust force-enable
yum install tar zip unzip openssl openssl-devel lsof git jq socat crontabs make gcc rrdtool rrdtool-perl perl-core spawn-fcgi traceroute zlib zlib-devel wqy-zenhei-fonts -y

Debian/Ubuntu 用户请依次执行:

apt update
apt install wget curl gnupg2 ca-certificates dmidecode lsb-release -y
update-ca-certificates
apt install tar zip unzip openssl libssl-dev lsof git jq socat cron make gcc rrdtool librrds-perl spawn-fcgi traceroute zlib1g zlib1g-dev fonts-droid-fallback -y

1.3 获取 TCP Ping 组件

新建文件 /usr/bin/tcpping-sp 并填入以下内容:

#!/bin/sh -e
#
# Copyright (c) 2016, Torbjörn Lönnemark <tobbez@ryara.net>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.if [ $# != 5 -a $# != 4 ]
thenecho "Wrong number of arguments"exit
fioutput="$4 :"
for i in $(seq $3)
doportflag=""if [ $# = 5 ]thenportflag="-p $5"fitr=$(traceroute -n -T -f 255 -m 255 -q 1 -w 3 $portflag $4 2>&1| tail -n1 | sed 's/  / /g')if ! echo "$tr" | grep 'ms$' > /dev/nullthenoutput="$output -"elsems=$(echo "$tr" | cut -d" " -f3)output="$output $ms"fi
done
echo $output

执行 chmod +x /usr/bin/tcpping-sp 赋予其执行权。

1.4 获取 SmokePing 源码包

海外用户请执行 wget https://github.com/oetiker/SmokePing/releases/download/2.7.3/smokeping-2.7.3.tar.gz,国内用户请执行 wget https://oss.oetiker.ch/smokeping/pub/smokeping-2.7.3.tar.gz,并执行 tar xzvf smokeping-2.7.3.tar.gz 以解压。

二、开始编译

执行 cd smokeping-2.7.3 进入 SmokePing 源代码目录,执行 ./configure --prefix=/usr/local/smokeping 执行 SmokePing 编译检查和配置。

执行 make install 进行编译。

三、配置 FsatCGI 前端程序

较为流行的教程均以 Apache 2 作为 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 / -name fastcgi_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 位置为 /www/server/nginx/conf/fastcgi_params

3.2.2 初创建 Nginx 站点配置文件

使用包安装的 Nginx 的用户请在 /etc/nginx/conf.d 目录新建一个空白文件,文件名为 域名.conf (请自定义 域名)。

使用 LNMP.org 一键包方案安装的 Nginx 的用户请执行 lnmp vhost add 以添加一个站点,暂时不要配置 SSL。

使用宝塔面板安装的 Nginx 的用户请新建一个站点。

3.2.3 修改 Nginx 站点配置文件

使用包安装的 Nginx 的用户请将如下内容粘贴到 /etc/nginx/conf.d/域名.conf;使用 LNMP.org 一键包方案安装的 Nginx 的用户请使用如下内容将 /usr/local/nginx/conf/vhost/域名.conf 的原始内容覆盖掉;使用宝塔面板安装的 Nginx 的用户请使用如下内容将站点配置的原始内容覆盖掉。

server {listen 80;listen [::]:80;listen 127.0.0.1:9006;server_name $domain;index index.html index.htm smokeping.fcgi;root /usr/local/smokeping/htdocs/;#error_page 404/404.html;location ~ .*\.fcgi\$ {fastcgi_pass 127.0.0.1:9007;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 -s reload;使用宝塔面板安装的 Nginx 的用户请在修改站点配置后单击“保存”按钮。

四、SmokePing 守护和配置

4.1 守护进程

新建文件 /etc/systemd/system/smokeping.service,填入以下内容:

[Unit]
Description=SmokePing Service
After=network-online.target remote-fs.target nss-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

执行 systemctl enable smokeping 使其开机启动。

4.2 配置从服务器运行脚本

新建文件 /usr/local/smokeping/bin/slave.sh,填入以下内容:

#/bin/bashkill -9 $(ps -ef|grep smokeping_cgi|awk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')
kill -9 $(ps -ef|grep 'smokeping/bin/smokeping'|awk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')chown -R www:www /usr/local/smokeping/htdocs
/usr/local/smokeping/bin/smokeping --config=/usr/local/smokeping/etc/config &
/usr/local/smokeping/bin/smokeping --master-url=http://127.0.0.1:9006/smokeping.fcgi --cache-dir=/usr/local/smokeping/cache/ --shared-secret=/usr/local/smokeping/etc/secrets --slave-name=SLAVE_CODE &
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9007 -P /var/run/smokeping-fastcgi.pid -u www -f /usr/local/smokeping/htdocs/smokeping.fcgi

SLAVE_CODE 替换为自定义的英文+数字组合。

4.3 配置 SmokePing 主服务器

新建文件 /usr/local/smokeping/etc/config,填入以下内容:

*** General ***owner    = X
contact  = some@address.nowhere
mailhost = my.mail.host
imgcache = /usr/local/smokeping/htdocs/cache
imgurl   = cache
datadir  = /usr/local/smokeping/htdocs/data
piddir  = /usr/local/smokeping/htdocs/var
cgiurl   = http://some.url/smokeping.cgi
smokemail = /usr/local/smokeping/etc/smokemail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
syslogfacility = local0*** Alerts ***to = alertee@address.somewhere
from = smokealert@company.xy+someloss
type = loss
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times  in a row*** Database ***step     = 10
pings    = 5AVERAGE  0.5   1  1008
AVERAGE  0.5  12  4320MIN  0.5  12  4320MAX  0.5  12  4320
AVERAGE  0.5 144   720MAX  0.5 144   720MIN  0.5 144   720*** Presentation ***template = /usr/local/smokeping/etc/basepage.html.dist
charset = utf-8+ overview width = 600
height = 200
range = 24h+ detailwidth = 600
height = 200
unison_tolerance = 2"Last 5 Minutes"    5m
"Last 10 Minutes"    10m
"Last 30 Minutes"    30m
"Last 1 Hour"    1h
"Last 3 Hours"    3h
"Last 24 Hours"   24h
"Last 3 Days"    3d
"Last 7 Days"   7d
"Last 30 Days"    30d
"Last 1 Year"    1y*** Probes ***+ TCPPing
binary = /usr/bin/tcpping-sp
forks = 5
offset = 50%
step = 10
timeout = 5*** Slaves ***secrets=/usr/local/smokeping/etc/smokeping_secrets.dist+ SLAVE_CODE
display_name = SLAVE_NAME
location = SLAVE_NAME
color = 0000ff*** Targets ***probe = TCPPingmenu = Top
title = Network Latency Grapher
remark = Welcome to this SmokePing website. <br />+ mainlandmenu = 大陆方向
title = 大陆方向
nomasterpoll = yes
host = /mainland/ct-gz~SLAVE_CODE /mainland/ct-sh~SLAVE_CODE /mainland/cu-gz~SLAVE_CODE /mainland/cu-sh~SLAVE_CODE /mainland/cm-gz~SLAVE_CODE /mainland/cm-sh~SLAVE_CODE++ ct-gzmenu = 广州电信
title = 广州电信
slaves = SLAVE_CODE
host = 14.215.116.1++ ct-shmenu = 上海电信
title = 上海电信
slaves = SLAVE_CODE
host = 180.153.28.5++ cu-gzmenu = 广州联通
title = 广州联通
slaves = SLAVE_CODE
host = 157.255.70.5++ cu-shmenu = 上海联通
title = 上海联通
slaves = SLAVE_CODE
host = 211.95.52.116++ cm-gzmenu = 广州移动
title = 广州移动
slaves = SLAVE_CODE
host = 120.232.176.254++ cm-shmenu = 上海移动
title = 上海移动
slaves = SLAVE_CODE
host = 221.183.55.22+ globalmenu = 国际方向
title = 国际方向
nomasterpoll = yes
host = /global/cf~SLAVE_CODE /global/hk-pccw~SLAVE_CODE /global/sg-vu~SLAVE_CODE++ cfmenu = Cloudflare
title = Cloudflare
slaves = SLAVE_CODE
host = www.cloudflare.com++ hk-pccwmenu = 香港 PCCW
title = 香港 PCCW
slaves = SLAVE_CODE
host = 63.216.151.43++ sg-vumenu = 新加坡 Vultr
title = 新加坡 Vultr
slaves = SLAVE_CODE
host = 45.32.100.168

将第 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 700 /usr/local/smokeping/etc/secrets /usr/local/smokeping/etc/smokeping_secrets.dist
chown www:www /usr/local/smokeping/etc/smokeping_secrets.dist

依次执行以下命令:

cd /usr/local/smokeping/htdocs
mkdir -p data var cache ../cache
mv smokeping.fcgi.dist smokeping.fcgi

执行 systemctl start smokeping 以启动 SmokePing。

五、个性化配置 SmokePing

SomkePing 所监控的节点全部配置在 /usr/local/smokeping/etc/config 中;监控节点可以分目录层级,+ 为第一级目录,++ 为第二级目录,+++ 为第三级目录,以此类推。增加或修改节点时请保持 slaves = 相同。其他方面的修改显而易见,不赘述。

六、结语

手动编译 SmokePing 太复杂了,在此推荐我自己写的项目 KukiSa/smokeping-lnmp,一键脚本直接安装(适用于已经安装了 Nginx 的用户)以及 jiuqi9997/smokeping (适用于未安装 Nginx 的用户)。

使用腾讯云轻量应用服务器搭建网络质量拨测工具 SmokePing相关推荐

  1. 腾讯云轻量应用服务器搭建即时通信 IM系统

    我们如果想要搭建一个自己的即时通信系统,实现与好友的单聊或者创建群聊,这里推荐大家使用腾讯云的即时通信IM产品,部署十分简单,并且提供了免费版套餐可供试用.下面为大家介绍如何使用腾讯云轻量应用服务器搭 ...

  2. 腾讯云轻量应用服务器搭建wordpress之发送注册验证邮件

    最近在使用腾讯云轻量应用服务器搭建一个wordpress博客,用户使用注册功能时,需要给用户的邮箱发注册验证邮件. 2021.02.08更新:最后找了很久,用了一个插件能发出去邮件!还能替换原始的登录 ...

  3. 使用腾讯云轻量应用服务器搭建gitlab服务器

    使用腾讯云轻量应用服务器搭建gitlab服务器 前言:代码平台托管安全吗? 之前就有某科集团,在网络上面透露,托管在某云公共代码托管平台的源码发生泄漏,造成至少40多家企业200多个项目代码泄漏.所以 ...

  4. 使用腾讯云轻量应用服务器搭建dplayer播放器弹幕服务器

    说明 Dplayer播放器就不过多介绍了,不知道的可以查看官方项目地址:点击查看,算是目前国内比较火的视频播放器,貌似很多人喜欢用弹幕功能,而官方提供的弹幕api已经挂了,所以我们想使用的话,要么使用 ...

  5. 【教程】腾讯云轻量应用服务器搭建聊天室

    前言 前些日子听朋友说,他们领的腾讯云轻量246还在吃灰,我在萌备聊天室里看见了这个系统 感觉挺不错 那这篇文章就教大家用宝塔来搭建一个聊天室 介绍 Fiora系统非常简洁,而且也有很多功能,基于 n ...

  6. 如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?

    1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站.博客.电商.论坛等各类应用以及各类开发测试环境. Pboot ...

  7. 如何搭建一个自己的音乐播放器-使用腾讯云轻量应用服务器搭建YesPlayMusic网易云播放器

    项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品.而且还拥有一些网易云官方应用没有的功能,比如可以自动签到,支持PWA可以直 ...

  8. 腾讯云轻量应用服务器搭建跨境电商的方法步骤(非常详细)

     独立站火热的背后 对于中国的跨境电商平台卖家而言,2021年绝对是段低气压的时光:亚马逊掀起了一场规模庞大的"封号潮",自4月起至9月,从头部到中小品牌,粗略统计有超过5万家店铺 ...

  9. 阿里云腾讯云轻量应用服务器搭建网站教程

    首先,轻量应用服务器是什么?轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站.博客.电商.论坛等各类应用以及各类开发测试环境. 本 ...

最新文章

  1. events.out.tfevents文件
  2. Swoole入门介绍
  3. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
  4. keras cnn注意力机制_TensorFlow、PyTorch、Keras:NLP框架哪家强
  5. container_of(ptr, type, member)宏定义解析
  6. springmvc jsp页面提交表单乱码
  7. unity3D游戏开发三之unity编辑器二
  8. Vue.js(5)- 全局组件
  9. java i/o 流详解_java I/O流详解
  10. 互联网晚报 | 2月22日 星期二 | 海底捞预告去年最高亏45亿元;奥迪一汽新能源汽车项目启动;英雄互娱更名“英雄游戏”...
  11. 2引擎帮助文档_ANSA快速入门指南中文帮助文档浅析(上)
  12. Jquery表单清空
  13. Python 高阶函数,匿名函数 思维导图
  14. 慢慢欣赏linux 串口驱动架构
  15. ubuntu配置搜狗输入法
  16. qt linux 下的u盘检测,Qt-detect-Udisk老外写的qt检测U盘
  17. java个人银行账户管理程序代码改写
  18. C++ Builder和托管C++中属性的使用建议
  19. Mac 蓝牙鼠标卡顿的解决方法
  20. 工作组服务器虚拟化Hyper-V Replica 复写技术(二)

热门文章

  1. “创意不是想出来的”
  2. C++20协程初探!
  3. 第3章-2 查验身份证
  4. springcloud2.2.1 oauth2实现用户认证授权及sso
  5. 毕业设计-基于大数据的电影爬取与可视化分析系统-python
  6. 「MacTeX 小笔记」如何使用 LaTeXiT,以及导出一个数学公式图片
  7. 华硕笔记本键盘突然个别键失灵
  8. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(五):图像分类笔记(下)
  9. js控制键盘按键(回车、空格)
  10. 如何给物体添加阴影效果