我是如何用 Speedtest CLI 打造服务器测速监控系统的
作为经常折腾服务器的老司机,我发现每次手动测速实在太麻烦了。今天就跟大家分享一个实用技巧:用 Speedtest CLI 自动记录测速日志,还能生成可视化报表。这个方案我已经在生产环境跑了半年多,特别适合需要长期监控服务器网络质量的场景。
为什么要自动化测速?
去年我迁移服务器时遇到个坑:服务商承诺的带宽和实际体验差距很大。手动测速几次后,我发现不同时段速度波动能达到 50%!但靠人工记录太不靠谱了,经常忘记测,数据也不连贯。
后来在 GitHub 上发现了 Ookla 官方出的 Speedtest CLI,简直是运维人员的福音。它不仅能精确测量下载/上传速度、延迟等指标,还支持 JSON 格式输出,特别适合自动化处理。
安装与基础使用
在 Ubuntu 上安装特别简单(其他系统请参考官方文档):
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest
第一次运行会弹出协议确认,之后就可以直接使用了:
speedtest --accept-license --accept-gdpr
这个命令会返回详细的测速结果,包括:
- 服务器位置和运营商
- 下载/上传速度(Mbps)
- 网络延迟(ms)
- 数据包丢失率
实现自动化记录
要实现自动化,关键是把结果保存下来。我推荐用 JSON 格式,方便后续处理:
speedtest --format=json --output-header > speedtest_$(date +%Y%m%d_%H%M%S).json
这里有几个实用技巧:
--output-header
参数会包含测速服务器的信息- 文件名带时间戳,避免覆盖
- 建议用 cron 设置定时任务(比如每小时测一次)
我的 crontab 配置是这样的:
0 * * * * /usr/bin/speedtest --format=json --output-header > /var/log/speedtest/$(date +%Y%m%d_%H%M%S).json
数据可视化方案
攒了一堆 JSON 文件后,我用 Python 写了个简单的处理脚本:
import json
import glob
import pandas as pd
files = glob.glob('/var/log/speedtest/*.json')
data = []
for f in files:
with open(f) as json_file:
try:
result = json.load(json_file)
data.append({
'timestamp': f.split('/')[-1].replace('.json',''),
'download': result['download']['bandwidth']/125000, # 转换为Mbps
'upload': result['upload']['bandwidth']/125000,
'ping': result['ping']['latency']
})
except:
continue
df = pd.DataFrame(data)
df.to_csv('speedtest_history.csv', index=False)
有了 CSV 数据,用 Excel 或 Grafana 都能做出漂亮的趋势图。我这里分享个 Grafana 的配置截图:
[这里可以插入Grafana面板截图]
踩过的坑
在实施过程中有几个注意事项:
- 服务器选择:默认会自动选择最近的服务器,但有时会选到不稳定的节点。可以用
speedtest --servers
列出可用服务器,然后用--server-id=xxxx
指定 - 数据存储:长期运行会产生大量小文件,建议定期归档压缩
- 异常处理:网络不稳定时测速可能失败,脚本要有重试机制
进阶玩法
如果你需要更专业的监控:
- 结合 Prometheus 实现告警功能
- 在多台服务器部署,对比不同机房的网络质量
- 把数据存入 InfluxDB 等时序数据库
这个方案我已经在 5 台服务器上稳定运行,成功发现了 3 次网络异常。如果你也有类似需求,不妨试试这个轻量级解决方案。有什么问题欢迎在评论区交流!
这个教程太实用了!正好最近在折腾服务器,赶紧收藏起来 😊
用了一段时间确实稳定,不过我建议加上磁盘io监控,网络和磁盘都要看
博主能分享一下遇到的问题具体怎么解决的吗?我的crontab总是执行失败
可视化部分要是有现成脚本下载就好了,自己写Python好麻烦
试了几次发现某些时段延迟真的很高,看来要找服务商理论去了 🤨
推荐搭配telegraf+influxdb食用更香,我都跑了两年了
能不能出个视频教程?文字看着容易懵
新来的问下,这个占用多少系统资源啊?