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:

influx -username admin -password your-password
CREATE DATABASE InternetSpeed
exit

Installeer hierna de speedtest-cli package:

apt-get install speedtest-cli

Creëer een python script met de volgende inhoud:

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:

/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.