kpetremann / mqtt-exporter

Simple generic MQTT Prometheus exporter for IoT working out of the box
https://hub.docker.com/r/kpetrem/mqtt-exporter
MIT License
103 stars 29 forks source link

fix "Invalid metric name" when topic contains »-« #29

Closed florianschroen closed 2 years ago

florianschroen commented 2 years ago

after fix: INFO:mqtt-exporter:creating prometheus metric: z2m_DS18B20_1_Temperature INFO:mqtt-exporter:creating prometheus metric: z2m_DS18B20_2_Temperature

before fix: [...] INFO:mqtt-exporter:creating prometheus metric: z2m_Dimmer1 INFO:mqtt-exporter:creating prometheus metric: z2m_Dimmer2 Traceback (most recent call last): File "/opt/mqtt-exporter/exporter.py", line 5, in main() File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 202, in main client.loop_forever() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1756, in loop_forever rc = self._loop(timeout) File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1164, in _loop rc = self.loop_read() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1556, in loop_read rc = self._packet_read() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2439, in _packet_read rc = self._packet_handle() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3033, in _packet_handle return self._handle_publish() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3327, in _handle_publish self._handle_on_message(message) File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3570, in _handle_on_message on_message(self, self._userdata, message) File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 166, in expose_metrics _parse_metrics(payload, topic) File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 47, in _parse_metrics _parsemetrics(value, topic, f"{prefix}{metric}") File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 60, in _parse_metrics prom_metrics[prom_metric_name] = Gauge( File "/usr/local/lib/python3.9/site-packages/prometheus_client/metrics.py", line 355, in init super(Gauge, self).init( File "/usr/local/lib/python3.9/site-packages/prometheus_client/metrics.py", line 123, in init raise ValueError('Invalid metric name: ' + self._name) ValueError: Invalid metric name: z2m_DS18B20-1_Id

and [...] INFO:mqtt-exporter:creating prometheus metric: z2m_ENERGY_Current Traceback (most recent call last): File "/opt/mqtt-exporter/exporter.py", line 5, in main() File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 266, in main client.loop_forever() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1756, in loop_forever rc = self._loop(timeout) File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1164, in _loop rc = self.loop_read() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1556, in loop_read rc = self._packet_read() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2439, in _packet_read rc = self._packet_handle() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3033, in _packet_handle return self._handle_publish() File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3327, in _handle_publish self._handle_on_message(message) File "/usr/local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3570, in _handle_on_message on_message(self, self._userdata, message) File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 221, in expose_metrics _parse_metrics(payload, topic, userdata["client_id"]) File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 122, in _parse_metrics _parse_metrics(value, topic, clientid, f"{prefix}{metric}") File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 134, in _parse_metrics _create_prometheus_metric(prom_metric_name) File "/opt/mqtt-exporter/mqtt_exporter/main.py", line 71, in _create_prometheus_metric prom_metrics[prom_metric_name] = Gauge( File "/usr/local/lib/python3.9/site-packages/prometheus_client/metrics.py", line 365, in init super().init( File "/usr/local/lib/python3.9/site-packages/prometheus_client/metrics.py", line 130, in init raise ValueError('Invalid metric name: ' + self._name) ValueError: Invalid metric name: z2m_DS18B20-1_Temperature

kpetremann commented 2 years ago

I've just pushed a commit to fix the CI. If you rebase on the master it should fix the Travis CI checks

florianschroen commented 2 years ago

rebased from master and squashed my commits together.

kpetremann commented 2 years ago

All good, thanks for contributing :tada: