Geïnspireerd door Grafana ben ik eens gaan kijken wat ik nog meer wilde meten om daar een goed inzicht in te krijgen. Ik kwam al snel bij mijn Internet snelheid uit. Ik heb de informatie van de volgende link gebruikt om dit voor elkaar te krijgen. Ik ga er vanuit dat je Influx en Grafana al geïnstalleerd hebt.

Voeg eerst een nieuwe database toe aan Influx om je Internet Snelheid metingen in op te slaan. Dit doe je door de volgende commando’s:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
influx -username admin -password your-password
CREATE DATABASE InternetSpeed
exit
influx -username admin -password your-password CREATE DATABASE InternetSpeed exit
influx -username admin -password your-password
CREATE DATABASE InternetSpeed
exit

Installeer hierna de speedtest-cli package:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
apt-get install speedtest-cli
apt-get install speedtest-cli
apt-get install speedtest-cli

Creëer een python script met de volgende inhoud:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import datetime
import logging
import os
import speedtest
import time
from influxdb import InfluxDBClient
logging.basicConfig(level=logging.INFO)
current_dir = os.path.dirname(os.path.abspath(__file__))
influxdb_host = "192.168.1.25"
influxdb_port = 8086
influxdb_database = "InternetSpeed"
def persists(measurement, fields, time):
logging.info("{} {} {}".format(time, measurement, fields))
influx_client.write_points([{
"measurement": measurement,
"time": time,
"fields": fields
}])
influx_client = InfluxDBClient(host=influxdb_host, port=influxdb_port, database=influxdb_database)
def get_speed():
logging.info("Calculating speed ...")
s = speedtest.Speedtest()
s.get_best_server()
s.download()
s.upload()
return s.results.dict()
def loop(sleep):
current_time = datetime.datetime.utcnow().isoformat()
speed = get_speed()
persists(measurement='download', fields={"value": speed['download']}, time=current_time)
persists(measurement='upload', fields={"value": speed['upload']}, time=current_time)
persists(measurement='ping', fields={"value": speed['ping']}, time=current_time)
time.sleep(sleep)
loop (1)
import datetime import logging import os import speedtest import time from influxdb import InfluxDBClient logging.basicConfig(level=logging.INFO) current_dir = os.path.dirname(os.path.abspath(__file__)) influxdb_host = "192.168.1.25" influxdb_port = 8086 influxdb_database = "InternetSpeed" def persists(measurement, fields, time): logging.info("{} {} {}".format(time, measurement, fields)) influx_client.write_points([{ "measurement": measurement, "time": time, "fields": fields }]) influx_client = InfluxDBClient(host=influxdb_host, port=influxdb_port, database=influxdb_database) def get_speed(): logging.info("Calculating speed ...") s = speedtest.Speedtest() s.get_best_server() s.download() s.upload() return s.results.dict() def loop(sleep): current_time = datetime.datetime.utcnow().isoformat() speed = get_speed() persists(measurement='download', fields={"value": speed['download']}, time=current_time) persists(measurement='upload', fields={"value": speed['upload']}, time=current_time) persists(measurement='ping', fields={"value": speed['ping']}, time=current_time) time.sleep(sleep) loop (1)
import datetime
import logging
import os
import speedtest
import time
from influxdb import InfluxDBClient

logging.basicConfig(level=logging.INFO)

current_dir = os.path.dirname(os.path.abspath(__file__))

influxdb_host     = "192.168.1.25"
influxdb_port     = 8086
influxdb_database = "InternetSpeed"

def persists(measurement, fields, time):
    logging.info("{} {} {}".format(time, measurement, fields))

    influx_client.write_points([{
        "measurement": measurement,
        "time": time,
        "fields": fields
    }])

influx_client = InfluxDBClient(host=influxdb_host, port=influxdb_port, database=influxdb_database)

def get_speed():
    logging.info("Calculating speed ...")
    s = speedtest.Speedtest()
    s.get_best_server()
    s.download()
    s.upload()

    return s.results.dict()

def loop(sleep):
    current_time = datetime.datetime.utcnow().isoformat()
    speed = get_speed()

    persists(measurement='download', fields={"value": speed['download']}, time=current_time)
    persists(measurement='upload', fields={"value": speed['upload']}, time=current_time)
    persists(measurement='ping', fields={"value": speed['ping']}, time=current_time)

    time.sleep(sleep)

loop (1)

Je moet in bovenstaande script zelf nog je ‘influxdb_host’, ‘influxdb_port’ en ‘influxdb_database’ gegevens aanpassen naar jouw Influx situatie.

Dit script moet je regelmatig aanroepen door een cron job te creëren. Ik gebruik daarvoor het volgende commando in mijn cron job:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/usr/bin/python /home/henri/measure_internet.py & > /dev/null
/usr/bin/python /home/henri/measure_internet.py & > /dev/null
/usr/bin/python /home/henri/measure_internet.py & > /dev/null

(hierbij is de naam van mijn script ‘measure_internet.py’ en is dit opgeslagen in de ‘/home/henri’ directory)




Configureer in Grafana je database bij ‘Data Sources’



Tenslotte heb ik een Dasboard aangemaakt in Grafana die de gemeten waardes mooi presenteert:



Vooral de heat-map is handig om zo snel je gemiddelde download- en upload snelheden te zien.