Intruction
Sometimes you don't have a visual interface to execute a browser and use a internet speed test. In this tutorial we are going to explain how to measure internet speed using the command line. The software we are going to use is open source and is available here, it uses speedtest.net. The command speedtest-cli will test the internet connection to the closest server.
We will also save all speed test in a csv file to analize server bandwith. Note this tutorial will also work on OSX and Windows, since we will use a Python project called speedtest-cli.
Step 1: Install speedtest-cli
sudo apt update
sudo apt install python-pip
pip install speedtest-cli
If you have permission issues with pip, try to use the --user parameter
Step 2: Using speedtest command
After you install speedtest-cli you will have the command speedtest available.
speedtest
The execution of the command will output something like:
Retrieving speedtest.net configuration...
Testing from Digital Ocean (138.197.7.114)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Sprint (Harrison, NJ) [10.20 km]: 2.377 ms
Testing download speed................................................................................
Download: 3026.58 Mbit/s
Testing upload speed................................................................................................
Upload: 1849.93 Mbit/s
Saving a csv
The command speedtest has a parameter --csv which will print a new line (or row) that we will append to a file. Check the following example:
speedtest --csv
The output should be similar to:
10390,Speedtest.net,"New York City, NY",2018-06-22T04:34:29.945140Z,16.976263463593583,2.699,652996846.7973796,459352903.67766047,,138.197.7.114
In order to save historical data we are going to use cron. Create a new entry using the command crontab -e and append the following line:
*/5 * * * * speedtest --csv >> /home/usernamme/speedtest.csv 2>&1
The cron line above will execute the every five minutes the speedtest and append the new row to the speedtest.log file. Make sure you change the frequency on the cron to a bigger one to reduce bandwidth usage.
Plotting the hisitorical data
The easiest way is to open the csv with google docs and make a plot from there.
Use the following python script to plot the historical internet speed of your linux server:
10390,Speedtest.net,"New York City, NY",2018-06-22T04:34:29.945140Z,16.976263463593583,2.699,652996846.7973796,459352903.67766047,,138.197.7.114
import pandas as pd
from datetime import datetime
import csv
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
headers = ['Server ID', 'Sponsor', 'Server Name', 'Timestamp', 'Distance',
'Ping', 'Download', 'Upload', 'Share', 'IP Address']
df = pd.read_csv('/home/username/speedtest.csv',names=headers)
print (df)
df['Timestamp'] = df['Timestamp'].map(lambda x: datetime.strptime(str(x), '%Y/%m/%d %H:%M:%S.%f'))
x = df['Timestamp']
y = df['Download']
# plot
plt.plot(x,y)
plt.gcf().autofmt_xdate()
plt.show()
Out plot scripts uses pandas to read the csv file. We use headers varible to define column names. We then choose timestamp and download as x and y series for out plot. You can also plot Upload instead.
That's all, please leave a comment if you want to improve our internet speed tutorial or if you have any doubts.