Cómo monitorear la velocidad de conexión a Internet con InfluxDB v2
En este artículo, te muestro un template que hice y como lo uso para monitorear la velocidad de la conexión a Internet de mi casa.
Hace un par de semanas, programé un vivo para hacer en Youtube, llegaba la hora, preparé todo y cuando comienzo a hacer el streaming, todo se traba, literal, se me desconectaba a cada rato así que rápidamente me puse a tratar de diagnosticar. El resultado de ese diagnostico fue que la conexión andaba muy mal, tenía una tasa de descarga de 2 Mbps, cuando mi conexión es de 50 Mbps.
Si bien era un problema del proveedor, que se solucionó como a la hora, me dije, tengo que poder monitorear la velocidad de conexión y que me alerte, así, por lo menos, si me vuelve a suceder, puedo suspender o correr la hora del Live.
Así que me puse a armar un template para InfluxDB v2.0 que me permita monitorear y alertar sobre la velocidad de descargar y subida de mi conexión a Internet.
¿Qué necesitamos?
Antes de importar y trabajar sobre el template, necesitamos instalar la CLI de speedtest. Como en mi caso, uso Ubuntu, lo instalamos de la siguiente manera:
sudo apt-get install speedtest-cli
Una vez que esta instalado, vamos a probar como funciona y también, vamos a indicarle que el output de eso lo haga en JSON.
speedtest --json --single
Cuando lo ejecutamos "demora" un poco, pero es porque no nos muestra todo lo que esta haciendo, luego de unos segundos, nos devuelve algo como esto:
{"download": 5733544.287036977, "upload": 4793109.92348676, "ping": 19.541, "server": {"url": "http://190.103.82.4:8080/speedtest/upload.php", "lat": "-34.8667", "lon": "-57.8667", "name": "Berisso", "country": "Argentina", "cc": "AR", "sponsor": "Tecnologia Work Out", "id": "6873", "host": "190.103.82.4:8080", "d": 154.78797409173845, "latency": 19.541}, "timestamp": "2020-08-31T12:59:28.706882Z", "bytes_sent": 6053888, "bytes_received": 7217924, "share": null, "client": {"ip": "186.52.105.165", "lat": "-34.8576", "lon": "-56.1702", "isp": "Administracion Nacional de Telecomunicaciones", "isprating": "3.7", "rating": "0", "ispdlavg": "0", "ispulavg": "0", "loggedin": "0", "country": "UY"}}
En este testeo, la velocidad de descarga esta a pleno, pero algunas veces, esta misma velocidad, varia bastante y es por un tema de la CLI de Speed Test, pero para monitorear "mínimos" sirve.
Importemos el template
Ahora bien, vamos a importar el template, para eso, vamos a pasar algunos detalles como variables de entorno.
Primero, vamos a pasar nuestro token
$ export INFLUX_TOKEN="tu-token"
Lo siguiente, la organización
$ export INFLUX_ORG="tu-org"
El host de InfluxDB
$ export INFLUX_HOST="tu-host"
Una vez que esta todo esto definido, vamos a importar el template, para eso, ejecutaremos lo siguiente:
influx apply --file https://raw.githubusercontent.com/xe-nvdk/community-templates/master/speedtest/speedtest.yml
El resultado de eso, debería ser algo como esto:
LABELS +add | -remove | unchanged
+-----+------------------------+------------------+---------------+---------+-------------+
| +/- | METADATA NAME | ID | RESOURCE NAME | COLOR | DESCRIPTION |
+-----+------------------------+------------------+---------------+---------+-------------+
| | adoring-hellman-62a001 | 063c3b72ef0d1000 | speedtest | #0f0e15 | |
+-----+------------------------+------------------+---------------+---------+-------------+
| TOTAL | 1 |
+-----+------------------------+------------------+---------------+---------+-------------+
BUCKETS +add | -remove | unchanged
+-----+---------------------------+------------------+---------------+------------------+-------------+
| +/- | METADATA NAME | ID | RESOURCE NAME | RETENTION PERIOD | DESCRIPTION |
+-----+---------------------------+------------------+---------------+------------------+-------------+
| | blissful-antonelli-62a003 | 4b2e3ba5052af488 | speedtest | 0s | |
+-----+---------------------------+------------------+---------------+------------------+-------------+
| TOTAL | 1 |
+-----+---------------------------+------------------+---------------+------------------+-------------+
DASHBOARDS +add | -remove | unchanged
+-----+------------------------------+----+---------------+-------------+------------+
| +/- | METADATA NAME | ID | RESOURCE NAME | DESCRIPTION | NUM CHARTS |
+-----+------------------------------+----+---------------+-------------+------------+
| + | condescending-davinci-a2a001 | | Speedtest | | 4 |
+-----+------------------------------+----+---------------+-------------+------------+
| TOTAL | 1 |
+-----+------------------------------+----+---------------+-------------+------------+
TELEGRAF CONFIGURATIONS +add | -remove | unchanged
+-----+------------------+----+------------------+-------------+
| +/- | METADATA NAME | ID | RESOURCE NAME | DESCRIPTION |
+-----+------------------+----+------------------+-------------+
| + | speedtest-config | | speedtest-config | |
+-----+------------------+----+------------------+-------------+
| TOTAL | 1 |
+-----+------------------+----+------------------+-------------+
LABEL ASSOCIATIONS +add | -remove | unchanged
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
| +/- | RESOURCE TYPE | RESOURCE META NAME | RESOURCE NAME | RESOURCE ID | LABEL PACKAGE NAME | LABEL NAME | LABEL ID |
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
| | buckets | blissful-antonelli-62a003 | speedtest | 4b2e3ba5052af488 | adoring-hellman-62a001 | speedtest | 063c3b72ef0d1000 |
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
| + | dashboards | condescending-davinci-a2a001 | Speedtest | | adoring-hellman-62a001 | speedtest | 063c3b72ef0d1000 |
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
| TOTAL | 2 |
+-----+---------------+------------------------------+---------------+------------------+------------------------+------------+------------------+
Confirm application of the above resources (y/n): y
Confirmamos la importación y deberíamos ver algo como esto:
LABELS
+------------------------+------------------+---------------+--------------------------------+---------+
| PACKAGE NAME | ID | RESOURCE NAME | DESCRIPTION | COLOR |
+------------------------+------------------+---------------+--------------------------------+---------+
| adoring-hellman-62a001 | 063c3b72ef0d1000 | speedtest | | #0f0e15 |
+------------------------+------------------+---------------+--------------------------------+---------+
| TOTAL | 1 |
+------------------------+------------------+---------------+--------------------------------+---------+
BUCKETS
+---------------------------+------------------+---------------+-----------+--------------------------------+
| PACKAGE NAME | ID | RESOURCE NAME | RETENTION | DESCRIPTION |
+---------------------------+------------------+---------------+-----------+--------------------------------+
| blissful-antonelli-62a003 | 4b2e3ba5052af488 | speedtest | inf | |
+---------------------------+------------------+---------------+-----------+--------------------------------+
| TOTAL | 1 |
+---------------------------+------------------+---------------+-----------+--------------------------------+
DASHBOARDS
+------------------------------+------------------+---------------+--------------------------------+
| PACKAGE NAME | ID | RESOURCE NAME | DESCRIPTION |
+------------------------------+------------------+---------------+--------------------------------+
| condescending-davinci-a2a001 | 063d2a2ec2ba5000 | Speedtest | |
+------------------------------+------------------+---------------+--------------------------------+
| TOTAL | 1 |
+------------------------------+------------------+---------------+--------------------------------+
TELEGRAF CONFIGS
+------------------+------------------+------------------+--------------------------------+
| PACKAGE NAME | ID | RESOURCE NAME | DESCRIPTION |
+------------------+------------------+------------------+--------------------------------+
| speedtest-config | 063d2a2ebe3a5000 | speedtest-config | |
+------------------+------------------+------------------+--------------------------------+
| TOTAL | 1 |
+------------------+------------------+------------------+--------------------------------+
LABEL ASSOCIATIONS
+---------------+---------------+------------------+------------+------------------+
| RESOURCE TYPE | RESOURCE NAME | RESOURCE ID | LABEL NAME | LABEL ID |
+---------------+---------------+------------------+------------+------------------+
| buckets | speedtest | 4b2e3ba5052af488 | speedtest | 063c3b72ef0d1000 |
+---------------+---------------+------------------+------------+------------------+
| dashboards | Speedtest | 063d2a2ec2ba5000 | speedtest | 063c3b72ef0d1000 |
+---------------+---------------+------------------+------------+------------------+
| TOTAL | 2 |
+---------------+---------------+------------------+------------+------------------+
Stack ID: 063d2a2ebc5e7000
Si se fijan, este template, trae el dashboard, un bucket y la configuración de Telegraf, esto último es lo que vamos a usar ahora mismo.
Comenzando a recolectar con Telegraf
Más arriba, les explicaba que este template incluía la configuración de Telegraf, así que, desde donde vamos a ejecutar los test, primero debemos especificar algunas variables de entorno.
Estás son, nuestro "INFLUX_TOKEN", "INFLUX_ORG" y "INFLUX_HOST", tal como hicimos más arriba.
Una vez que esto está hecho, vamos a la UI de InfluxDB, hacemos un clic en Data y luego en Telegraf. Ahí veremos nuestra configuración:
Si hacemos un click en Setup Instructions, veremos algo como esto:
telegraf --config http://localhost:9999/api/v2/telegrafs/063d2a2ebe3a5000
De esta manera, es como vamos a ejecutar Telegraf para comenzar a alimentar nuestro bucket y obviamente el dashboard.
$ telegraf --config http://localhost:9999/api/v2/telegrafs/063d2a2ebe3a5000
El resultado inmediato debería ser esto:
2020-08-31T13:29:56Z I! Starting Telegraf 1.15.2
2020-08-31T13:29:56Z I! Loaded inputs: exec
2020-08-31T13:29:56Z I! Loaded aggregators:
2020-08-31T13:29:56Z I! Loaded processors:
2020-08-31T13:29:56Z I! Loaded outputs: influxdb_v2
2020-08-31T13:29:56Z I! Tags enabled: host=sandbox
2020-08-31T13:29:56Z I! [agent] Config: Interval:1m0s, Quiet:false, Hostname:"sandbox", Flush Interval:10s
Después de dejarlo correr unos minutos, deberíamos ver algo como esto en nuestro Dashboard:
Para ir cerrando
Otra de las cosas que podemos hacer es configurar alertas y notificaciones para que nos avise cada vez que el resultado este por debajo, de, no se, 20Mb? o 30Mb?, eso dependerá de tu velocidad a Internet.
Otra cosa a tener en cuenta, es que no es recomendable hacer el test cada un minuto, lo ideal es hacerlo, no se, una vez por hora o como en mi caso, cada tres horas, de esa manera, no estamos matando Speedtest.net.
¿Te sirvió? ¿Qué te pareció?