Instrument Speedtest.net tests from Prometheus.
1M+
Instrument Speedtest.net tests from Prometheus. Provides metrics on download_speed, upload_speed, and latency.

These instructions will install and run prometheus_speedtest on your system.
prometheus_speedtest is provided as a
PyPi package.
Installing
pip install prometheus_speedtest
Running
prometheus_speedtest
Instrument speedtest.net speedtests from Prometheus.
flags:
prometheus_speedtest.py:
--address: address to listen on
(default: '0.0.0.0')
--port: port to listen on
(default: '9516')
(an integer)
--[no]version: show version
(default: 'false')
prometheus_speedtest is also available as a Docker image
on Docker Hub
:whale:.
docker run --rm -d --name prometheus_speedtest -p 9516:9516/tcp jraviles/prometheus_speedtest:latest
prometheus_speedtest is best when paired with
Prometheus. Prometheus can be configured to perform
Speedtests on an interval and record their results.
Speedtest metrics available to query in Prometheus.
| Metric Name | Description |
|---|---|
| download_speed_bps | Download speed (bit/s) |
| upload_speed_bps | Upload speed (bit/s) |
| ping_ms | Latency (ms) |
| bytes_received | Bytes received during test |
| bytes_sent | Bytes sent during test |
Add this to your Prometheus config to start instrumenting Speedtests and recording their metrics.
global:
scrape_timeout: 2m
scrape_configs:
- job_name: 'speedtest'
metrics_path: /probe
static_configs:
- targets:
- localhost:9516
Note if you're running prometheus under Docker, you must link the
prometheus container to prometheus_speedtest. See the steps below for how
this can be done.
An example
Prometheus config
has been provided at
example/prometheus.yml.
We'll start prometheus with this config.
Docker Network
Create the Docker network that will link
prometheus_speedtest and prometheus together.
docker network create prometheus_network
Start Prometheus Speedtest
docker run --rm -d --net prometheus_network -p 9516:9516/tcp \
--name prometheus_speedtest jraviles/prometheus_speedtest:latest
Start Prometheus
docker run --rm -d --net prometheus_network -p 9090:9090/tcp \
-v $PWD/example/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus prom/prometheus:latest
Query results
Visit http://localhost:9090
Wait around 45 seconds for Prometheus to perform a Speedtest
Issue a query for download_speed_bps
You should see something like this.

Once prometheus_speedtest has been started, with either Docker or PyPi,
Speedtests can be instrumented with cURL.
$ curl localhost:9516/probe
# HELP download_speed_bps Download speed (bit/s)
# TYPE download_speed_bps gauge
download_speed_bps 88016694.95692767
# HELP upload_speed_bps Upload speed (bit/s)
# TYPE upload_speed_bps gauge
upload_speed_bps 3415613.277989314
# HELP ping_ms Latency (ms)
# TYPE ping_ms gauge
ping_ms 20.928
# HELP bytes_received Bytes received during test
# TYPE bytes_received gauge
bytes_received 111342756.0
# HELP bytes_sent Bytes sent during test
# TYPE bytes_sent gauge
bytes_sent 5242880.0
You can also visit http://localhost:9516 in your browser to see the same metrics.
Prometheus Speedtest defaults to running on port 9516; this is the allocated port for this exporter in the Prometheus Default Port Allocations Guide.
These instructions will get you a copy prometheus_speedtest up and running on
your local machine for development and testing purposes.
Ensure packages listed in
requirements.txt
are installed with pip
pip install -r requirements.txt
Run prometheus_speedtest
python -m prometheus_speedtest.prometheus_speedtest
Building image
docker build -t prometheus_speedtest:latest .
Running
docker run --rm -d --name prometheus_speedtest -p 9516:9516/tcp prometheus_speedtest:latest
curl localhost:9516/probe
Or visit http://localhost:9516
pytest
Pull requests are welcome. Please adhere to the Google Python style guide.
Please format your contributions with the yapf formatter and lint your code with pylint. A .pylintrc config has been provided.
yapf -i **/*.py
pylint **/*.py
Increment version number in version.txt
Create PyPi package
python3 setup.py sdist
Upload package to PyPi
Ensure that Twine has been installed.
twine upload dist/*
Ensure that Docker >= 19.03 and docker buildx is installed.
Build and push the new image.
# Ensure you have run 'docker login'
export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx create --use --name my-builder
docker buildx build --push --platform linux/amd64,linux/arm64,linux/arm/v7 \
-t jraviles/prometheus_speedtest:latest .
This product is licensed under the Apache 2.0 license. See LICENSE file for details.
Content type
Image
Digest
sha256:8e76a63f8…
Size
20.8 MB
Last updated
4 months ago
docker pull jraviles/prometheus_speedtest