Monta tu propio dashboard de Bitcoin con InfluxDB, Grafana y Python

Las bases de datos de series cronológicas (Time series Databases) pueden entenderse a grandes rasgos como motores de almacenamiento clave-valor donde la clave es un timestamp. Dicho de esta manera es fácil darse cuenta de los casos de uso principales para tecnologías como InfluxDB, Grafite y Prometheus, los cuales son bastante conocidos para datos como métricas de:

  • Uso de CPU
  • Consumo de Memoria
  • I/O de disco
  • Uso de red

Una de las herramientas más populares y mejor mantenidas del mercado es Grafana, que permite leer distintos Datasources para construir gráficas y dashboards muy interesantes.

Para este mini tutorial vas a necesitar tener docker y python 3 instalado en tu entorno de desarrollo.

Primero levantamos un contenedor de influxDB, con los puertos abiertos hacia nuestro host:

Luego hacemos lo mismo con un contenedor de grafana:

Una vez con ambos contenedores ejecutando correctamente podemos utilizar este snippet de python para escribir los datos a influxDB:

Ahora analizemos lo que está ocurriendo, primero importamos una librería de lectura de mercados de cryptomonedas, en este caso Bitfinex, también la librería de python de influxDB y un par de tools de manejos de fecha:

Luego damos de alta un cliente para comunicarnos con influxDB en el contenedor que hemos creado con docker antes:

Después de esto entramos en un bucle infinito, que cada 5 segundos genera un timestamp y obtiene el precio actual del Bitcoin en USD:

Finalmente creamos un payload con los datos necesarios para crear un registro en influx, lo enviamos al servidor, y dormimos al proceso 5 segundos:

Con el snippet anterior podemos también enviar muchos otros datos, como métricas del sistema utilizando psutils, o simplemente el precio de otras criptomonedas, pero vamos a lo divertido primero, abre un navegador y dirígete a http://localhost:3000 y deberías ver algo como esto:

Grafana-captura-login

El usuario es admin y la contraseña es admin, tras entrar verás algo como esto:

captura-de-pantalla-grafana

Hacemos click en Add Datasource, y rellenamos de la siguiente manera:

captura-de-pantalla-grafano

 

NOTA: Es importante ver 2 cosas, las credenciales de la base de datos en influx son ususario y password root, y en el snippet de python hemos nombrado a la base de datos como bitcoin_price.

Tras hacer click en Save and Test veremos algo como esto:

captura-de-pantalla-grafano

 

Por fin vamos a crear el dashboard, hacemos click en New Dashboard y veremos lo siguiente:

captura-de-pantalla-grafana

 

Seleccionamos Graph ya que la idea es dibujar la gráfica de precios del bitcoin y nos encontraremos con lo siguiente:

captura-de-pantalla-grafana

 

Hacemos click en el encabezado y luego en edit para entrar en la configuración del gráfico:

captura-de-pantalla-grafana

Debemos seleccionar como Datasource el que hemos creado antes (bitcoin) y seleccionar la métrica que estamos enviando desde python (btc_price_usd). También podemos rellenar los espacios entre medidas con proyección linear y ajustar la muestra a las últimas 3 horas en vez de las 6 por defecto. Además si hacemos click en General y los otros tabs podemos personalizar más el gráfico, para obtener algo así tras hacer click en Back to Dashboard:

captura-de-pantalla-grafana

Y ya estamos, el reto es que tras trastear un poco podáis poner algo así en una pantalla conectada en un raspberry pi con un poco de tiempo y paciencia:

captura-de-pantalla-grafana

Para el código de python, tómate la libertad de clonar y utilizar el siguiente repositorio (sin olvidarte de darle al Like y Subscribe o Star y Watch): https://github.com/rvegas/bitfana

Por: Ricardo Vegas

 

 

 

 

 

 

Ingeniero de Software, Master en Ingeniería Web. Especialista en microservicios y sistemas de alta disponibilidad, escalabilidad y desempeño. Experto en diferentes lenguajes de programación, metodologías de desarrollo y estrategias de trabajo.

Profesor del KeepCoding Bootcamp Big Data & Machine Learning

Si tienes algo que deseas compartir o quieres formar parte de JustCodeIt, escríbenos a [email protected].



Share this:

Leave a comment