{{tag>software logiciel mqtt prometheus exporter todo}} ====== mqtt2prometheus : Prometheus exporter ====== **mqtt2prometheus** est un "exporter" pour Prometheus. Il souscrit au Broker MQTT, s'abonne aux topics et les rends disponibles pour le scapring de Prometheus. ===== Connexion au Broker MQTT ===== Le fichier de configuration ''/config.yml'' permet de définir les paramètres de connexion au Broker MQTT. mqtt: # The MQTT broker to connect to server: tcp://broker:1883 # Optional: Username and Password for authenticating with the MQTT Server # user: bob # password: happylittleclouds # Optional: for TLS client certificates # ca_cert: certs/AmazonRootCA1.pem # client_cert: certs/xxxxx-certificate.pem.crt # client_key: certs/xxxxx-private.pem.key # Optional: Used to specify ClientID. The default is - client_id: mqtt_exporter # The Topic path to subscribe to. Be aware that you have to specify the wildcard. topic_path: '#' # Optional: Regular expression to extract the device ID from the topic path. The default regular expression, assumes # that the last "element" of the topic_path is the device id. # The regular expression must contain a named capture group with the name deviceid # For example the expression for tasamota based sensors is "tele/(?P.*)/.*" # device_id_regex: "(.*/)?(?P.*)" # The MQTT QoS level qos: 0 L'exporteur mqtt2prometheus souscrit au broker. Les journaux du broker permettent de tracer la souscription: docker-compose logs mosquitto Attaching to synopush_mqtt_broker synopush_mqtt_broker | 1671561436: mosquitto version 2.0.14 starting synopush_mqtt_broker | 1671561436: Config loaded from /mosquitto/config/mosquitto.conf. synopush_mqtt_broker | 1671561436: Opening ipv4 listen socket on port 1883. synopush_mqtt_broker | 1671561436: Opening ipv6 listen socket on port 1883. synopush_mqtt_broker | 1671561436: mosquitto version 2.0.14 running synopush_mqtt_broker | 1671561437: New connection from 172.19.0.5:49754 on port 1883. synopush_mqtt_broker | 1671561437: New client connected from 172.19.0.5:49754 as mqtt_exporter (p2, c1, k30). . . . Les logs indiquent bien qu'un client nommé "mqtt_exporter" s'est connecté. ===== Exposition des métriques ===== Les métriques ne seront plus présentées à Prometheus si les valeurs ne sont pas rafraîchies par la réception de message MQTT en deçà de la valeur de **timeout**. cache: # Timeout. Each received metric will be presented for this time if no update is send via MQTT. # Set the timeout to -1 to disable the deletion of metrics from the cache. The exporter presents the ingest timestamp # to prometheus. timeout: 24h Le fichier de configuration permet de définir/sélectionner les métriques à présenter à Prometheus # Liste des métriques valides. Seules les métriques listées ci-dessous seront exportées. metrics: # Nom de la métrique exposée pour Prometheus - prom_name: temperature_celsius # Correspondance avec la valeur du message JSON MQTT mqtt_name: t # Description de la métrique help: temperature ambiante (°C) # Type de la métrique Prometheus. Valeurs possibles: "gauge" ou "counter" type: gauge # Nom de la métrique exposée pour Prometheus - prom_name: humidity_ratio # Correspondance avec la valeur du message JSON MQTT mqtt_name: u # Description de la métrique help: Humidité relative (%) # Type de la métrique Prometheus. Valeurs possibles: "gauge" ou "counter" type: gauge ===== Scraping par Prometheus ===== Par défaut mqtt2prometheus écoute sur le port **9641**. Vérifier que depuis le conteneur Prometheus, on peut atteindre l'exporteur: # ouvre un shell interactif dans le conteneur prometheus docker-compose exec -u root prometheus /bin/sh # Récupère et affiche les métriques exposés par mqtt2prometheus dans la console wget -O - "http://mqtt2prometheus:9641/metrics" ===== logs ===== S'appuie sur Uber Zap pour la génération des logs. Les niveaux de logs disponibles sont ceux proposés par bibliothèque. ^ debug | Journaux verbeux le plus souvent désactivé en production. | ^ info | Priorité de journalisation par défaut. | ^ warn | Priorité plus haute que info mais ne nécessitant pas une intervention particulière. | ^ error | Événements de haute priorité nécessitant une correction. Une application s’exécutant normalement ne doit pas générer d'erreur. | ^ dpanic | Erreurs importantes provoquant l'arrêt du logger. | ^ panic | Journalisation de l'erreur et panic | ^ fatal | Journalisation de l'événement et appel de os.Exit(1) | ===== Références ===== * https://github.com/hikhvar/mqtt2prometheus * https://medium.com/codex/level-based-logging-in-go-with-uber-zap-a8a90aa40672 * https://frederic-hemberger.de/notes/prometheus/monitoring-temperature-and-humidity-with-mqtt/