Mein Blog

Kontinuierlicher Speedtest / Raspberry Pi

Möchte man kontinuierlich einen Speedtest durchführen, konnte ich bis vor wenigen Monaten den Speedtest bei UniFi nutzen. Leider lassen die jetzt den Speedtest nur noch aller 12h zu – damit ist das ganze zum Monitoren etwas obsolet. Da muss was neues her

Speedtest.net bietet seit neustem eine speedtest-cli an womit man den Test auf einer bash durchführen kann. Das Ergebnis will ich später in einer InfluxDB übertragen. Und um das ganze zu kapseln verwende ich dabei Docker.

Visualisierung mittels Grafana aus der InfluxDB

Es geht also damit los, dass man das Dockerfile anlegen muss. Das muss man in zwei Schritten machen. Beim ersten Start von speedtest-cli wird ein Token abgerufen und lokal gespeichert. Den muss man später noch mit rein kopieren.

FROM arm32v7/debian

RUN apt-get -y update \
     && apt-get -y install gnupg1 apt-transport-https dirmngr curl

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61 \
     && echo "deb https://ookla.bintray.com/debian buster main" | tee  /etc/apt/sources.list.d/speedtest.list

RUN apt-get update && apt-get -y install speedtest

RUN mkdir -p /root/.config/ookla/
ADD assert/speedtest-cli.json /root/.config/ookla/
ADD assert/start.sh /root/start.sh
ADD assert/createMeasure.sh /root/createMeasure.sh
WORKDIR /root

CMD ["./start.sh"] 

Wir bauen uns also von einem Standard arm32 v7 Debian Image das Image. Dazu bbrauchen wir diverse Pakete zum installieren und fügen dann den Server von Ookla hinzu. Die Zeilen ab “mkdir…” lässt man am Anfang weg 😃 Nach dem ersten build startet mal mit diesem Image ein Container und startet “speedtest” – bestätigt die ganzen Fragen und es wird in /root/.config/ookla eine speedtest-cli.json erstellt. Diese muss man nun in einem 2. Terminal Fenster mit docker cp raus kopieren oder man lässt sich einfach den Inhalt anzeigen und erstellt lokal die Datei. Ich habbe diese ins Verzeichnis “assert” gelegt.
Jetzt kann der Rest auch rein.

Inhaltsverzeichnis

Toggle

start.sh

Da der Speedtest kontinuierlich laufen soll gibt es den Einstiegspunkt start.sh wo nichts anderes passiert als Speedtest starten, warten und das ganze wiederholen:

#!/bin/bash
while true
do
./createMeasure.sh
sleep 600
done 

Die eigentliche Messung und übertragung in die InfluxDB findet dann in der createMeasure.sh statt:

#!/bin/bash

# Ausgabe Datei löschen und neu anlegen
rm -f output.txt
touch output.txt

# Speedtest ausführen, Ausgabe als csv und umleiten in die output.txt
speedtest  --format=csv > output.txt
  
# alle Ergebnisse speichere ich noch zusätzlich 
FILENAME=html/`date +'%Y'`-`date +'%m'`_measure.csv
echo Schreibe nach $FILENAME

LASTLINE=`cat output.txt`
echo $LASTLINE >> $FILENAME
echo Ergebnis\r\n$LASTLINE
 
# Auslesen von PING, Download (DL) und Upload (UL) aus der CSV - Kommawerte werden gelöscht.
PING=`echo $LASTLINE |sed -r 's/"//g' | cut -d"," -f3 |cut -d"." -f1`
DL=`echo $LASTLINE |sed -r 's/"//g' | cut -d"," -f6 |cut -d"." -f1`
UL=`echo $LASTLINE |sed -r 's/"//g' | cut -d"," -f7 |cut -d"." -f1`
 
# DL und UL sind Bit/s und müssen in Byte/s umgerechnet werden
DL=`expr $DL \* 8`
UL=`expr $UL \* 8`
 
# Aufbereiten der Anfragen an Influx
DATA1="Speedtest Ping=$PING"
DATA2="Speedtest Download=$DL"
DATA3="Speedtest Upload=$UL"
 
# Senden. Meine Datenbank heißt hier Hausdaten und die Sammlung Speedtest
echo -e "Sending Data\n$DATA1"
curl -i -XPOST 'http://192.168.103.2:8086/write?db=Hausdaten' --data-binary "$DATA1"
 

echo -e "Sending Data\n$DATA2"
curl -i -XPOST 'http://192.168.103.2:8086/write?db=Hausdaten' --data-binary "$DATA2"
 

echo -e "Sending Data\n$DATA3"
curl -i -XPOST 'http://192.168.103.2:8086/write?db=Hausdaten' --data-binary "$DATA3" 

Docker-compose

Das ganze jetzt noch als docker-compose.

version: "3"
 services:
   speedtest:
     build:
       context: .
     image: speedtest
     volumes:
       - './html/:/root/html/'
     restart: always
     network_mode: "host" 

Das Volume ist dafür da, dass ich die Messwerte nach Monat getrennt raus bekomme als CSV. Zusätzlich werden die Werte ja auch an die InfluxDB übertragen.

Und wer jetzt noch nicht genug hat, kann das ganze natürlich noch auf einem mini-Display visualisieren 😀 https://www.blogyourearth.com/computer/raspberry-pi-internet-geschwindigkeit-monitor/10106

(c) BlogYourEarth https://www.blogyourearth.com/computer/raspberry-pi-internet-geschwindigkeit-monitor/10106
Die mobile Version verlassen