我的服务器测速监控方案:Speedtest CLI + Cron 自动日志全记录
大家好,今天想分享一个我最近折腾的小工具方案——用 Speedtest CLI 自动记录服务器网络测速日志。起因是我发现某台海外服务器最近访问特别慢,但每次手动测速又显示正常,于是决定搞个自动化方案来长期监控真实网速。
为什么选择 Speedtest CLI?
其实市面上测速工具很多,但 Speedtest CLI 有几个优势特别吸引我:
- 官方出品,结果可靠(不像某些野鸡测速点会虚标)
- 纯命令行操作,适合服务器环境
- 能输出结构化数据(JSON格式美滋滋)
- 全球节点多,还能指定特定节点测试
不过安装时有个坑要注意:官方推荐用 curl -s https://install.speedtest.net/app/cli/install.deb.sh | sudo bash
安装,但实测某些 Linux 发行版会报错。后来我改用直接下载二进制包的方式才搞定:
wget https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz
tar -xvf ookla-speedtest-*.tgz
sudo mv speedtest /usr/local/bin/
设计日志记录方案
我的需求很简单:每天定时测速,把结果存到日志文件。但直接输出原始 JSON 太乱了,所以我写了个 shell 脚本做格式化:
#!/bin/bash
LOG_FILE="/var/log/speedtest.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
echo "===== ${TIMESTAMP} =====" >> $LOG_FILE
speedtest --accept-license --accept-gdpr -f json | jq -r '[
.ping.latency,
.download.bandwidth / 125000,
.upload.bandwidth / 125000,
.server.name
] | @tsv' | awk '{print "延迟: "$1"ms 下载: "$2"Mbps 上传: "$3"Mbps 节点: "$4}' >> $LOG_FILE
这里有几个实用技巧:
- 用
jq
提取关键数据(需要先安装jq
工具) - 带宽值除以 125000 将字节转换为 Mbps
- 用
awk
美化输出格式 - 记得加
--accept-license
参数避免交互提示
设置定时任务
最后一步就是用 crontab 设置每天自动运行:
# 每天凌晨3点测速
0 3 * * * /path/to/speedtest.sh
运行一周后,我的日志文件已经积累了不少数据。用 cat /var/log/speedtest.log
查看时发现个有趣现象:凌晨时段的下载速度能到 200Mbps+,而晚高峰经常掉到 50Mbps 以下——这解释了我之前感觉”有时快有时慢”的困惑。
进阶玩法
如果你也想部署这个方案,这里有几个建议:
- 加上
--server-id=xxxx
固定测试节点(避免不同节点带来的数据波动) - 用
logrotate
定期压缩旧日志 - 可以配合 Grafana 做可视化监控(我下一步准备折腾这个)
整个过程花了不到半小时,但收获了一个实用的长期监控方案。如果你也在为服务器网络波动烦恼,不妨试试这个方案。有什么问题欢迎在评论区交流~
很实用的方案,我正好有类似需求,回头试试看
学到了!jq格式化输出这个技巧很好用 😊
晚高峰掉速这个现象我也遇到,看来运营商偷偷限速是真的
为什么我的Ubuntu20.04用官方脚本安装老报错?有人遇到同样问题吗?