Docker container(s) which tracks latency of one or many hosts and reports to InfluxDBv2.
This docker container is able to track the latency of one or many targets and reports all data to a given InfluxDBv2.
It´s based on python3 an makes usage of following python libraries:
- pythonping
- influxdb_client
- threading
- sys
- os
- datetime
- configparser
- time
You can use it in standalone or full stack mode.
Standalone:
- Just the latency-monitor container which sends data to an external InfluxDB2 Server
Full Stack:
- Traefik container as Proxy (full TLS support)
- InfluxDB2 container, fully setup and ready to take data
- Grafana container, fully setup and connected (but without dashboards)
- latency-monitor container sending data to the InfluxDB2 container
- Docker (CE)
- Docker-Compose
- InfluxDB Version >= 2
- pythonping needs root privileges so same for the container
Configuration can be passed via ENV OR configuration file.
In case of using the ENV option you are just able to monitor ONE target for more targets please use the configuration file.
Also some influx connection options are just configurable via config file but normally they are not needed.
Per default the used python influxdb connector will cache all replies and sends them bundled every 30 seconds to the Influx DB.
Actually the latency-monitor container is build on demand, a dockerhub image is on the roadmap...
You can find everything under ./Docker_Build/ and in the python program itself latency_monitor.py
Name | Example | Usage | Option/Must | Type | Default |
---|---|---|---|---|---|
INFLUX_URL | http://10.0.0.1:8086 | InfluxDB Host | must | URL | --- |
INFLUX_TOKEN | eWOcp-MCv2YPlER7wc...0zRNnrIoTqZAg== | InfluxDB API Token | must | String | --- |
INFLUX_BUCKET | latency | InfluxDB Bucket | must | String | --- |
INFLUX_ORG | MyOrg | InfluxDB Organization | must | String | --- |
TARGET_HOST | 8.8.8.8 | Monitored Host (IP/FQDN) | must | FQDN or IP | --- |
TARGET_TIMEOUT | 0.5 | ping timeout in sec. | optional | Float >0 | 1 |
TARGET_TIMER | 3 | ping frequency in sec. | optional | Int >1 | 5 |
TARGET_LOCATION | decript. location | optional | String | unknown |
Instead of using the ENV variables you can use a config file.
Keep in mind it´s a OR decision not a AND
See ./latency-monitor/config-template.ini
ENV wins over file
uncomment:
# - ./latency-monitor/config.ini:/app/config.ini:ro # UNCOMMENT IF NEEDED
docker latency-monitor -v ./latency-monitor/config.ini:/app/config.ini:ro
1st thing to do is creating the docker-compose.yml from docker-compose-standalone.yml:
cp docker-compose-standalone.yml docker-compose.yml
Below paragraph:
####################################################
# LATENCY-MONITOR
####################################################
in the .env file (env needs to be renamed to .env) configure following variables:
- YOUR_ORGANIZATION
- YOUR_BUCKET_NAME
- YOUR_ADMIN_TOKEN
- YOUR_MONITORED_TARGET
- YOUR_MONITORED_TARGET_TIMEOUT
- YOUR_MONITORED_TARGET_TIMER
- YOUR_MONITORED_TARGET_LOCATION
docker-compose up -d latency-monitor
should do the job
Have a look at ./setup-full_stack.sh
Just create a valid .env File by:
cp env .env
and edit it to your needs.
After everyting within .env is in order just do:
./setup-full_stack.sh
Everything should be right in place now.
Just the certificates are missing look here
Now run it and mybe pick a example dashboard for grafana from here
The script will backup following files if found:
- ./docker-compose.yml
- ./grafana/provisioning/datasources/grafana-datasource.yml
REALLY???
You need to set all on your own:
You need to configure Variables in following files to make the compose work:
- file
- VARIABLE1
- VARIABLE2
- VARIABLE3
- docker-compose.yml (generated from docker-compose-full_stack.yml)
- PLACE_YOUR_FQDN_HERE (3 times)
- .env (env needs to be renamed to .env)
- YOUR_PATH_TO_CONTAINER_STATIC_DATA
- YOUR_ADMIN_USER
- YOUR_ADMIN_PASSWORD
- YOUR_ORGANIZATION
- YOUR_BUCKET_NAME
- YOUR_ADMIN_TOKEN
- YOUR_MONITORED_TARGET
- YOUR_MONITORED_TARGET_TIMEOUT
- YOUR_MONITORED_TARGET_TIMER
- YOUR_MONITORED_TARGET_LOCATION
- grafana/provisioning/datasources/grafana-datasource.yml (generated from grafana/grafana-datasource-template.yml)
- YOUR_ADMIN_TOKEN
- YOUR_ORGANIZATION
- YOUR_BUCKET_NAME
Because we are configuring grafana for permanent data storing and grafana actually runs with UID + GID: 472:472 it´s necessary to change permisson of die permanent storage directory we have configured.
The directory build from the following config part of grafana within the docker-compose.yml:
${MyPath}/grafana/var_lib
MyPath was configured earlier in the .env file.
so let´s assume the following:
MyPath = /opt/docker/containers/
then you have to do the following
chown -R 472:472 /opt/docker/containers/grafana/var_lib
Everything should be right in place now.
Just the certificates are missing look here
Now just start over and maybe pick an example dashboard for grafana from here
Traefik will act as a proxy and ensures the usage of TLS so it needs your certificate and key file.
within the docker-compose.yml you will find:
- ./traefik/mycert.crt:/certs/cert.crt:ro
- ./traefik/mycert.key:/certs/privkey.key:ro
so please place your certificate file as ./traefik/mycert.crt and the key file as ./traefik/mycert.key.
Thats it
Within the local path ./examples/grafana/ you can find example .json files which can be imported to grafana as dashboards to give you a first point to start with.
Contributors names and contact info
-
v0.4a
- fixed tag recognition for buildprocess
-
v0.4
- moved from self build iamge to dockerhub
-
v0.3a
- ping timeout added
- cleanup
-
v0.3
- setup-script fixed and backup added
- fixed latency value problem (was sometimes string instead of float)
- cleanup
-
v0.2b
- cleanup
-
v0.2a
- fixed some missing variables
- fixe a missing integer declaration in latency-monitor
- added automatic config creation for full-stack
- cleanups
-
v0.1
- Initial Release
free to use