Monitor Your Internet Speed with Speedtest Tracker

With Speedtest Tracker, you can monitor the internet speed of your connection.

Monitor Your Internet Speed with Speedtest Tracker-heroimage

Since the introduction of § 57 Abs. 4 TKG in December 2021 in Germany, users have the right to a reduction in monthly fees or an extraordinary ** termination** of the contract “in the case of a significant, continuous or regularly recurring deviation” between the promised and the actual performance. The German Federal Network Agency provides a desktop app for officially measuring the speed.

Speedtest Tracker

Independent of this, there’s an open-source program called Speedtest Tracker. It allows you to automatically and continuously monitor your internet speed. While the Federal Network Agency’s app should be used for official complaints, we’ll look at how to set up Speedtest Tracker for personal monitoring and documentation.

Preparation

First, you need a device with Docker and Docker-Compose installed. I recommend a server that’s directly connected to the router via cable. On this server, we’ll create three folders for configuration and the database, as well as a docker-compose.yml file.

mkdir speedtest-tracker
cd speedtest-tracker
mkdir data
mkdir keys
mkdir db
touch docker-compose.yml

Docker Compose File

networks:
    proxy:
        external: true
        name: proxy
    internal:
        external: false

services:
    speedtest-tracker:
        container_name: speedtest-tracker
        environment:
            - PUID=1000
            - PGID=1000
            - DB_CONNECTION=pgsql
            - DB_HOST=db
            - DB_PORT=5432
            - DB_DATABASE=speedtest_tracker
            - DB_USERNAME=speedy
            - DB_PASSWORD=password
            - TZ=Europe/Berlin
        volumes:
            - ./data:/config
            - ./keys:/config/keys
        image: lscr.io/linuxserver/speedtest-tracker:latest
        restart: unless-stopped
        networks:
            - internal
            - proxy
        depends_on:
            - db
    db:
        image: postgres:15
        restart: always
        environment:
            - POSTGRES_DB=speedtest_tracker
            - POSTGRES_USER=speedy
            - POSTGRES_PASSWORD=password
        volumes:
            - ./db:/var/lib/postgresql/data
        networks:
            - internal

The PUID and PGID should be set to your own user and group. Simply enter id in the terminal to determine these values. The timezone can be changed. The database password should be changed for both DB_PASSWORD and POSTGRES_PASSWORD.

Reverse Proxy

If you don’t have a reverse proxy on the server, the network configuration needs to be adjusted. In this case, port 80 of the Speedtest Tracker must also be exposed.

Otherwise, you can create a proxy host for the container. In the case of Caddy, it would look like this if you want to reach the Speedtest Tracker at https://speedtest.domain.com and it should only be accessible internally:

https://speedtest.domain.com {
    @blocked not remote_ip private_ranges
    respond @blocked 403
    reverse_proxy speedtest-tracker:80
}

Settings

After starting the containers, you can log into the Speedtest Tracker with the username admin@example.com and password password. You can change these in the settings. In the “General” settings, you’ll also find the option to configure a “Speedtest schedule”. Here, you need to use the cron format.

Examples:

*/30 * * * * # every 30 minutes
0 * * * *    # every hour
0 0 * * *    # every day at midnight
0 22 * * 1-5 # Monday to Friday at 10 PM
0 0 * * 0    # every Sunday at midnight
0 0 1 * *    # on the first of every month at midnight

Sample Data

The data can be exported as CSV. You can choose from the following columns to export:

  • “ID”
  • “IP address”
  • “Service”
  • “Service ID”
  • “Server name”
  • “Download”
  • “Upload”
  • “Ping”
  • “Packet loss”
  • “Download jitter”
  • “Upload jitter”
  • “Ping jitter”
  • “Upload latency high”
  • “Upload latency low”
  • “Upload latency avg”
  • “Download latency high”
  • “Download latency low”
  • “Download latency avg”
  • “Comments”
  • “Scheduled”
  • “Created at” sowie
  • “Uploaded at”

My setup: Vodafone Gigabit Cable Internet with 1000 Mbit/s download and 50 Mbit/s upload. The Speedtest Tracker ran every hour from 27.07.2024 00:00 to 27.09.2024 23:00. I exported and analyzed the data (1512 measurements):

  • 16 measurements had no internet connection, corresponding to an availability of 98.94%
  • Some Packets were lost in 206 measurements
  • The average download speed was 661.05 Mbit/s (median 722.71 Mbit/s)
  • The average upload speed was 49.37 Mbit/s (median 53.98 Mbit/s)
  • The average ping was 11.58ms (median 9.99ms)

There were no significant differences between the individual days of the week.

Day of WeekDownloadUploadPing
Monday624,6649,5211,43
Tuesday659,5048,9611,43
Wednesday656,7048,3712,26
Thursday678,8748,6511,83
Friday685,6448,5411,51
Saturday668,3051,0311,53
Sunday653,6550,5211,09

A slightly larger difference was noticeable between the hours. The download speed was highest at 8 PM and lowest at 3 AM.

HourDownloadUploadPing
00672,9549,7313,20
01331,9351,7510,17
02416,8952,1011,38
03229,8750,9913,13
04383,2750,0711,48
05657,5351,6314,19
06677,6850,5112,07
07670,9450,4412,01
08774,7146,6612,11
09794,9650,3510,65
10655,7846,0013,37
11810,3950,3812,19
12785,7147,7812,88
13690,1247,8512,62
14788,6946,5911,93
15809,3049,619,77
16593,8551,169,78
17794,6746,369,87
18707,3952,009,03
19752,6547,999,83
20843,6846,6910,83
21813,2446,7412,33
22527,6149,7411,72
23681,2751,6811,41

You can download my raw data here

Conclusion

Speedtest Tracker is a simple and effective tool for monitoring internet speed. The data can be easily exported and analyzed. The installation is straightforward and quickly done.


This website uses cookies. These are necessary for the functionality of the website. You can find more information in the privacy policy