Meshtastic MQTT exporter to Prometheus and Grafana (Dashboards included)
Find a file
2024-06-28 19:50:19 +03:00
.idea Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00
docker Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00
exporter Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00
.env Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00
docker-compose.yml Updated docker-compose.yml to support the changes 2024-06-28 19:50:19 +03:00
LICENSE Create LICENSE 2024-06-26 12:03:09 +03:00
main.py Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00
README.md Update README.md 2024-06-28 14:21:01 +03:00
requirements.txt Reformatted code to support postgres instead of redis for ease of use in Grafana 2024-06-28 19:49:43 +03:00

Meshtastic Metrics Exporter

The meshtastic-metrics-exporter is a tool designed to export nearly all available data from an MQTT server to a Prometheus server. It comes with a pre-configured Grafana dashboard connected to both data sources, allowing users to start creating dashboards immediately.

Features

  • Exports a comprehensive set of metrics from an MQTT server to Prometheus.
  • Comes with a Grafana dashboard configured to connect to both Prometheus and Redis data sources.
  • Stores node details (ID, short/long name, hardware details, and client type) in a Redis server, which is also part of the package.
  • Configuration via a .env file.

Exported Metrics

The following is a list of metrics exported by the meshtastic-metrics-exporter:

Metric Name Description Type Labels
text_message_app_length Length of text messages processed by the app Histogram client_id
device_latitude Device latitude Gauge client_id
device_longitude Device longitude Gauge client_id
device_altitude Device altitude Gauge client_id
device_position_precision Device position precision Gauge client_id
telemetry_app_ch1_voltage Voltage measured by the device on channel 1 Gauge client_id
telemetry_app_ch1_current Current measured by the device on channel 1 Gauge client_id
telemetry_app_ch2_voltage Voltage measured by the device on channel 2 Gauge client_id
telemetry_app_ch2_current Current measured by the device on channel 2 Gauge client_id
telemetry_app_ch3_voltage Voltage measured by the device on channel 3 Gauge client_id
telemetry_app_ch3_current Current measured by the device on channel 3 Gauge client_id
telemetry_app_pm10_standard Concentration Units Standard PM1.0 Gauge client_id
telemetry_app_pm25_standard Concentration Units Standard PM2.5 Gauge client_id
telemetry_app_pm100_standard Concentration Units Standard PM10.0 Gauge client_id
telemetry_app_pm10_environmental Concentration Units Environmental PM1.0 Gauge client_id
telemetry_app_pm25_environmental Concentration Units Environmental PM2.5 Gauge client_id
telemetry_app_pm100_environmental Concentration Units Environmental PM10.0 Gauge client_id
telemetry_app_particles_03um 0.3um Particle Count Gauge client_id
telemetry_app_particles_05um 0.5um Particle Count Gauge client_id
telemetry_app_particles_10um 1.0um Particle Count Gauge client_id
telemetry_app_particles_25um 2.5um Particle Count Gauge client_id
telemetry_app_particles_50um 5.0um Particle Count Gauge client_id
telemetry_app_particles_100um 10.0um Particle Count Gauge client_id
telemetry_app_temperature Temperature measured by the device Gauge client_id
telemetry_app_relative_humidity Relative humidity percent measured by the device Gauge client_id
telemetry_app_barometric_pressure Barometric pressure in hPA measured by the device Gauge client_id
telemetry_app_gas_resistance Gas resistance in MOhm measured by the device Gauge client_id
telemetry_app_iaq IAQ value measured by the device (0-500) Gauge client_id
telemetry_app_distance Distance measured by the device in mm Gauge client_id
telemetry_app_lux Ambient light measured by the device in Lux Gauge client_id
telemetry_app_white_lux White light measured by the device in Lux Gauge client_id
telemetry_app_ir_lux Infrared light measured by the device in Lux Gauge client_id
telemetry_app_uv_lux Ultraviolet light measured by the device in Lux Gauge client_id
telemetry_app_wind_direction Wind direction in degrees measured by the device Gauge client_id
telemetry_app_wind_speed Wind speed in m/s measured by the device Gauge client_id
telemetry_app_weight Weight in KG measured by the device Gauge client_id
telemetry_app_battery_level Battery level of the device (0-100, >100 means powered) Gauge client_id
telemetry_app_voltage Voltage measured by the device Gauge client_id
telemetry_app_channel_utilization Utilization for the current channel, including well-formed TX, RX, and noise Gauge client_id
telemetry_app_air_util_tx Percent of airtime for transmission used within the last hour Gauge client_id
telemetry_app_uptime_seconds How long the device has been running since the last reboot (in seconds) Counter client_id
route_length Number of nodes in the route Counter client_id
route_response Number of responses to route discovery Counter client_id, response_type
mesh_packet_source_types Types of mesh packets processed by source Counter source_id, portnum
mesh_packet_destination_types Types of mesh packets processed by destination Counter destination_id, portnum
mesh_packet_total Total number of mesh packets processed Counter source_id, destination_id
mesh_packet_rx_time Receive time of mesh packets (seconds since 1970) Histogram source_id, destination_id
mesh_packet_rx_snr Receive SNR of mesh packets Gauge source_id, destination_id
mesh_packet_hop_limit Hop limit of mesh packets Counter source_id, destination_id
mesh_packet_want_ack Occurrences of want ACK for mesh packets Counter source_id, destination_id
mesh_packet_via_mqtt Occurrences of mesh packets sent via MQTT Counter source_id, destination_id
mesh_packet_hop_start Hop start of mesh packets Gauge source_id, destination_id
mesh_packet_ids Unique IDs for mesh packets Counter source_id, destination_id, packet_id
mesh_packet_channel Channel used for mesh packets Counter source_id, destination_id, channel
mesh_packet_rx_rssi Receive RSSI of mesh packets Gauge source_id, destination_id

Configuration

The project uses a .env file for configuration. Here is an example of the configuration options available:

# Description: Environment variables for the application

# Redis connection details
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=

# Prometheus connection details
PROMETHEUS_COLLECTOR_PORT=9464
PROMETHEUS_JOB=example

# MQTT connection details
MQTT_HOST=
MQTT_PORT=1883
MQTT_USERNAME=
MQTT_PASSWORD=
MQTT_KEEPALIVE=60
MQTT_TOPIC='msh/israel/#'
MQTT_IS_TLS=false

# Exporter configuration
## Hide source data in the exporter (default: false)
MESH_HIDE_SOURCE_DATA=false
## Hide destination data in the exporter (default: false)
MESH_HIDE_DESTINATION_DATA=false
## Filtered ports in the exporter (default: 1, can be a comma-separated list of ports)
FILTERED_PORTS=0
## Hide message content in the TEXT_MESSAGE_APP packets (default: true) (Currently we only log message length, if we hide then all messages would have the same length)
HIDE_MESSAGE=false
## MQTT server Key for decoding messages
MQTT_SERVER_KEY=1PG7OiApB1nwvP+rz05pAQ==

Running the Project

To run the project, simply use Docker Compose:

docker-compose up --build

This command will build and start all the necessary services, including the MQTT server, Prometheus server, Redis server, and Grafana.

Grafana Dashboard

The project includes a Grafana dashboard pre-configured to connect to both the Prometheus and Redis data sources. This allows you to start creating and customizing your dashboards right away.

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.