Überwache deine Internetgeschwindigkeit mit dem Speedtest-cli von ookla
Die Firma Ookla hat am Oktober 2019 ihr eigenes speedtest-cli
vorgestellt mit diesem Blog-Artikel: https://www.speedtest.net/insights/blog/introducing-speedtest-cli/. Ookla betreib die bekannte speedtest.net Webseite.
Nach meinen Erfahrungen mit anderen speedtest-cli
Programmen, ist die Version von ookla sehr zuverlässig und dazu noch ressourcenschonend was die CPU anbelangt. Die Auswahl von Speedtest-Server ist jedoch eher klein und es werden nur Testserver im näheren Umkreis angezeigt.
speedtest-cli
kann man gut für die automatisierte Überwachung der Internetgeschwindigkeit einsetzen. Um speedtest-cli
mehrmals täglich auszuführen, kann ein cronjob eingerichtet werden. Das Ergebnis wird dann in eine .csv
-Datei geschrieben.
Speedtest cli von Ookla installieren
Hier findest du eine Anleitung zur Installation vom speedtest-cli von ookla: https://www.speedtest.net/de/apps/cli
Erster Durchlauf mit Kopfzeile für .csv-Datei
Um die Kopfzeile für die .csv
-Datei zu erzeugen, gibt es die Option --output-header
für das speetest-cli
:
> speedtest-cli -f csv --output-header >>/var/tmp/speedtests.csv
Die Kopfeile und der erste Speedtest wurden nun in die Datei /var/tmp/speedtests.csv
geschrieben. Für die spätere Verwendung mit Cronjob, fehlt jedoch noch ein Zeitstempel in der ersten Spalte. Somit sollte der erste Speedtest aus der Datei gelöscht und die Kopfzeile wie folgt angepasst werden:
> cat /var/tmp/speedtests.csv
"date time","server name","server id","latency","jitter","packet loss","download","upload","download bytes","upload bytes","share url"
Am Anfang der Kopfzeile wurde ein zusätzliche Spalte "date time",
eingefügt.
Cronjob einrichten
crontab -e
<– Editiert die crontab Datei des aktuellen Benutzers
Cronjob einrichten und Datei speichern:
# m h dom mon dow command
22 */4 * * * /bin/bash -c 'echo "\"$(date +\%d.\%m.\%Y\ \%H:\%M:\%S)\",$(/usr/bin/speedtest -f csv)" >>/var/tmp/speedtests.csv'
Mit diesem Befehl wird noch ein Zeitstempel im ersten Feld eingefügt und die ganze Zeile, samt Speedtest-Daten, in die Datei /var/tmp/speedtests.csv
gespeichert. Der cronjob läuft alle 3 Stunden in der 22. Minute (Beispiel: 00:22:00
Uhr, nächster Lauf wäre dann um 03:22:00
Uhr). Die Ausführungszeiten könnt ihr nach eurem belieben anpassen, siehe dazu: https://crontab.guru/
Nach einiger Zeit sieht dann die speedtests.csv
-Datei ungefähr so aus:
$ head /var/tmp/speedtests.csv
"date time","server name","server id","latency","jitter","packet loss","download","upload","download bytes","upload bytes","share url"
"22.03.2020 00:22:01","AltusHost B.V. - Zurich","24815","0.581","0.066","0","117958818","109795919","738752224","1526962782","https://www.speedtest.net/result/c/c4aeeb83-fbc0-41a0-a4c6-831964c57616"
"22.03.2020 03:22:01","Monzoon Networks AG - Zurich","15728","0.685","0.162","0","117456643","117409747","470529048","435360798","https://www.speedtest.net/result/c/404b9f22-5eca-46da-aaf7-45c7ee2c7c2d"
"22.03.2020 06:22:01","AltusHost B.V. - Zurich","24815","0.575","0.042","0","117449826","105577417","433868584","1121279222","https://www.speedtest.net/result/c/324ccefa-80e6-4084-9f77-52daec3ca9d9"
"22.03.2020 09:22:01","GTT.net - Zurich","24389","0.627","0.046","0","117015483","117486696","456632592","434263812","https://www.speedtest.net/result/c/015f930d-c382-4939-be74-9cb1f79dac6c"
"22.03.2020 12:22:01","iway AG - Zurich","3188","2.746","0.094","0","106040304","115995140","1423693152","729830144","https://www.speedtest.net/result/c/1d560a34-784e-4477-81db-e39600712b98"
…
Diagramm erstellen
Um die Daten in einem Diagramm dazustellen habe ich gnuplot
(http://www.gnuplot.info/) verwendet. Ihr müsst wahrscheinlich gnuplot
erst installieren, falls ihr es verwenden möchtet.
Damit gnuplot
im Terminal etwas ausgibt, muss dieses auf dumb
eingestellt werden.
set terminal dumb ansirgb feed enhanced size 120, 30 aspect 1;
gnuplot
kann am einfachsten mit einer Konfigurationsdatei genutzt werden. Die Konfigurationsdatei gnuplot_speedtest_data
sieht in meinem Beispiel so aus:
> cat gnuplot_speedtest_data
# Gnuplot for speedtests.csv
reset
set terminal dumb ansirgb feed enhanced size 128, 31 aspect 1;
set tics nomirror scale 0.5;
set autoscale;
set datafile separator ","
set title "Internetgeschwindigkeiten in Mbps\n[".strftime("%d.%m.%Y %H:%M:%S",time(0))."]"
set xlabel "Datetime" offset 0,-1 # label for the X axis
set xdata time
set timefmt "%d.%m.%Y %H:%M:%S"
set format x "%d.%m\n%H:%M" # Display date time format on graph
# Show last 48h
set xrange [time(0)-2*24*60*60:]
set ylabel "Mbps" offset character 2,0 # label for the Y axis
#set yrange [0:] # show whole range from zero
# change legend position
set key right below nobox
set grid
plot "/var/tmp/speedtests.csv" using 1:($7*8/1000/1000) with line title "Download", '' using 1:($8*8/1000/1000) with line title "Upload"
Dies zeichnet ein simples, ascii-basiertes Diagramm da ich direkt auf einem Server die Plots erstelle und kein X11 zu Verfügung habe. Es werden die letzten 48 Stunden angezeigt mit set xrange [time(0)-22460*60:]
. Plot erstellen in Bash:
gnuplot -p gnuplot_speedtest_data
Dies erzeugt folgendes Diagramm in Bash:
Es gibt viele verschiedene gnuplot
terminals, unter anderem mit Unterstützung für LaTeX und natürlich das .pdf
-Format. Für eine .pdf
-Version des obigen Diagramms, müsst ihr diese Zeile => set terminal dumb ansirgb feed enhanced size 128, 31 aspect 1;
in der gnuplot_speedtest_data
mit folgenden zwei ersetzen:
…
set terminal pdf # erzeugt ein pdf
set out "speedtest_diagramm.pdf" # Pfad und Name des PDFs
…
Gnuplot nochmals ausführen, dies erzeugt das speedtest_diagramm.pdf
im aktuellen Ordner:
gnuplot -p gnuplot_speedtest_data
Resultierendes speedtest_diagramm.pdf
(als Bild):
Gnuplot Terminal FAQ: How do I print out my graphs?
Mehr zu speedtest-cli
Ein interessanter und detaillierter Artikel (in Englisch) über speedtest-cli findest du hier: https://www.putorius.net/speed-test-command-line.html