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

[复制链接]
查看: 7073   回复: 9
发表于 2022-3-26 07:30:30 | 显示全部楼层 |阅读模式
本文原载于 https://www.idc.moe/archives/qcloud-Lighthouse-SmokePing.html
作者:iks
  SmokePing (https://oss.oetiker.ch/smokeping) 是由 RRDtool (https://oss.oetiker.ch/rrdtool) 的作者 Tobi Oetiker (https://www.oetiker.ch) 开发的一款监控网络状态和稳定性的开源软件。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 用户请依次执行:
  1. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configsetenforce 0yum install wget curl ca-certificates dmidecode epel-release -yupdate-ca-trust force-enableyum 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 用户请依次执行:
  1. apt updateapt install wget curl gnupg2 ca-certificates dmidecode lsb-release -yupdate-ca-certificatesapt 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 并填入以下内容:
  1. #!/bin/sh -eif [ $# != 5 -a $# != 4 ]then        echo "Wrong number of arguments"        exitfioutput="$4 :"for i in $(seq $3)do        portflag=""        if [ $# = 5 ]        then                portflag="-p $5"        fi        tr=$(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  执行 chmod +x /usr/bin/tcpping-sp 赋予其执行权。[size=5]1.4 获取 SmokePing 源码包[/size]  海外用户请执行 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 以解压。[size=6]二、开始编译[/size]  执行 cd smokeping-2.7.3 进入 SmokePing 源代码目录,执行 ./configure --prefix=/usr/local/smokeping 执行 SmokePing 编译检查和配置。  执行 make install 进行编译。[size=6]三、配置 FsatCGI 前端程序[/size]  较为流行的教程均以 Apache 2 作为 SmokePing 的默认 FCGI 程序,但目前 Nginx 较为流行。本文以 Nginx 作为 SmokePing 的 FastCGI 程序。[size=5]3.1 安装 Nginx[/size]  注意:如果你已经安装 Nginx,则无需再次安装 Nginx。本文以包安装的 Nginx 为例。  安装 Nginx 的教程多如牛毛,使用包安装方案、LNMP.org 一键包方案和通过宝塔面板安装的 Nginx 均可,本文不再赘述。[size=5]3.2 配置 Nginx 站点配置文件[/size][b]3.2.1 获取 Nginx 的 fastcgi_params 位置[/b]  执行 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[b]3.2.2 初创建 Nginx 站点配置文件[/b]  使用包安装的 Nginx 的用户请在 /etc/nginx/conf.d 目录新建一个空白文件,文件名为 域名.conf (请自定义 域名)。  使用 LNMP.org 一键包方案安装的 Nginx 的用户请执行 lnmp vhost add 以添加一个站点,暂时不要配置 SSL。  使用宝塔面板安装的 Nginx 的用户请新建一个站点。 > /dev/null        then                output="$output -"        else                ms=$(echo "$tr" | cut -d" " -f3)                output="$output $ms"        fidoneecho $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 的用户请新建一个站点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2022-3-26 07:30:45 | 显示全部楼层
看得头晕。
就一些吃灰小鸡有必要弄这么详细的监控数据吗。
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:30:56 | 显示全部楼层
能同时监控几台小鸡?
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:31:55 | 显示全部楼层
废话太多了,上docker啊
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:32:01 | 显示全部楼层
4.4 配置通信密钥
  新建文件 /usr/local/smokeping/etc/smokeping_secrets.dist,填入以下内容:
  1. $code:$sec
复制代码
  其中,$code 为步骤 4.2 相同的自定义的英文+数字组合;$sec 为自定义的英文+数字组合。
  新建文件 /usr/local/smokeping/etc/secrets,将 上面的 $sec 填入。

4.5 安全和收尾
  依次执行以下命令:
  1. chmod 700 /usr/local/smokeping/etc/secrets /usr/local/smokeping/etc/smokeping_secrets.distchown www:www /usr/local/smokeping/etc/smokeping_secrets.dist
复制代码
  依次执行以下命令:
  1. cd /usr/local/smokeping/htdocsmkdir -p data var cache ../cachemv smokeping.fcgi.dist smokeping.fcgi
复制代码
  执行 systemctl start smokeping 以启动 SmokePing。



五、个性化配置 SmokePing
  SomkePing 所监控的节点全部配置在 /usr/local/smokeping/etc/config 中;监控节点可以分目录层级,+ 为第一级目录,++ 为第二级目录,+++ 为第三级目录,以此类推。增加或修改节点时请保持 slaves =  相同。其他方面的修改显而易见,不赘述。
六、结语
  手动编译 SmokePing 太复杂了,在此推荐我自己写的项目 KukiSa/smokeping-lnmp (https://github.com/KukiSa/smokeping-lnmp),一键脚本直接安装(适用于已经安装了 Nginx 的用户)以及 jiuqi9997/smokeping (https://github.com/jiuqi9997/smokeping) (适用于未安装 Nginx 的用户)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:32:46 | 显示全部楼层
3.2.3 修改 Nginx 站点配置文件
  使用包安装的 Nginx 的用户请将如下内容粘贴到 /etc/nginx/conf.d/域名.conf;使用 LNMP.org 一键包方案安装的 Nginx 的用户请使用如下内容将 /usr/local/nginx/conf/vhost/域名.conf 的原始内容覆盖掉;使用宝塔面板安装的 Nginx 的用户请使用如下内容将站点配置的原始内容覆盖掉。
  1. 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,填入以下内容:
  1. [Unit]Description=SmokePing ServiceAfter=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=oneshotExecStart=/bin/bash /usr/local/smokeping/bin/slave.shRemainAfterExit=yes[Install]WantedBy=multi-user.target
复制代码
  执行 systemctl enable smokeping 使其开机启动。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:32:51 | 显示全部楼层
4.2 配置从服务器运行脚本
  新建文件 /usr/local/smokeping/bin/slave.sh,填入以下内容:
  1. #/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,填入以下内容:
  1. *** General ***owner    = Xcontact  = some@address.nowheremailhost = my.mail.hostimgcache = /usr/local/smokeping/htdocs/cacheimgurl   = cachedatadir  = /usr/local/smokeping/htdocs/datapiddir  = /usr/local/smokeping/htdocs/varcgiurl   = http://some.url/smokeping.cgismokemail = /usr/local/smokeping/etc/smokemail.disttmail = /usr/local/smokeping/etc/tmail.distsyslogfacility = local0*** Alerts ***to = alertee@address.somewherefrom = smokealert@company.xy+somelosstype = losspattern = >0%,*12*,>0%,*12*,>0%comment = loss 3 times  in a row*** Database ***step     = 10pings    = 5AVERAGE  0.5   1  1008AVERAGE  0.5  12  4320    MIN  0.5  12  4320    MAX  0.5  12  4320AVERAGE  0.5 144   720    MAX  0.5 144   720    MIN  0.5 144   720*** Presentation ***template = /usr/local/smokeping/etc/basepage.html.distcharset = utf-8+ overview width = 600height = 200range = 24h+ detailwidth = 600height = 200unison_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 ***+ TCPPingbinary = /usr/bin/tcpping-spforks = 5offset = 50%step = 10timeout = 5*** Slaves ***secrets=/usr/local/smokeping/etc/smokeping_secrets.dist+ SLAVE_CODEdisplay_name = SLAVE_NAMElocation = SLAVE_NAMEcolor = 0000ff*** Targets ***probe = TCPPingmenu = Toptitle = Network Latency Grapherremark = Welcome to this SmokePing website. <br />+ mainlandmenu = 大陆方向title = 大陆方向nomasterpoll = yeshost = /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_CODEhost = 14.215.116.1++ ct-shmenu = 上海电信title = 上海电信slaves = SLAVE_CODEhost = 180.153.28.5++ cu-gzmenu = 广州联通title = 广州联通slaves = SLAVE_CODEhost = 157.255.70.5++ cu-shmenu = 上海联通title = 上海联通slaves = SLAVE_CODEhost = 211.95.52.116++ cm-gzmenu = 广州移动title = 广州移动slaves = SLAVE_CODEhost = 120.232.176.254++ cm-shmenu = 上海移动title = 上海移动slaves = SLAVE_CODEhost = 221.183.55.22+ globalmenu = 国际方向title = 国际方向nomasterpoll = yeshost = /global/cf~SLAVE_CODE /global/hk-pccw~SLAVE_CODE /global/sg-vu~SLAVE_CODE++ cfmenu = Cloudflaretitle = Cloudflareslaves = SLAVE_CODEhost = www.cloudflare.com++ hk-pccwmenu = 香港 PCCWtitle = 香港 PCCWslaves = SLAVE_CODEhost = 63.216.151.43++ sg-vumenu = 新加坡 Vultrtitle = 新加坡 Vultrslaves = SLAVE_CODEhost = 45.32.100.168
复制代码
  将第 10 行的 some.url 修改为第三部分使用的域名;将 SLAVE_CODE 替换为与步骤 4.2 相同的自定义的英文+数字组合;将 SLAVE_NAME 替换为自定义的名字,支持包括中文在内的任何 UTF-8 字符。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:33:17 | 显示全部楼层
有人打包了docker,方便一些,https://github.com/linuxserver/docker-smokeping
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:33:39 | 显示全部楼层
手动编译 SmokePing 太复杂了,在此推荐我自己写的项目 KukiSa/smokeping-lnmp (https://github.com/KukiSa/smokeping-lnmp),一键脚本直接安装(适用于已经安装了 Nginx 的用户)以及 jiuqi9997/smokeping (https://github.com/jiuqi9997/smokeping) (适用于未安装 Nginx 的用户)。
回复 支持 反对

使用道具 举报

发表于 2022-3-26 07:34:20 | 显示全部楼层
技术贴顶一下吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则