Instalación y primeros pasos con InfluxDB en Ubuntu 18.04
¿Qué es InfluxDB?
InfluxDB, desarrollada por influxdata, es una base de datos basada en series de tiempo (time-series database). Este tipo de bases de datos ha experimentado un crecimiento exponencial los últimos años, con la popularización de IoT, Big Data y otras tecnologías que recogen mucha información en el tiempo. Se necesita un sistema que maneje de forma eficiente esas series de datos, con miles de datos por segundo, y de los que necesitamos hacer cálculos y agregar información de manera eficiente, tales como medias, máximos, búsquedas en el tiempo, etc, y todo ello en tiempo real. Dentro de esta categoría, InfluxDB es una base de datos que supera a los esquemas SQL y NoSQL, permitiendo hacer análisis de miríadas de datos en tiempo real y dando una ventaja competitiva a las empresas que la emplean.
Esta base de dastps te permite trabajar con millones de puntos de datos, clasificados en el tiempo, y gracias a trabajar en clúster puede devolver resultados en tiempo real con una alta precisión en el tiempo. Además, en su versión comunitaria, es una base de datos de código abierto (open source), lo que permite a la comunidad trabajar con ella de manera gratuita. Algunas características, sin embargo, dependen de la versión empresarial, y como todas las bases de datos comerciales tienen un precio elevado, pero aun así permiten a las empresas ahorrar en costes de almacenamiento y procesamiento, por lo cual esta base de datos está en el mercado para quedarse. Posee un completo ecosistema que permite recoger, almacenar y tomar decisiones en base a los datos que recibe, con posibilidad de generar gráficos, alertas y notificaciones en tiempo real.
Contenidos
Instalando InfluxDB
En la página https://portal.influxdata.com/downloads podremos descargar esta base de datos y algunas herramientas asociadas, como Telegraf (para adquirir información de nuestros servidores), Chronograf (para visualizar nuestras series de datos) y Kapacitor (para procesar las series de datos de manera inteligente, generando alertas y eventos).
Si bien nos centraremos en su instalación y manejo en Ubuntu, los contenidos de este artículo se pueden utilizar para otros sistemas operativos, tales como OS X, Debian, RedHat, CentOS, Windows, cualquier «flavour» de Linux e incluso contenedores Docker. La imagen siguiente te dará una idea de su instalación en los distintos sistemas.
Los comandos para la instalación son muy sencillos, y están descritos en la página de instalación:
nociones@nociones:~$ wget https://dl.influxdata.com/influxdb/releases/influxdb_1.5.0_amd64.deb nociones@nociones:~$ sudo dpkg -i influxdb_1.5.0_amd64.deb
Una vez instalada, la base de datos está aún parada, y necesitaremos arrancarla. En el siguiente apartado te mostramos las operaciones más comunes:
Operaciones más comunes con InfluxDB
Ver el estado en el que está la base de datos
nociones@nociones:~$ systemctl status influxdb ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: https://docs.influxdata.com/influxdb/
Poner la base de datos en marcha
Es recomendable después de lanzar el comando para arrancarla, que hagamos un «status» para ver que ha arrancado correctamente.
nociones@nociones:~$ systemctl start influxdb nociones@nociones:~$ systemctl status influxdb ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-03-14 20:05:12 CET; 6s ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 5729 (influxd) Tasks: 7 (limit: 4915) CGroup: /system.slice/influxdb.service └─5729 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
Parar la base de datos
nociones@nociones:~$ sudo systemctl stop influxdb
Reiniciar el servicio
nociones@nociones:~$ sudo systemctl restart influxdb
Recargar la configuración
En el momento que escribimos estas líneas, influxdb no implementa un «reload» de la configuración sin detener la base de datos, por lo que la forma más común para recargar la configuración es reiniciar el servicio.
nociones@nociones:~$ sudo systemctl restart influxdb
Fichero de configuración
El fichero de configuración de influxdb se encuentra en /etc/influxdb/influxdb.conf
Primeros pasos con InfluxDB
Vamos a hacer un pequeño recorrido por el acceso a la consola de InfluxDB, y como podemos crear una base de datos, acceder a ella, insertar algunos puntos de datos y hacer un query sobre ellos.
Conectar con la consola de influx
nociones@nociones:~$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.5.0
InfluxDB shell version: 1.5.0
>
Crear una base de datos para almacenar información
CREATE DATABASE nociones;
Mostrar las bases de datos
Observarás que, junto con nuestra base de datos creada, existe una base de datos _internal, que se emplea para manejo interno y estadísticas de la propia base de datos.
> show databases name: databases name ---- _internal nociones
Empezar a trabajar con una base de datos
> use nociones Using database nociones >
Cómo se organizan los datos en InfluxDB
La información en InfluxDB está organizada en series de datos («time series), que contienen un valor de medición, tales como cpu_load, temperatura, altitud, presión, etc. Cada serie de datos puede tener cero o más puntos de datos, uno por cada muestra. Los puntos se definen por un timestamp (si no introducimos ningún timestamp, la base de datos tomará la hora actual del servidor, por lo que es recomendable tener nuestro Ubuntu conectado a un servidor de tiempo ntp), una medida («temperatura», por ejemplo), al menos un campo «key-value»(clave y valor), que representan la medida en sí misma (por ejemplo, «temperatura_dentro=21.2») y etiquetas (opcionales), que contienen metadata dobre el valor (por ejemplo, «edificio=Valencia», «laboratorio=análisis»).
Si estás acostumbrado al esquema SQL, puedes pensar conceptualmente en una medida como una tabla SQL, donde la clave primaria es siempre el tiempo, y las etiquetas y los campos son columnas en la tabla. Los campos están indexados, mientras que los campos no lo están.
La diferencia con SQL es que, con InfluxDB, puedes tener millones de mediciones, no necesitas definir esquemas por adelantado, y los valores «null» no se almacenan. Los puntos se almacenan siquiendo el protocolo «line», que sigue el siguiente formato:
<medida>[,<etiqueta-key>=<etiqueta-value>...] <campo-key>=<campo-value>[,<campo2-key>=<campo2-value>...] [unix-nano-timestamp]
Mira algunos ejemplos sacados de la página de documentación de InfluxDB:
cpu,host=serverA,region=us_west value=0.64 payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 stock,symbol=AAPL bid=127.46,ask=127.48 temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
¿Aún no te queda claro? ¡No te preocupes! Vamos a realizar un ejemplo paso a paso para que veas qué sencillo es almacenar los valores. Si bien lo realizaremos desde la consola, estas mismas llamadas se pueden realizar por http, o con algún cliente basado en los lenguajes de programación más populares (Java, Python, Go, JavaScript, Scala, Ruby, Python, .Net, etc).
Almacenar los primeros valores
Ahora que estamos conectados a una base de datos, podemos empezar a almacenar datos y realizar consultas.
Vamos a almacenar la temperatura interna y externa de un laboratorio
INSERT temperatura,laboratorio=análisis,tipo=ambiente externa=25,interna=37
Ya has insertado un valor. Ahora, cambia los valores de temperatura externa e interna y vuélvelos a insertar, y así un par de veces. ¿Ves qué sencillo le resultaría a una aplicación externa almacenar los datos?
Mostrar los valores
El sistema de consulta es similar al SQL, si bien está un poco más orientado a series de datos. Para nuestro ejemplo, realicemos una consulta muy sencilla:
> select * from temperatura name: temperatura time externa interna laboratorio tipo ---- ------- ------- ----------- ---- 2018-03-14T21:34:35.840308804Z 25 37 análisis ambiente 2018-03-14T21:35:18.008490765Z 25 37 análisis ambiente 2018-03-14T21:35:26.304416097Z 29 36 análisis ambiente
Observa cómo el timestamp se ha añadido automáticamente.
Usemos un par de funciones, máximo y media, para ilustrar lo sencillo que es hacer cálculos:
> select min(interna) from temperatura name: temperatura time min ---- --- 2018-03-14T21:35:26.304416097Z 36
> select mean(externa) from temperatura name: temperatura time mean ---- ---- 1970-01-01T00:00:00Z 26.333333333333332
De momento eso es todo, en futuros artículos realizaremos algunos proyectos interesantes con esta base de datos.
¿Te ha quedado alguna duda? ¡Te esperamos en los comentarios!
Hola!
Quería agradecerte la cantidad de conocimiento que compartes. Gracias. Me está sirviendo de mucha ayuda con Influx.
Hola muy buen articulo me interesa mucho lo de grafana y telegraf en especial como se maneja la base de datos te agradeceria mucho si me ayudas bueno a todos los interesados en eso. Nuevamente muchas gracias
Buenas tardes, buen artículo, para cuando esos proyectos interesantes con la base de datos ? Gracias por compartir con nosotros
Hola, gracias por tu comentario. Tenemos algunos artículos en el tintero en los que leemos sensores y guardamos sus datos con la raspberry, y algún otro para monitorizar parámetros del sistema u otras aplicaciones en combinación con grafana y telegraf. ¿Te interesa algún ámbito en concreto?
Hola, buen dìa, para exportar una base de influxdb como se podria realizar?
Pingback: Monitoriza tu sistema con telegraf, grafana e influxdb - Nociones.de