Objetivos

 

  • Agregadores de contenido.
  • Telegraf, complemento a Influx BD.
  • Instalación y configuración de Telegrafr.[/three-fourth] [clear/]
  •  

    Material requerido.

     

     Vista mayor  Una Raspberry Pi
    personal computer  Un PC

     

    Telegraf e Influx DB

    &nbsp:

    Llevamos ya un camino recorrido en esta serie de tutoriales sobre como montar un servidor IOT para crear un servidor que nos permita recolectar información de fuentes diversas, el servidor MQTT, y guardarla en un servidor de Bases de datos (Influx en nuestro caso). Lo que nos falta ahora mismo es una forma de llevar los datos que recolectamos desde El broker Mosquitto a Influx de forma automática de modo que podamos registrar series más o menos largas de lecturas de nuestros sensores.

    Para poder meter las suscripciones que nos llegan desde MQTT a nuestra base de datos Influx, necesitamos un programa intermedio que lea del primero y escriba en el segundo. Como siempre hay varias maneras de llevar a cabo esta tarea. Podemos citar:

    • Un programa Python 3 que suscriba las publicaciones que nos interesas y las registre en Influx DB. (No es demasiado complicado y si hubiera interés ya tengo el programa hecho)
    • Si estas usando la Raspberry podemos usar una consola con suscripción a las publicaciones en cuestión, y un script del Shell para incorporarlas a Influx.
    • Un pequeño programa con Nodered, que suscriba Mosquitto en los tópicos adecuados y los almacene en Influx.
    • Montar y configurar Telegraf, un programa asociado a Influx DB, precisamente para recoger datos de fuentes diversas.

    Si. Lo habéis adivinado. Vamos a presentar y usar Telegraf, pero antes de que nadie salga corriendo, vamos a defender la elección (Aunque ninguna es mala). Como ya comentábamos en la sesión anterior, las bases de datos de series temporales, están diseñadas para recibir datos de sensores e información instantánea recolectados de fuentes diversas y en muchas ocasiones incompatibles entre sí por mil razones.

    Por eso los diseñadores de Influx decidieron crear un módulo externo que se pudiese configurar para recibir datos de entrada de una fuente o varias, por muy distinta procedencia y formato que estas pudieran ser, y a su vez especificar la salida a Influx, sí, pero también a otros destinos finales.

    Telegraf es precisamente eso. Un agregador de información que podemos configurar para recibir datos de múltiples fuentes y especificar múltiples salidas de una forma supuestamente sencilla (Ya os contaré) de modo que podamos integrar información dispersa en nuestra base de datos Influx por lo que a nosotros respecta en este momento.

    Aquí podéis ver los pluggins que acepta telegraf:  https://docs.influxdata.com/telegraf/v1.21/plugins

    Entre varias otras docenas de pluggins que permite y que no había oído mencionar en la vida podéis encontrar:

    • Amazon CloudWatch alarms, CloudWatch Statistics, ECS, Kinesis Consumer
    • Apache HTTP server, Apache Aurora, Consumer , Meos, Soir, TOMCAT, Zipkin, Zoekeeper…
    • Microsoft Azure
    • Cisco Model-driven Telemetry (MDT)
    • Google Cloud PubSub y Google Cloud PubSub Push
    • Y como otros 200 diferentes.  [/fancy-ul] [/three-fourth]

    Este es el motivo de que me haya decidido por Telegraf para recibir los datos de Mosquitto, porque acepta muchas más entradas de las que vamos a necesitar. Para Instalar Telegraf, vamos a necesitar tener instalado Influx DB, como ya hicimos en el último capítulo, y luego pasaremos a configurarlo. La arquitectura que estamos diseñando para recoger y explotar nuestros datos IOT sería la siguiente:

    Esquema de bloques

    Los sensores publican sus medidas de Temperatura, Humedad y CO2 en el Broker Mosquitto. Telegraf suscribe los tópicos que le indiquemos y guarda los datos en Influx DB. Posteriormente instalaremos y configuraremos Grafana, para leer de Influx y publicar gráficos de evolución de las lecturas o medidas, a lo largo del tiempo del modo que necesitemos.

    De este modo, los datos que leen nuestros sensores se unifican en una base de datos Influx y podemos explotarlos con comodidad. Ten en cuenta, además, que esos datos pueden llegarnos también desde otras fuentes, ahora desconocidas, pero disponemos de Telegraf para agregarlos y meterlos directamente a  Influx.

     

    Instalando Telegraf en Raspberry Pi

     

    Como siempre empezámos asegurándonos de que el sistema está al día:

    Sudo apt update
    Sudo apt upgrade

    Ahora ya podemos instalar Telegraf:

    sudo apt-get install -y telegraf

    Y ahora lo vamos a convertir en servicio de arranque automático, como siempre:

    sudo systemctl enable  telegraf
    sudo systemctl start  telegraf

    con esto ya deberíamos tener corriendo Telegraf. Puedes comprobarlo con la orden:

    sudo systemctl status  telegraf

    status del Telegraf como servicio

    Para salir pulsa [CTRL] + C

     

    Configurar Telegraf

     

    Como ya hemos comentado más arriba, Telgeraf se configura mediante uno de esos malditos ficheros de texto que tanto gustan en Linux y que son el infierno de los que empiezan, pero para complicar más las cosas, como Telegraf acepta unos 200 pluggins diferentes, el problema se multiplica por 200 tranquilamente y me ha estado mareando varios días hasta que he conseguido una configuración funcional (Mas o menos).

    Vamos a  crear un pequeño fichero de configuración de Telegraf, donde definiremos una entrada desde MQTT, con tópicos y usuario, y una salida a Influx directamente, lo mas sencilla posible. Te recomiendo que antes de empezar hagas una copia del fichero /etc/telegraf/telegraf.conf.

    La razón es que está tan lleno de líneas comentadas que es imposible encontrar nada y te pasarás la vida subiendo y bajando paginas a lo tonto. Simplemente haz una copia por si acaso y ahora editaremos el telegraf.conf y borraremos todo menos lo que vamos a usar.

    Abre una ventana de comandos y empezamos con:

    sudo su         (A partir de ahora todos los comandos tengan nivel de root)
    systemctl stop telegraf
    cd /etc/telegraf
    nano telegraf.conf    (O el editor que prefieras. Yo odio el Nano cordialmente)

    Lo primero que veras es una lista de infinitos parámetros de imposible comprensión, que resulta  indescifrable y que aunque están comentadas (Las que empiezan con”#”) no solo no tienen el menor sentido al empezar , sino que además solo sirven para que no vayas a encontrar las pocas líneas que necesitas.

    Por ese motivo te voy a recomendar que hagas, si quieres, una copia del fichero telegraf.conf para conservarlo y ahora vamos a borrar todo y dejar solo unas pocas líneas. Empecemos con algunas instrucciones básicas para el agente, en las que he dejado comentadas las líneas necesarias para generar un fichero de log que puede ser muy útil:

    [agent]
    round_interval = true
    
    metric_batch_size = 1000
    metric_buffer_limit = 10000
    collection_jitter = "0s"
    flush_jitter = "0s"
    precision = ""
    
    # logtarget = "file"
    # logfile = ""
    # logfile_rotation_interval = "0d"

    El telegraf.conf se gestiona a base de plugin de entrada, de donde leemos, y pluggins de salida: En donde guardamos las métricas. Empezamos con el Output, en nuestro caso Influx DB:

    # Configuration for sending metrics to InfluxDB
    [[outputs.influxdb]]
    
    urls = ["http://127.0.0.1:8086"]
    database = "test"
    skip_database_creation = false
    
    ## HTTP Basic Auth
    username = "charly"
    password = "contrase"

    En urls definimos la dirección IP el servidor de Influx DB, en mi caso la propia Raspberry por eso dejo la dirección de 127.0.0.1 que significa el equipo local, aunque podría poner la dirección real de mi Raspi 192.168.1.52.

    La siguiente línea data base, especifica que DB vamos a usar en Influx y la tercera es que no queremos crear la base de datos porque ya existe (La creamos nosotros en la última sesión)

    • En realidad, aquí he especificado una base de datos llamada “test” que no creamos anteriormente, por lo que convendría que antes de seguir, crees una BD con el nombre que desees y lo pongas aquí.
    • Si formas parte de la honorable hermandad de vagos, puedes simplemente crear una que se llame “test” y luego podrás copiar directamente las líneas de ejemplo que ponemos por aquí, pero… asegúrate de tener tu usuario y concederle todos los derechos en la BD en cuestión. 
    • Aunque seas de la hermandad de vagos, tendrás que cambiar el nombre del usuario con permisos y casi seguro que la contraseña, por los que tu hayas definido [/fancy-ul] [/three-fourth]

    Por último, tenemos que recordar que definimos autentificación para acceder a las BD Influx, por lo que tenemos que especificar el usuario y la pass que tendrá que usar Telegraf para conectar.

    • Como no hemos definidos SSL ni nada parecido, no tenemos que especificar claves de certificación, pero también irían aquí.

    Lo siguiente es definir el Input plugin que suscribirá los datos de Mosquitto:

    # # Read metrics from MQTT topic(s)
    [[inputs.mqtt_consumer]]
    servers = ["tcp://192.168.1.36:1883"]    #   ## Broker URLs for the MQTT server
    topics = [  "Prosensor/CO2",
    "Prosensor/Temp",
    "Prosensor/HUM", ]
    #qos = 2
    username = "charly"         ## Username and password to connect MQTT server.
    password = "contrase"
    data_format = "influx"

    De nuevo especificamos con server, la dirección IP y puerto de nuestro servidor Mosquitto y después, definimos los tópicos a suscribir. (Cuando algo como los topics viene entre corchetes, indica que es una lista y que podemos poner múltiples instancias)

    De nuevo, hemos requerido autentificación para conectar al servidor MQTT por lo que tenemos que suministrar el usuario y pass a telegraf. Y para terminar declaramos con la última línea que vamos a usar la sintaxis del intérprete de Influx para guardar los datos en contraposición a otras opciones como JASON, posibles. Aquí te dejo el fichero de configuración de arriba: telegraf.conf

    Solo nos queda guardar los cambios y arrancar el servicio de Telegraf. Puedes probar manualmente que no genera errores con:

    telegraf

    Y si todo va bien verás algo así:

    Consola de comandos

    Si todo ha ido bien sin errores, ya puedes salirte (Con [CTRL]+C) y arrancar Telegraf como servicio con

    systemctl start telegraf

    En la próxima sesión modificaremos el programa del ESP32 con el sensor de CO2 SCD41, para que escriba en el MQTT de modo que Telegraf pueda insertar las medidas en Influx DB, con la configuración que hemos preparado mas arriba.

     

    IMAGEN DE MARCA


    Deja una respuesta