La problématique rencontrée est que lors de la collecte, pendant une période de quelques minutes (environ 5min), la même valeur de la métrique est collectée plusieurs fois (toutes les 15s).
Les graphes construits par la suite via Grafana présentent des plateaux de valeurs constantes alors qu'on souhaiterait ici n'avoir q'un seul relevé pour la métrique:
Dans le cas présent, la métrique est exposée par l'exporteur mqtt2prometheus avec son timestamp de réception.
Ci-dessous on utilise wget pour afficher les métriques et s'assurer du format exposé par l'exporteur:
wget -O - http://mqtt2prometheus:9641/metrics"
... # HELP sensor_battery_percent Battery level in percent # TYPE sensor_battery_percent gauge sensor_battery_percent{sensor="shellyht-795EDD",sensor_type="Shelly H&T",topic="shellies/shellyht-795EDD/sensor/battery"} 100 1676294284206 sensor_battery_percent{sensor="shellyht-799B72",sensor_type="Shelly H&T",topic="shellies/shellyht-799B72/sensor/battery"} 100 1676285085515 sensor_battery_percent{sensor="shellyht-79A241",sensor_type="Shelly H&T",topic="shellies/shellyht-79A241/sensor/battery"} 100 1676281878932 sensor_battery_percent{sensor="shellyht-79A7E2",sensor_type="Shelly H&T",topic="shellies/shellyht-79A7E2/sensor/battery"} 100 1676289837693 # HELP sensor_humidity_percent Humidity air-water mixture in percent # TYPE sensor_humidity_percent gauge sensor_humidity_percent{sensor="shellyht-795EDD",sensor_type="Shelly H&T",topic="shellies/shellyht-795EDD/sensor/humidity"} 39 1676294284206 sensor_humidity_percent{sensor="shellyht-799B72",sensor_type="Shelly H&T",topic="shellies/shellyht-799B72/sensor/humidity"} 35.5 1676285085514 sensor_humidity_percent{sensor="shellyht-79A241",sensor_type="Shelly H&T",topic="shellies/shellyht-79A241/sensor/humidity"} 46.5 1676281878932 sensor_humidity_percent{sensor="shellyht-79A7E2",sensor_type="Shelly H&T",topic="shellies/shellyht-79A7E2/sensor/humidity"} 52 1676289837693 # HELP sensor_temperature_celsius Temperature in Celsius # TYPE sensor_temperature_celsius gauge sensor_temperature_celsius{sensor="shellyht-795EDD",sensor_type="Shelly H&T",topic="shellies/shellyht-795EDD/sensor/temperature"} 19.62 1676294284205 sensor_temperature_celsius{sensor="shellyht-799B72",sensor_type="Shelly H&T",topic="shellies/shellyht-799B72/sensor/temperature"} 18.25 1676285085514 sensor_temperature_celsius{sensor="shellyht-79A241",sensor_type="Shelly H&T",topic="shellies/shellyht-79A241/sensor/temperature"} 13.88 1676281878932 sensor_temperature_celsius{sensor="shellyht-79A7E2",sensor_type="Shelly H&T",topic="shellies/shellyht-79A7E2/sensor/temperature"} 16.5 1676289837693
Coté Prometheus, on peut afficher la configuration de l'application grâce au navigateur, on obtient le résultat suivant (extrait):
global: scrape_interval: 15s scrape_timeout: 10s evaluation_interval: 15s ... scrape_configs: - job_name: scrap_mqtt_broker honor_timestamps: true scrape_interval: 5m scrape_timeout: 10s metrics_path: /metrics scheme: http follow_redirects: true static_configs: - targets: - mqtt2prometheus:9641
Après modification du fichier de configuration, relancer le service ou envoyer un signal SIGHUP pour recharger le fichier:
docker container kill --signal SIGHUP monitoring_prometheus
Afficher les logs
level=info ts=2023-02-13T14:31:36.499Z caller=main.go:969 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml