Cómo monitorear la velocidad de conexión a Internet con InfluxDB v2

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ó?