mqtt2influxdb is a small and simple program that connects to an MQTT server, subscribes to MQTT topics, and publishes messages received to an InfluxDB database.
First make sure you have setup your Go environment. After having setup your $GOPATH
you can do a
go get github.com/mhe/mqtt2influxdb
to install a mqtt2influxdb binary in your $GOPATH/bin
.
Alternatively you can clone this repository somewhere (for example in your $GOPATH/src
) and install the dependencies
cd mqtt2influxdb
go get ...
Then build it:
go build .
Which should result in a binary in your working directory.
mqtt2influxdb has a number of commandline options. Invoking mqtt2influxdb -h
will print:
mqtt2influxdb
Usage of ./mqtt2influxdb:
-clientid string
ClientID to use when connecting to MQTT broker. (default "mqtt2influxdb")
-config string
Configuration file containing the descriptions how to map MQTT messages to InfluxDB points. (default "mqtt2influxdb.toml")
-database string
Name of the InfluxDB database to use. (default "mqtt")
-influxdb string
InfluxDB host address. Should include both protocol (http or https) and port number. (default "http://localhost:8086")
-mqtt string
MQTT host (including port number). (default "localhost:1883")
-test
Print InfluxDB insert lines to stdout instead of actually submitting data.
How to map messages from an mqtt bus to points in a influxdb database is specified in a configuration file (using the TOML format).
Each mapping consists of three items:
topic
: the mqtt topic to subscribe to. It can contain wildcards (e.g.,+
).template
: a template (using Go's text/template) to build a line according to InfluxDB's line protocol.encoding
: specifies the encoding of the message, can be one of four: json, msgpack, binc, or cbor. It can be omitted if a default encoding is specified (thedefaultEncoding
top-level entry).
See the provided example configuration file for more information.
A basic Dockerfile is provided to create a docker image to run mqtt2influxdb in. Note that it is relatively unoptimized in terms of size. There are a couple of configuration parameters that can be specified using environment variables:
MQTT_HOST
INFLUXDB_HOST
DATABASE_NAME
Although mqtt2influxdb is fairly flexible due to its template-based approach for building InfluxDB input lines, it might not completely suit you. In that case also consider InfluxData's telegraf.