Il y a quelques années, nous vous avions montré comment intégrer des capteurs Yoctopuce sur un tableau de bord Grafana intégré avec InfluxDB, qui était une solution très répandue à l'époque. Entre temps, GrafanaLabs a porté son dévolu sur une autre base de données de séries temporelles, Prometheus, qui offre bien plus de possibilité d'extraction de données qu'InfluxDB. Nous avons donc ajouté à nos modules la possibilité de fournir leurs données dans une format directement reconnu par Prometheus.
Scénario visé par Prometheus / Grafana
Avant d'entrer dans les détails, précisons que Prometheus et Grafana ne sont pas destinés à fournir une visualisation de quelques capteurs en temps réel, seconde par seconde. Pour cela, nous vous recommandons plutôt Yocto-Visualization, qui sera plus facile à mettre en œuvre et plus réactif.
Le véritable but de Prometheus est de collecter périodiquement des centaines de mesures provenant de multiples sources, de les stocker, d'y effectuer des recherches de manière efficace et éventuellement de déclencher des alarmes. Grafana permet ensuite de visualiser l'historique des mesures sur une plage de temps déterminée pour détecter et analyser les situations anormales.
Architecture d'un système Prometheus
Mise en œuvre
Contrairement à InfluxDB, Prometheus travaille par polling: c'est le serveur Prometheus qui contacte périodiquement les sources de pour y collecter les mesures au rythme choisi, et non les sources qui postent spontanément leurs mesures vers la base de données. Ce choix implique que vous aurez dans tous les cas besoin d'installer votre propre serveur Prometheus sur votre réseau local, pour qu'il puisse accéder à vos sources de données et à vos capteurs. Vous pouvez ensuite synchroniser votre serveur Prometheus local avec un service sur le Cloud, mais la collecte d'informations doit se faire par un serveur local.
Les sources de données Prometheus sont appelées des exportateurs: l'idée est que chaque système ou service important peut mettre à disposition de Prometheus ses données vitales, permettant à l'administrateur système de les collecter et de les surveiller. Chaque exportateur est une URL accessible par HTTP, qui fournit ses données selon le standard OpenMetrics: une mesure par ligne, avec des conventions de nommage et de classification qui permettent à l'administrateur système de s'y retrouver parmi les centaines de mesures qu'il aura à disposition lorsqu'il configure son tableau de bord.
Pour obtenir la meilleure intégration possible avec Prometheus, nous avons intégré à tous les modules Yoctopuce et au VirtualHub la capacité d'être directement exportateurs OpenMetrics. Jusqu'à présent, les modules Yoctopuce étaient capables d'exporter leurs mesures au format JSON, XML et texte simple via l'interface REST décrite dans le manuel au chapitre Utilisation avec des langages non supportés. Cette même interface REST permet désormais aussi d'obtenir les données au format OpenMetrics, en utilisant l'extension .om. Par exemple, si vous chargez l'URL /api/services.om sur un YoctoHub-Ethernet auquel quelques capteurs sont connectés, vous obtiendrez quelque chose du genre (la présentation a été ici modifiée pour faciliter la lecture, mais en réalité chaque mesure tient sur une seule ligne):
productName="Yocto-Thermocouple",
serialNumber="THRMCPL1-16397A",
deviceName="insideProbes",
functionId="temperature1"} 21.78
yocto_temperature_advertisedValue{
productName="Yocto-PT100",
serialNumber="PT100MK1-BA496",
functionId="temperature"} 28.57
yocto_temperature_advertisedValue{
productName="Yocto-RangeFinder",
serialNumber="YRNGFND1-1D1567",
deviceName="rf",
functionId="temperature1",
functionName="rfTemp"} 25.13
yocto_lightSensor_advertisedValue{
productName="Yocto-RangeFinder",
serialNumber="YRNGFND1-1D1567",
deviceName="rf",
functionId="lightSensor1"} 56
yocto_rangeFinder_advertisedValue{
productName="Yocto-RangeFinder",
serialNumber="YRNGFND1-1D1567",
deviceName="rf",
functionId="rangeFinder1"} 1456
# EOF
Pour indiquer à Prometheus de collecter ces données directement depuis votre YoctoHub-Ethernet, il suffit donc d'ajouter à votre fichier prometheus.yml une section comme celle-ci:
scrape_interval: 60s
metrics_path: "/api/services.om"
static_configs:
- targets: ['192.168.0.100:4444']
Et voici le genre de graphiques que les capteurs Yoctopuce permettent d'obtenir dans l'interface de Grafana:
Mesures de température dans Grafana
Utilisation avancée
Comme notre exportateur OpenMetrics est intégré au coeur de l'interface REST du YoctoHub-Ethernet, vous pouvez aussi l'utiliser pour obtenir des informations plus détaillées par capteur, en utilisant une URL qui pointe vers un capteur spécifique. Par exemple, si vous donnez à un Yocto-Thermocouple le nom logique tcProbes et que vous chargez l'URL /byName/tcProbes/api.om, vous obtiendrez quelque chose du genre:
yocto_module_beacon{...,functionId="module",functionName="tcProbes"} 0
yocto_module_usbCurrent_mA{...,functionId="module",functionName="tcProbes"} 23
yocto_module_rebootCountdown{...,functionId="module",functionName="tcProbes"} 0
yocto_module_userVar{...,functionId="module",functionName="tcProbes"} 0
yocto_temperature_currentValue_degC{[...],functionName="heatSink"} 21.99
yocto_temperature_lowestValue_degC{[...],functionName="heatSink"} 20.51
yocto_temperature_highestValue_degC{[...],functionName="heatSink"} 22.25
yocto_temperature_currentRawValue_degC{[...],functionName="heatSink"} 21.988
yocto_temperature_signalValue_mV{[...],functionName="heatSink"} -0.162
yocto_temperature_signalValue_mV{[...],functionId="temperature2"} 999.999
yocto_dataLogger_currentRunIndex{[...],functionId="dataLogger"} 0
yocto_dataLogger_autoStart{[...],functionId="dataLogger"} 0
yocto_dataLogger_beaconDriven{[...],functionId="dataLogger"} 0
yocto_dataLogger_usage{[...],functionId="dataLogger"} 0
# EOF
Ainsi, tous les attributs numériques du Yocto-Thermocouple sont mis à disposition de Prometheus. Vous pouvez donc connaître les valeurs min/max rencontrées, la tension mesurée aux bornes du thermocouple, etc. Notez aussi que dans ce cas, le symbole exporté inclut l'unité, comme recommandé OpenMetrics. Lorsque le module détecte qu'une entrée n'est pas connectée (comme la fonction temperature2 ci-dessus), les métriques qui ne peuvent être calculées sont automatiquement supprimés pour que Prometheus les signale comme manquantes, plutôt que de garder la dernière valeur mesurée.
Pour obtenir ces données supplémentaire par capteur, il suffit donc d'ajouter au fichier prometheus.yml une section supplémentaire, référençant le capteur soit par son numéro de série (bySerial) soit par son nom logique (byName):
scrape_interval: 60s
metrics_path: "/byName/tcProbes/api.om"
static_configs:
- targets: ['192.168.0.100:4444']
Voici l'interface de sélection des métriques résultante dans l'interface de Grafana, pour un Yocto-Meteo-V2:
Choix de métriques Yoctopuce pour un Yocto-Meteo-V2
Disponibilité
A ce jour, nous avons publié un nouveau firmware pour le YoctoHub-Ethernet, le YoctoHub-Wireless-n et un nouveau VirtualHub avec le support pour le format OpenMetrics, ce qui vous permet la mise en œuvre immédiate de l'utilisation de base. Pour obtenir les données détaillées par capteur, vous aurez aussi besoin de mettre à jour les firmwares de chacun d'eux. A ce jour nous avons déjà publié les nouveaux firmwares pour une dizaine de modules, et les autres modules suivront progressivement au fur et à mesure que les firmwares seront validés. Les firmwares incluent le support OpenMetrics à partir de la version 48000. Si vous en avez besoin d'un particulier en priorité, n'hésitez pas à contacter le support Yoctopuce!