In this post we will implement an Internet connection monitor using prometheus. We will use speedtest.net to periodically run speed tests and feed results into prometheus. This post only outlines the functionality and assumes a certain amount of knowledge with docker, k8s, prometheus and grafana.
This is the high level game plan. We will:
In order to achieve all that we assume a working installation of Prometheus (with pushgateway installed and configured as a target), a private image registry and a grafana installation.
Prometheus pushgateway is used as a workaround method of ingesting metrics. Scripts can push metrics to prometheus pushgateway. The gateway then exposes a prometheus-compatible page that displays all data received. Prometheus then scrapes this page and ingests all metrics.
Be sure to read up the documentation about the pushgateway and when to use it.
All code can be found in this Github repository.
$ docker run -ti --rm --name speedtest speedtest:1 -e SERVERID=<SERVER_ID> -e PROJECTNAME=<PROJECT_NAME>
Be sure to substitute <SERVER_ID> with a server of your choice and <PROJECT_NAME> with something relevant.
Now that you have tuned all settings you can create the final docker image and push it to your private registry.
Once you have done that you can use the sample yaml file to deploy a cronjob that will invoke this process periodically. Just make sure to update all relevant values in speedtest.yaml to your liking before applying.
Once the cronjob runs it will push all metrics to Prometheus pushgateway. Now you can create your grafana dashboard. A sample one has been provided here. Once more, adjust all settings to your liking and have fun!
This is the end result: