Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

Installare InfluxDB + Grafana 

Sommario - Novità - Tutorial - Taccuino - Progetti - Risorse - Non solo elettronica

Installare InfluxDB + Grafana su Raspbian

A volte serve un database un poco più moderno di *Sql per gestire i propri dati. Un'alternativa è evidentemente MongoDB, ma se siete interessati a raccogliere serie temporali di dati probabilmente InfluxDB è la scelta migliore. Io lo sto sperimentando raccogliendo i dati raccolti da una rete di PIC-WL-Sen.

In questa pagina è descritto come installarlo su Raspberry Pi (o su Debian in generale).

Installazione

Pur essendo presente nel repository ufficiale Raspbian, ho deciso di installare dal sito ufficiale, per avere una versione più aggiornata (nota 1). I primi due passaggi potrebbero non essere necessari.

pi@rpi-audi:~ $ sudo apt-get install apt-transport-https
pi@rpi-audi:~ $ sudo apt-get install curl
pi@rpi-audi:~ $ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
pi@rpi-audi:~ $ echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
pi@rpi-audi:~ $ sudo apt-get update
pi@rpi-audi:~ $ sudo apt-get install influxdb

Per visualizzare i dati via browser ho usato Grafana, anche questo installato senza usare il repository ufficiale Raspbian (nota 1):

pi@rpi-audi:~ $ curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add -
pi@rpi-audi:~ $ echo "deb https://dl.bintray.com/fg2it/deb stretch main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
pi@rpi-audi:~ $ sudo aptitude update
pi@rpi-audi:~ $ sudo aptitude install grafana
pi@rpi-audi:~ $ sudo /bin/systemctl daemon-reload
pi@rpi-audi:~ $ sudo /bin/systemctl enable grafana-server
pi@rpi-audi:~ $ sudo /bin/systemctl start grafana-server

Primo test

Il primo test può essere eseguito in locale, direttamente da linea di comando:

pi@rpi-audi:~ $ influx -execute 'create database PROVA'
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'insert mysensor Temperatura=21,Pressione=1.001'
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512916365274491145 1.001 21

In alternativa, sempre in locale, è possibile usare curl:

pi@rpi-audi:~ $ curl -i -XPOST 'http://localhost:8086/write?db=PROVA' --data-binary 'mysensor Temperatura=22,Pressione=1.002'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: cfc615ee-ddb7-11e7-9963-000000000000

pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512816365274491145 1.001 21
1512816719270947960 1.002 22

Connessione remota

curl è perfetto per aggiornare un database remoto:

vv@vv-inspiron:~$ curl -i -XPOST 'http://rpi-audi.local:8086/write?db=PROVA' --data-binary 'mysensor Temperatura=23,Pressione=1.003'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 76d3dfc7-ddb8-11e7-9cea-000000000000

pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512816365274491145 1.001 21
1512816719270947960 1.002 22
1512816999540817119 1.003 23

Quanto mostrato ha il grave problema di non essere né autenticato né cifrato, cose essenziali se pensate di usare una macchina esposta su internet. La strada più semplice da percorrere, anche in vista di aggiornamenti da programma del database e dell'installazione del firewall, è quella di utilizzare un tunnel SSH: (nota 2 e nota 3)

vv@vv-inspiron:~$ ssh -L 9000:localhost:8086 pi@rpi-audi.local

vv@vv-inspiron:~$ curl -i -XPOST 'http://localhost:9000/write?db=PROVA' --data-binary 'mysensor Temperatura=24,Pressione=1.004'

È bene che il tunnel venga creato automaticamente con l'avvio della macchina e riavviato nel caso di caduta. Se usate Raspbian con installato systemd (default) la cosa è semplice:

pi@RPi-vv1:~ $ sudo nano /etc/systemd/system/sshtunnel.service

[Unit]
Description=SSH Tunnel
After=network.target
[Service]
Restart=always
RestartSec=20
User=pi
ExecStart=/usr/bin/ssh -NT -o ServerAliveInterval=60 -L 9000:localhost:8086 pi@rpi-audi.local
[Install]
WantedBy=multi-user.target

pi@RPi-vv1:~ $ sudo systemctl enable sshtunnel

Quindi riavviare il Rasperry Pi (o usare sudo systemctl start sshtunnel).

Questo metodo può essere evidentemente utilizzato per avviare automaticamente al boot qualunque programma eseguibile.

Firewall

Se la macchina che ospita InfluxDB è connessa ad internet, è buona cosa configurare il firewall:

pi@rpi-audi:~ $ cat firewall.sh
#!/bin/sh

iptables -F
iptables -t mangle -F
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X

ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

# Generale
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128:65535 -j DROP

# Traffico locale
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT

#ssh
iptables -A INPUT -p TCP --dport ssh -j ACCEPT

# Grafana
iptables -A INPUT -p TCP --dport 3000 -j ACCEPT

Dopo i test (DOPO i test), la configurazione del firewall può essere resa permanente:

root@athena:~# aptitude install iptables-persistent

Oppure dpkg-reconfigure iptables-persistent

Note

  1. Nel caso, basta ovviamente: sudo apt-get install influxdb. Dovrebbe essere sufficiente anche per Grafana, ma quando ho provato il servizio non si avviava, senza alcun messaggio di errore
  2. Si suppone di aver un accesso con chiave alla macchina che ospita InfluxDB
  3. La porta locale (9000) è scelta casualmente, con il vincolo di essere maggiore di 1024 e libera

Pagina creata nel dicembre 2017
Ultima modifica di questa pagina: 13 dicembre 2017



EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3