使用 Speedtest CLI 自动记录服务器测速日志

2025.7.7 杂七杂八 1778
33BLOG智能摘要
使用 Speedtest CLI 自动记录服务器测速日志的方法可有效监控网络质量。作者因手动测速不稳定,发现 Speedtest CLI 支持 JSON 输出,便于自动化处理。通过 cron 设置定时任务,每小时执行一次测速并将结果保存为带时间戳的日志文件。用 Python 脚本读取 JSON 文件,转换并导出为 CSV 文件,便于在 Excel 或 Grafana 等工具中生成趋势图。作者提到了服务器选择、数据管理和异常处理等问题,并介绍了如 Prometheus 和 InfluxDB 等时序监控系统的进阶用法。此方案已在 5 台服务器运行,检测出 3 次网络故障。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

我是如何用 Speedtest CLI 打造服务器测速监控系统的

使用 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

这里有几个实用技巧:

  1. --output-header 参数会包含测速服务器的信息
  2. 文件名带时间戳,避免覆盖
  3. 建议用 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 指定
  • 数据存储:长期运行会产生大量小文件,建议定期归档压缩
  • 异常处理:网络不稳定时测速可能失败,脚本要有重试机制

进阶玩法

如果你需要更专业的监控:

  1. 结合 Prometheus 实现告警功能
  2. 在多台服务器部署,对比不同机房的网络质量
  3. 把数据存入 InfluxDB 等时序数据库

这个方案我已经在 5 台服务器上稳定运行,成功发现了 3 次网络异常。如果你也有类似需求,不妨试试这个轻量级解决方案。有什么问题欢迎在评论区交流!

评论

  • 这个教程太实用了!正好最近在折腾服务器,赶紧收藏起来 😊

  • 用了一段时间确实稳定,不过我建议加上磁盘io监控,网络和磁盘都要看

  • 博主能分享一下遇到的问题具体怎么解决的吗?我的crontab总是执行失败

  • 可视化部分要是有现成脚本下载就好了,自己写Python好麻烦

  • 试了几次发现某些时段延迟真的很高,看来要找服务商理论去了 🤨

  • 推荐搭配telegraf+influxdb食用更香,我都跑了两年了

  • 能不能出个视频教程?文字看着容易懵

  • 新来的问下,这个占用多少系统资源啊?