Configurable general purpose Prometheus exporter for MQTT.
Subscribes to one or more MQTT topics, and lets you configure prometheus metrics based on pattern matching.
- Supported Metrics:
- standard metrics
- Gauge, Counter, Histogram, Summary
- additional
- Counter (Absolute):
- Same as Counter, but working with absolute numbers received from MQTT. Which is far more common, than sending the diff in each publish.
- e.g. a network counter or a rain sensor
- Enum:
- is a metric type not so common, details can be found in the OpenMetrics docs and Python client code.
- Allows to track as state by a know set of strings describing the state, e.g.
on/offorhigh/medium/low - Common sources would be a light switch oder a door lock.
- Counter (Absolute):
- standard metrics
- Comprehensive rewriting for topic, value/payload and labels
- similar to prometheus label rewrites
- regex allows almost every conversion
- e.g. to
- remove units or other strings from payload
- convert topic hierarchy into labels
- normalize labels
- check example configs
./exampleconfand the configs in./test/test_data/
- Create a folder to hold the config (default:
conf/) - Add metric config(s) in YAML format to the folder. Files are combined and read as a single config. (See
exampleconf/metric_example.yamlfor details) - Install dependencies with
pip3 install -r requirements-frozen.txt - Run
./mqtt_exporter.py
For your convenience, there is also a Docker image available:
docker run -d \
-v "$(pwd)/myconfig:/usr/src/app/conf:ro" \
-p "9344:9344" \
ghcr.io/fhemberger/mqtt_exporterIf you want to mount your configuration to a different directory, add the -c flag:
docker run -d \
-v "$(pwd)/myconfig:/myconfig:ro" \
-p "9344:9344" \
ghcr.io/fhemberger/mqtt_exporter -c /myconfig- paho-mqtt
- prometheus-client
- PyYAML
- yamlreader
- Contribution is welcome. Fork and then PR.
- Discussions in Issues.
- Functional tests are written in
pytest(see tests/readme.md) - Code formatting uses
autopep8with default settings. If you submit a PR to this repo, please make sure it follows its formatting guidelines.
- Add persistence of metrics on restart
- forget/age out metrics receiving no updates anymore