This program subscribes to any number of MQTT topics, extracts a value from the messages' payload and sends that off to Graphite via Carbon over a UDP socket.
Values in the payload can be simple numbers (92
, 12.7
) or JSON strings.
In the latter case, all JSON names/keys are extracted and if their values are
numeric, these are then sent off to Carbon (see example below)
- Paho Python MQTT
- A running Carbon/Graphite server with UDP-enabled reception
- Access to an MQTT broker. (I use Mosquitto)
- Configure the mqtt2graphite init script carbon.hostname can be in the following formats: hostname -defaults to port 2004 hostname:port
pip install git+https://github.com/jpmens/mqtt2graphite.git
./init_server.sh mqtt.hostname carbon.hostname:port [Debug mode (True/False)]
- Edit the
mqtt.hostname.conf
file - Run or add this cmd
supervisord -c /etc/supervisord.conf
in your /etc/rc.local
mqtt2graphite assumes topics defined as "n"
in the map file contain a simple
number (integer or float), published thusly:
mosquitto_pub -t test/jp/j1 -m '69'
mosquitto_pub -t test/jp/j2 -m '{ "size":69,"temp": 89.3, "gas": " 88", "name": "JP Mens" }'
produces the following Carbon keys
test.jp.j2.gas 88.000000 1363169282
test.jp.j2.temp 89.300000 1363169282
test.jp.j2.size 69.000000 1363169282
A lot.
- Add configuration file in which we specify username/password and TLS certificates.
- I'm not experienced enough with high volume of messages, so this should maybe transmit to Carbon via StatsD?