I use this speedtest.net command line interface tool to collect the data:
https://github.com/sivel/speedtest-cli
I also use a fast.com one:
https://github.com/branchard/fast-speedtest-api
I schedule that to run using cron, to dump the output into a file. Then I have a munin plugin that parses the results:
#!/bin/bash
case $1 in
config)
echo "graph_category wan"
echo "graph_title Speedtest"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel DL / UL"
echo "graph_scale no"
echo "graph_period hour"
echo "down.label DL"
echo "down.type GAUGE"
echo "down.draw LINE1"
echo "up.label UL"
echo "up.type GAUGE"
echo "up.draw LINE1"
echo "downfast.label DL fast.com"
echo "downfast.type GAUGE"
echo "downfast.draw LINE1"
echo "graph_info Graph of Internet Connection Speed"
exit 0;;
esac
OUTPUT=`cat /tmp/speedtest.out`
OUTPUTFAST=`cat /tmp/fast.out`
DOWNLOAD=`echo "$OUTPUT" | grep Download | sed 's/[a-zA-Z:]* \([0-9]*\.[0-9]*\) [a-zA-Z/]*/\1/'`
UPLOAD=`echo "$OUTPUT" | grep Upload | sed 's/[a-zA-Z:]* \([0-9]*\.[0-9]*\) [a-zA-Z/]*/\1/'`
DOWNLOADFAST=`echo "$OUTPUTFAST"`
echo "down.value $DOWNLOAD"
echo "up.value $UPLOAD"
echo "downfast.value $DOWNLOADFAST"
I also have a separate munin plugin for latency, from the same speediest.net data:
#!/bin/bash
case $1 in
config)
echo "graph_category wan"
echo "graph_title Ping"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel ping"
echo "graph_scale no"
echo "graph_period hour"
echo "down.label ping"
echo "down.type GAUGE"
echo "down.draw LINE1"
echo "down.max 1000"
echo "graph_info Graph of Internet Connection Ping"
exit 0;;
esac
OUTPUT=`cat /tmp/speedtest.out`
DOWNLOAD=`echo "$OUTPUT" | grep Ping | sed 's/[a-zA-Z:]* \([0-9]*\.[0-9]*\) [a-zA-Z/]*/\1/'`
echo "down.value $DOWNLOAD"
You should be able to get the speedtest-cli and fast-speedtest-api to run on Windows without too much effort. Munin doesn't run on Windows though, unless you can get it to work on the WSL stuff (I suspect that would be a bit painful, with all the cron stuff that needs to be in place for it to work).