Da SNMP ad InfluxDB con Telegraf
In questo nuovo post vedremo come acquisire i dati da un sensore remoto attraverso il protocollo SNMP e come memorizzarli in un database In+fluxDB sfruttando Telegraf.
Si tratta di uno scenario abbastanza comune in ambito IoT e in generale in applicazioni di monitoraggio ambientale.
Per il nostro esperimento ci serviremo di una istanza "blank" su Cloud9 per impostare il nostro ambiente di lavoro e utilizzeremo il sensore Hwg-STE messo a disposizione dall'azienda all'indirizzo ste.hwg.cz.
Dopo aver avviato la VM di Cloud9 installiamo InfluxDB con
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.4.2_amd64.deb sudo dpkg -i influxdb_1.4.2_amd64.deb
quindi avviamo il servizio con
sudo service influxdb start
Proseguiamo con l'installazione di Telegraf
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.4.5-1_amd64.deb sudo dpkg -i telegraf_1.4.5-1_amd64.deb
Prepariamo un file di configurazione più sintentico di quello di default specificando gli input e gli output strettamente necessari con il seguente comando
telegraf -sample-config -input-filter snmp -output-filter influxdb > telegraf.conf
In sostanza come input utilizziamo esclusivamente il protocollo SNMP mentre come output il database InfluxDB in cui andremo a memorizzare i dati.
Il file richiede alcune modifiche manuali in modo da settare opportunamente l'agent SNMP e gli OID che intendiamo acquisire e memorizzare.
# Retrieves SNMP values from remote agents`
[[inputs.snmp]]
agents = [ "ste.hwg.cz:161" ]
## Timeout for each SNMP query.
timeout = "5s"
## Number of retries to attempt within timeout.
retries = 3
## SNMP version, values can be 1, 2, or 3
version = 2
## SNMP community string.
community = "public"
## measurement name
name = "temperature"
[[inputs.snmp.field]]
name = "sensor-id"
oid = ".1.3.6.1.4.1.21796.4.1.3.1.8.1"
[[inputs.snmp.field]]
name = "sensor-name"
oid = ".1.3.6.1.4.1.21796.4.1.3.1.2.1"
[[inputs.snmp.field]]
name = "sensor-state"
oid = ".1.3.6.1.4.1.21796.4.1.3.1.3.1"
[[inputs.snmp.field]]
name = "sensor-unit"
oid = ".1.3.6.1.4.1.21796.4.1.3.1.7.1"
[[inputs.snmp.field]]
name = "value"
oid = ".1.3.6.1.4.1.21796.4.1.3.1.5.1"
In questa sede mi limito a riportare solo la sezione specifica abbastanza autoesplicativa, mentre il file completo può essere scaricato dal mio repository GitHub.
Dopo aver effettuato delle modifiche al file di configurazione possiamo copiarlo nella posizione di default con
sudo cp telegraf.conf /etc/telegraf/telegraf.conf
e riavviare il servizio
sudo service telegraf restart
Se ci colleghiamo al database InfluxDB tramite CLI possiamo recuperare i dati appena salvati come è visibile nell'immagine allegata.