speedtest-z は Web ブラウザで主要な速度テストサイトを自動巡回。ユーザ体験そのままの回線品質を定点観測できます。
- 8つの速度テストサイトに対応(Cloudflare, Netflix, Ookla, M-Lab 等)
- Zabbix 連携で回線品質を継続監視
pip install speedtest-zですぐ使える
- 8つの速度テストサイトを自動実行(Cloudflare, Netflix/fast.com, Google Fiber, Ookla, Box-test, M-Lab, USEN, iNonius)
- Zabbixへトラッパーアイテムとして結果送信(zappix 使用)
- Grafana Cloud 連携(Prometheus Remote Write、オプション)
- OpenTelemetry (OTLP) メトリクス送信(オプション)
- サイトごとの実行頻度設定(確率ベースのスロットリング)
- デバッグ用スクリーンショット保存
- ヘッドレス/GUI Chromeモード切替
- CLI対応(
--dry-run、サイト指定等) - systemd timerによるスケジュール実行
- Python >= 3.10
- Google Chrome ブラウザ(pip ではインストールされません)
brew install shigechika/tap/speedtest-zmacOS Sonoma (14) / Sequoia (15) の Apple Silicon 向けにビルド済み bottle が提供されており、数秒でインストールが完了します。
GitHub Releases からディストリビューションに合った .deb パッケージをダウンロード:
# Ubuntu 24.04 (Noble)
sudo dpkg -i speedtest-z_*~noble.deb
# Ubuntu 22.04 (Jammy)
sudo dpkg -i speedtest-z_*~jammy.deb.deb パッケージは Python 依存をすべて含む自己完結型 virtualenv(/opt/venvs/speedtest-z/)、systemd service/timer(無効状態でインストール)、設定ファイル(/etc/speedtest-z/)を含みます。
# 設定を編集
sudo vi /etc/speedtest-z/config.ini
# スケジュール実行を有効化(10分間隔)
sudo systemctl enable --now speedtest-z.timerGitHub Releases から .rpm パッケージをダウンロード:
# RHEL 9 / Rocky Linux 9 / AlmaLinux 9
sudo dnf install python3.11
sudo rpm -ivh speedtest-z-*-1.el9.x86_64.rpm.rpm パッケージは .deb と同様の構成です: /opt/venvs/speedtest-z/ に自己完結型 virtualenv、systemd service/timer、設定ファイル(/etc/speedtest-z/)を含みます。
pip install speedtest-z
# uv を使う場合
uv tool install speedtest-zgit clone https://github.com/shigechika/speedtest-z.git
cd speedtest-z
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
# uv を使う場合
uv syncpip install speedtest-z[grafana]
# uv を使う場合
uv tool install "speedtest-z[grafana]"Prometheus Remote Write に必要な Snappy 圧縮ライブラリ cramjam がインストールされます。
pip install speedtest-z[otel]
# uv を使う場合
uv tool install "speedtest-z[otel]"OpenTelemetry SDK と OTLP HTTP エクスポーターがインストールされます。
pip install speedtest-z[completion]
eval "$(register-python-argcomplete speedtest-z)"eval の行を ~/.bashrc や ~/.zshrc に追記すると常時有効になります。
設定ファイルは以下の順序で探索されます(-c / --config で明示指定も可能):
- CLI で指定されたパス(
-c/--config) - カレントディレクトリの
./config.ini ~/.config/speedtest-z/config.ini(XDG_CONFIG_HOME)/etc/speedtest-z/config.ini(システム全体、.debパッケージで使用)
config.ini-sample をコピーして編集してください。
[general]
# 実行モード設定
dry_run = true # true にすると外部送信しない(旧名 dryrun も互換サポート)
headless = false # ヘッドレスモード(GUI なし)
timeout = 30 # 各テストのタイムアウト(秒)
# ookla_server = IPA CyberLab 400G # Ookla テストサーバ(省略時: 自動選択)[zabbix]
enable = false # true にすると Zabbix へ送信する
server = 127.0.0.1 # 送信先 Zabbix Server
port = 10051 # Zabbix トラッパーポート
host = speedtest-agent # Zabbix ホスト名[grafana]
enable = false
remote_write_url = https://prometheus-prod-XX-prod-XX.grafana.net/api/prom/push
username = <Prometheus ユーザ名>
token = <Grafana Cloud API トークン>[otel]
enable = false
endpoint = https://otlp-gateway-prod-XX.grafana.net/otlp
# カンマ区切りの Key=Value ペア(OTEL_EXPORTER_OTLP_HEADERS と同じ形式)
headers = Authorization=Basic <base64エンコード済み認証情報>[snapshot]
enable = true # 画面キャプチャの有効/無効
save_dir = ./snapshots # スクリーンショット保存先各サイトの実行確率を 0〜100 で設定します。0 で無効化、100 で毎回実行、50 で約半分の確率で実行されます。
[frequency]
cloudflare = 100
netflix = 100
google = 100
ookla = 50
boxtest = 50
mlab = 10
usen = 50
inonius = 50config.ini と同じ探索順で検索されます(任意):
- カレントディレクトリの
./logging.ini ~/.config/speedtest-z/logging.ini(XDG_CONFIG_HOME)/etc/speedtest-z/logging.ini(システム全体)
いずれも見つからない場合は、デフォルトのログ設定(INFO レベル、stdout 出力)が使用されます。
speedtest-z [options] [site ...]
| オプション | 説明 |
|---|---|
-V, --version |
バージョン表示 |
-c, --config CONFIG |
設定ファイル指定 |
-n, --dry-run |
テスト実行(Zabbix へ送信しない) |
--headless |
ヘッドレスモードで実行 |
--no-headless, --headed |
GUI モードで実行 |
--timeout SECONDS |
各テストのタイムアウト(秒) |
--list-sites |
利用可能なテストサイト一覧を表示して終了 |
--check |
テストサイト URL の疎通確認を行い終了(Chrome 不要) |
-o, --output FORMAT |
出力形式: zabbix(デフォルト)、json、csv |
-d, --debug |
デバッグ出力を有効化 |
site |
実行するテストサイト(位置引数、省略時は全サイト) |
対話的なターミナル(TTY)から実行すると、テストサイトへの接続前に確認を求めます。cron や systemd、パイプ経由など非対話環境では自動的にスキップされます。
$ speedtest-z -n
speedtest-z: 8 サイトに接続します (cloudflare, netflix, ...)
続行しますか? [y/N]: y
# 全サイトをテスト実行(Zabbix に送信しない)
speedtest-z -n
# 特定サイトのみ実行
speedtest-z cloudflare netflix
# GUI モードでデバッグ実行
speedtest-z --no-headless -d google
# 利用可能なサイト一覧を表示
speedtest-z --list-sites
# テストサイト URL の疎通確認(Chrome 不要)
speedtest-z --check
# 特定サイトのみ疎通確認
speedtest-z --check cloudflare netflix
# 結果を JSON で出力(Zabbix 送信はスキップ)
speedtest-z --dry-run --output json cloudflare 2>/dev/null
# 結果を CSV で出力
speedtest-z --dry-run -o csv cloudflare netflix 2>/dev/null$ speedtest-z --dry-run
speedtest-z: 8 サイトに接続します (cloudflare, netflix, google, ookla, boxtest, mlab, usen, inonius)
続行しますか? [y/N]: y
2026-02-25 15:00:01 [INFO] speedtest-z: START
2026-02-25 15:00:01 [INFO] Config loaded: config.ini
2026-02-25 15:00:01 [INFO] Initializing Chrome WebDriver...
2026-02-25 15:00:02 [INFO] cloudflare: OPEN
2026-02-25 15:00:09 [INFO] cloudflare: Test started
2026-02-25 15:00:58 [INFO] cloudflare: COMPLETED (Quality Scores appeared)
2026-02-25 15:00:58 [INFO] netflix: OPEN
2026-02-25 15:01:24 [INFO] netflix: COMPLETED (succeeded class detected)
2026-02-25 15:01:24 [INFO] google: OPEN
2026-02-25 15:01:51 [INFO] google: COMPLETED
2026-02-25 15:01:51 [INFO] ookla: OPEN (Attempt 1/3)
2026-02-25 15:02:31 [INFO] ookla: COMPLETED
2026-02-25 15:02:33 [INFO] boxtest: OPEN
2026-02-25 15:03:48 [INFO] boxtest: COMPLETED
2026-02-25 15:03:48 [INFO] mlab: OPEN
2026-02-25 15:04:36 [INFO] mlab: COMPLETED
2026-02-25 15:04:36 [INFO] usen: OPEN
2026-02-25 15:05:05 [INFO] usen: COMPLETED (speedtest_wait class removed)
2026-02-25 15:05:05 [INFO] inonius: OPEN
2026-02-25 15:06:02 [INFO] inonius: COMPLETED
2026-02-25 15:06:02 [INFO] speedtest-z: FINISH
全8サイトの計測が約6分で完了しています。
| サイト名 | URL | 取得メトリクス |
|---|---|---|
cloudflare |
https://speed.cloudflare.com/ | download, upload, latency, jitter |
netflix |
https://fast.com/ | download, upload, latency, server-locations |
google |
http://speed.googlefiber.net/ | download, upload, ping |
ookla |
https://www.speedtest.net/ | download, upload, ping |
boxtest |
https://www.box-test.com/ | POP, DownloadSpeed, DownloadDuration, DownloadRTT, UploadSpeed, UploadDuration, UploadRTT, latency |
mlab |
https://speed.measurementlab.net/ | download, upload, latency, retrans |
usen |
https://speedtest.gate02.ne.jp/ | download, upload, ping, jitter |
inonius |
https://inonius.net/speedtest/ | IPv4/IPv6 各: DL, UL, RTT, JIT, MSS |
注意: Google Fiber (speed.googlefiber.net) とジャンボフレーム
speed.googlefiber.net は HTTPS 非対応(HTTP のみ)で、AAAA レコードを持ちません。IPv6-only 環境では DNS64/NAT64 経由でアクセスしますが、NIC の MTU が 9000(ジャンボフレーム)の場合、ページの JavaScript が読み込めず画面が真っ白になります。MTU を 1500 に設定してください。
speedtest-z_templates.yaml を Zabbix にインポートすると、全テストサイトのアイテムが自動作成されます。
- 全アイテムはトラッパータイプ(
type: TRAP) - 速度系アイテムは Mbps → bps への前処理(MULTIPLIER x1000000)付き
config.iniの[zabbix]セクションでenable = trueに設定
Prometheus Remote Write 経由で Grafana Cloud にメトリクスを送信できます。
- Grafana 対応をインストール:
pip install speedtest-z[grafana] config.iniに[grafana]セクションを追加:
[grafana]
enable = true
remote_write_url = https://prometheus-prod-XX-prod-XX.grafana.net/api/prom/push
username = <Prometheus ユーザ名>
token = <Grafana Cloud API トークン>- メトリクスは
speedtest_<metric>{site="<site>"}の形式で送信されます(例:speedtest_download{site="cloudflare"}) - Zabbix と Grafana は同時に有効化でき、計測結果は全ての有効なバックエンドに送信されます
# Zabbix Web UI → 設定 → テンプレート → インポート
# speedtest-z_templates.yaml を選択してインポートOpenTelemetry Protocol (OTLP) 経由で OTLP 対応バックエンドにメトリクスを送信できます。
- OTel 対応をインストール:
pip install speedtest-z[otel] config.iniに[otel]セクションを追加:
[otel]
enable = true
endpoint = https://otlp-gateway-prod-XX.grafana.net/otlp
headers = Authorization=Basic <base64エンコード済み認証情報>- メトリクスは
speedtest_<metric>{site="<site>", host="<host>"}の形式で送信されます - Zabbix、Grafana、OTel の3バックエンドを同時に有効化できます
注意: 2026年2月時点で、無料プランで Collector なしの OTLP メトリクス直接取り込みに対応しているバックエンドは限られています。Grafana Cloud が最も成熟した選択肢です。Mackerel・GCP Cloud Monitoring・AWS CloudWatch は現状 OTLP トレースのみ対応、Datadog は組織のホワイトリスト登録が必要です。有料プランではより広い OTLP メトリクス対応が期待できます。
Note:
.deb/.rpmパッケージには systemd service/timer が同梱されています。インストール後sudo systemctl enable --now speedtest-z.timerで有効化するだけです。
pip でインストールした場合は、deploy/ ディレクトリに systemd のサービスファイルとタイマーファイルが含まれています。
# サービスファイルとタイマーファイルをコピー
sudo cp deploy/speedtest-z.service /etc/systemd/system/
sudo cp deploy/speedtest-z.timer /etc/systemd/system/
# 必要に応じてサービスファイルの ExecStart パスを編集
sudo systemctl daemon-reload
# タイマーを有効化・起動(6分間隔で実行)
sudo systemctl enable --now speedtest-z.timer
# 動作確認
systemctl status speedtest-z.timer
systemctl list-timers speedtest-z.timerChrome の一時ファイルを定期的に削除する cron 設定も含まれています。
sudo cp deploy/SeleniumCleaner.cron /etc/cron.d/SeleniumCleaner爆速回線や激遅 Wi-Fi の計測結果をお待ちしています!
GitHub Issues から以下を添えて投稿してください:
snapshots/ディレクトリのスクリーンショット- CLI ログ出力(
speedtest-z --dry-run)
データセンターの超高速回線でも、山小屋の激遅 Wi-Fi でも大歓迎です。
| 問題 | 解決策 |
|---|---|
| Linux で USEN/iNonius のスナップショットが豆腐文字(□□□)になる | 日本語フォントをインストール: sudo apt install fonts-noto-cjk |
| ChromeDriver のバージョン不一致エラー | Selenium Manager が自動でダウンロードします。selenium パッケージを更新: pip install -U selenium |
| テストがハングする・タイムアウトする | タイムアウトを延長: speedtest-z --timeout 60、またはネットワーク接続を確認 |
config.ini が見つからない |
./、~/.config/speedtest-z/、/etc/speedtest-z/ のいずれかに配置。config.ini-sample からコピー |
| Zabbix sender の接続が拒否される | [zabbix] セクションの server と port を確認、zabbix_sender への疎通を確認 |
| Grafana Cloud で 401/403 エラー | [grafana] セクションの token のスコープを確認(MetricsPublisher ロールが必要) |
ModuleNotFoundError: cramjam |
Grafana 対応をインストール: pip install speedtest-z[grafana] |
ModuleNotFoundError: opentelemetry |
OTel 対応をインストール: pip install speedtest-z[otel] |
Copyright 2026 AIKAWA Shigechika

