本文原载于 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 用户请依次执行:
- 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
if [ $# != 5 -a $# != 4 ]then
echo "Wrong number of arguments"
exit
fi
output="$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 编译检查和配置。
[img]https://p.itxe.net/images/2021/10/28/image92c00cb7ed49d71d.png[/img] 执行 make install 进行编译。
[img]https://p.itxe.net/images/2021/10/28/image.png[/img][size=6]三、配置 FsatCGI 前端程序[/size] 较为流行的教程均以 Apache 2 作为 SmokePing 的默认 FCGI 程序,但目前 Nginx 较为流行。本文以 Nginx 作为 SmokePing 的 FastCGI 程序。
[size=5]3.1 安装 Nginx[/size][img]https://p.itxe.net/images/2021/10/28/image46789f4df89a3402.png[/img] 注意:如果你已经安装 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
[img]https://p.itxe.net/images/2021/10/28/imageb4daefb96699bc35.png[/img][b]3.2.2 初创建 Nginx 站点配置文件[/b] 使用包安装的 Nginx 的用户请在 /etc/nginx/conf.d 目录新建一个空白文件,文件名为 域名.conf (请自定义 域名)。
[img]https://p.itxe.net/images/2021/10/28/image15d50484faffdbca.png[/img] 使用 LNMP.org 一键包方案安装的 Nginx 的用户请执行 lnmp vhost add 以添加一个站点,暂时不要配置 SSL。
[img]https://p.itxe.net/images/2021/10/28/image41ea192e300b222b.png[/img] 使用宝塔面板安装的 Nginx 的用户请新建一个站点。
[img]https://p.itxe.net/images/2021/10/28/image32b5e7a26e50e036.png[/img] > /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 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 的用户请新建一个站点。
热议
其中,请将 $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 使其开机启动。
将 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 timesin a row
*** Database ***
step = 10
pings = 5
AVERAGE0.5 11008
AVERAGE0.5124320
MIN0.5124320
MAX0.5124320
AVERAGE0.5 144 720
MAX0.5 144 720
MIN0.5 144 720
*** Presentation ***
template = /usr/local/smokeping/etc/basepage.html.dist
charset = utf-8
+ overview
width = 600
height = 200
range = 24h
+ detail
width = 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 = TCPPing
menu = Top
title = Network Latency Grapher
remark = Welcome to this SmokePing website. <br />
+ mainland
menu = 大陆方向
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-gz
menu = 广州电信
title = 广州电信
slaves = SLAVE_CODE
host = 14.215.116.1
++ ct-sh
menu = 上海电信
title = 上海电信
slaves = SLAVE_CODE
host = 180.153.28.5
++ cu-gz
menu = 广州联通
title = 广州联通
slaves = SLAVE_CODE
host = 157.255.70.5
++ cu-sh
menu = 上海联通
title = 上海联通
slaves = SLAVE_CODE
host = 211.95.52.116
++ cm-gz
menu = 广州移动
title = 广州移动
slaves = SLAVE_CODE
host = 120.232.176.254
++ cm-sh
menu = 上海移动
title = 上海移动
slaves = SLAVE_CODE
host = 221.183.55.22
+ global
menu = 国际方向
title = 国际方向
nomasterpoll = yes
host = /global/cf~SLAVE_CODE /global/hk-pccw~SLAVE_CODE /global/sg-vu~SLAVE_CODE
++ cf
menu = Cloudflare
title = Cloudflare
slaves = SLAVE_CODE
host = www.cloudflare.com
++ hk-pccw
menu = 香港 PCCW
title = 香港 PCCW
slaves = SLAVE_CODE
host = 63.216.151.43
++ sg-vu
menu = 新加坡 Vultr
title = 新加坡 Vultr
slaves = SLAVE_CODE
host = 45.32.100.168
将第 10 行的 some.url 修改为第三部分使用的域名;将 SLAVE_CODE 替换为与步骤 4.2 相同的自定义的英文+数字组合;将 SLAVE_NAME 替换为自定义的名字,支持包括中文在内的任何 UTF-8 字符。
其中,$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 (https://github.com/KukiSa/smokeping-lnmp),一键脚本直接安装(适用于已经安装了 Nginx 的用户)以及 jiuqi9997/smokeping (https://github.com/jiuqi9997/smokeping) (适用于未安装 Nginx 的用户)。
5楼 suantong 昨天20:40
废话太多了,上docker啊
6楼 edear 昨天20:42
能同时监控几台小鸡?
7楼 Mio 昨天20:46
有人打包了docker,方便一些,https://github.com/linuxserver/docker-smokeping
8楼 citywar 昨天20:48
看得头晕。
就一些吃灰小鸡有必要弄这么详细的监控数据吗。
9楼 88170351 昨天21:13
手动编译 SmokePing 太复杂了,在此推荐我自己写的项目 KukiSa/smokeping-lnmp (https://github.com/KukiSa/smokeping-lnmp),一键脚本直接安装(适用于已经安装了 Nginx 的用户)以及 jiuqi9997/smokeping (https://github.com/jiuqi9997/smokeping) (适用于未安装 Nginx 的用户)。
10楼 optimism 昨天21:14
技术贴顶一下吧
12楼 ZhènJīngBù 昨天23:51
王婆卖瓜自卖自夸
13楼 老猹 8小时前
支持技术贴作为弟弟就看看好了。
14楼 iks 7小时前
手动编译 SmokePing 太复杂了,在此推荐我自己写的项目 KukiSa/smokeping-lnmp (https://github.com/KukiSa ...
醉翁之意不在酒,在乎山水之间也
15楼 iks 7小时前
能同时监控几台小鸡?
可以的
https://github.com/KukiSa/smokeping-lnmp/blob/main/faq.md#%E5%AE%9A%E5%88%B6%E4%B8%BB%E4%BB%8E%E5%88%86%E7%A6%BB
16楼 城里的月光 6小时前
技术贴还是要顶的!!
17楼 acg88 3小时前
有演示吗?
18楼 lanjuli 3小时前
这么多步骤,docker不好吗
19楼 打包的香肠 2小时前
辛苦了,收藏
20楼 zhlw88cn 14分钟前
字数多就是厉害
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
评论前必须登录!
立即登录 注册