{"id":11715,"date":"2026-02-03T09:25:27","date_gmt":"2026-02-03T08:25:27","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=11715"},"modified":"2026-02-04T16:57:37","modified_gmt":"2026-02-04T15:57:37","slug":"poc-influxdb","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=11715","title":{"rendered":"POC : InfluxDB"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">POC : InfluxDB <\/h2>\n\n\n\n<p>Objectifs du POC : mettre en place la solution initiale du site SNO avec sa base de donn\u00e9es Postgresql et une solution avec la base de donn\u00e9es InfluxDB. Pouvoir d\u00e9finir un jeu de requ\u00eates et de traitements pour les deux solutions. Les aspects de performances et de consommation de ressources seront prises en compte ainsi que les aspects de maintenance et d&#8217;\u00e9volution de l&#8217;ensemble.<\/p>\n\n\n\n<p>Solution de stockage de s\u00e9ries temporelles provenant principalement de mat\u00e9riels. Les concepts li\u00e9s \u00e0 cette solution sont : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>database<\/li>\n\n\n\n<li>field Key <\/li>\n\n\n\n<li>field Set<\/li>\n\n\n\n<li>filed Value<\/li>\n\n\n\n<li>measurement<\/li>\n\n\n\n<li>point<\/li>\n\n\n\n<li>retention policy <\/li>\n\n\n\n<li>series<\/li>\n\n\n\n<li>tag Key<\/li>\n\n\n\n<li>tag Set<\/li>\n\n\n\n<li>tag Value<\/li>\n\n\n\n<li>timestamp : quand la mesure a \u00e9t\u00e9 effectu\u00e9e, pr\u00e9cision en nanosecondes<\/li>\n<\/ul>\n\n\n\n<p>Mise en oeuvre du POC : \u00e0 partir des donn\u00e9es extraites d&#8217;ICOS sur la tourbi\u00e8re de la Guette pour allons mettre en place une solution pour effectuer des benchs entre les deux solutions native Postgresql avec sa vue mat\u00e9rialis\u00e9e et InfluxDB.<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-f4c9106b9f143f43652a89b28ec17c7f\">Fichier de lancement de la partie serveur<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm -p 8181:8181 \\\n  -v $PWD\/data:\/var\/lib\/influxdb3\/data \\\n  -v $PWD\/plugins:\/var\/lib\/influxdb3\/plugins \\\n  -e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN_FILE=.\/.env.influxdb2-admin-token \\\n  influxdb:3-core influxdb3 serve \\\n    --node-id=my-node-0 \\\n    --object-store=file \\\n    --data-dir=\/var\/lib\/influxdb3\/data \\\n    --plugin-dir=\/var\/lib\/influxdb3\/plugins\n<\/code><\/pre>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-8befe79afc5e1f5e61820d260f770e95\">Lancement de la partie visualisation : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --detach \\\n  --name influxdb3-explorer \\\n  --publish 8988:80 \\\n  --publish 8989:8888 \\\n  influxdata\/influxdb3-ui \\\n  --mode=admin\n<\/code><\/pre>\n\n\n\n<p>Pour d\u00e9marrer les deux conteneurs, il faut cr\u00e9er au pr\u00e9alable un compte utilisateur influxdb sur le serveur lui affecter les PID\/GID \u00e0 1500 et lui affecter les deux r\u00e9pertoires data et plugins.  <\/p>\n\n\n\n<p>D\u00e9marrage de la partie visualisation et ajout du premier noeud <a href=\"http:\/\/localhost:8988\/system-overview\">http:\/\/localhost:8988\/system-overview<\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"478\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42-1024x478.png\" alt=\"\" class=\"wp-image-11732\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42-1024x478.png 1024w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42-300x140.png 300w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42-768x359.png 768w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42-1536x717.png 1536w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-35-42.png 1681w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Dans la partie configure il faut ajouter le premier noeud de votre infrastructure pour cela il va falloir fournir \u00e9galement un token. Pour obtenir le token, connecter sur l&#8217;instance du noeud et ex\u00e9cuter la commande suivante: <strong>influxdb3 create token &#8211;admin<\/strong><\/p>\n\n\n\n<p>Cette commande retourne le token qu&#8221;il faut sauvegarder et renseigner lors de la cr\u00e9ation d&#8217;un node. <\/p>\n\n\n\n<p>Trois \u00e9l\u00e9ments \u00e0 fournir : nom, l&#8217;URL et le token. Pour l&#8217;URL indiquer l&#8217;adresse IP de la machine et pas localhost.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"285\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-39-08-1024x285.png\" alt=\"\" class=\"wp-image-11731\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-39-08-1024x285.png 1024w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-39-08-300x83.png 300w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-39-08-768x213.png 768w, https:\/\/spgoo.org\/wp-content\/uploads\/2026\/02\/Capture-decran-du-2026-02-03-17-39-08.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Acc\u00e8s via API \u00e0 la base de donn\u00e9es <\/p>\n\n\n\n<p>REST API \/api\/v3\/query_sqlAPI<\/p>\n\n\n\n<p>Chargement des donn\u00e9es issues de ICOS pour la tourbi\u00e8re de la Guette de 2017 \u00e0 2022<\/p>\n\n\n\n<p>Plusieurs tentatives ont \u00e9t\u00e9 r\u00e9alis\u00e9es en passant parle module import csv mais probl\u00e8me de lecture de la donn\u00e9es TIMESTAMP_START et la convertir en time (valeur de r\u00e9f\u00e9rence pour la mesure). <\/p>\n\n\n\n<p>Du coup, on se rabat sur un script python pour transformer les donn\u00e9es et les importer dans la base.<\/p>\n\n\n\n<p>Structure des donn\u00e9es \u00e0 importer : on a deux timestamp de start et de end de la mesure, la premi\u00e8re valeur va servir de r\u00e9f\u00e9rence et sera remont\u00e9e dans l&#8217;attribut time de l&#8217;enregistrement.<\/p>\n\n\n\n<p>Code de chargement des donn\u00e9es d&#8217;ICOS pour la Guette <a href=\"https:\/\/meta.icos-cp.eu\/resources\/stations\/ES_FR-LGt\">voir<\/a><\/p>\n\n\n\n<p>Plusieurs petits probl\u00e8mes au chargement des donn\u00e9es dans le syst\u00e8me d\u00fb \u00e0 la valeur de TIMESTAMP et \u00e0 l&#8217;insertion des \u00e9l\u00e9ments. Pour cela il est n\u00e9cessaire de convertir les valeurs avant insertion.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># -----------------------------------------------------------------\n# Y. Stroppa SPGoO\/OSUC\n# 04\/02\/2026\n# Script d\u00e9velopp\u00e9 pour permettre l'importation des donn\u00e9es du SNO dans Influxdb\n# -----------------------------------------------------------------\nfrom influxdb_client import WritePrecision, InfluxDBClient, Point\nfrom influxdb_client.client.write_api import SYNCHRONOUS\nimport pandas as pd\nimport time\nfrom datetime import datetime \nimport csv\n\n# param\u00e8tres de la connexion avec la serveur influxdb\nurl = 'http:\/\/192.168.150.168:8181'\ntoken = 'TOKEN A RECUPERER SUR LE SERVEUR'\norg = 'my-org'\nbucket = 'my-sno'\n\n# Chargement des donn\u00e9es \u00e0 partir du fichier externe CSV  \nf=open('ICOSETC_FR-LGt_METEO_L2.csv', newline='')\nreader = csv.reader(f,delimiter=',', quotechar='|')    \nheaders = next(reader, None)    \n\ndef is_float(element:any)->bool:\n    if element is None:\n        return False\n    try:\n        float(element)\n        return True\n    except ValueError:\n        return False\n\nclient=InfluxDBClient(url=url, token=token, org=org)\nwrite_api=client.write_api(write_options=SYNCHRONOUS) \n\nfor row in reader:\n    p = Point(\"sonde\")\n    for h, v in zip(headers, row):\n        if h==\"TIMESTAMP_START\": # or h==\"TIMESTAMP_END\":\n            v+=\"00\"\n            v=time.mktime(datetime.strptime(v,\"%Y%m%d%H%M%S\").timetuple())\n            print(type(v))\n            p.time(datetime.fromtimestamp(v),WritePrecision.MS)\n        elif h==\"TIMESTAMP_END\":\n            v=time.mktime(datetime.strptime(v,\"%Y%m%d%H%M\").timetuple())\n            p.field(h,v)\n        else:\n            p.tag(\"location\", \"La Guette\")\n            value=v\n            if is_float(v):\n                value=float(v)\n            p.field(h,value)\n    # Ecriture de l'\u00e9l\u00e9ment dans la base\n    write_api.write(bucket=bucket, record=p)         \n\n\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>POC : InfluxDB Objectifs du POC : mettre en place la solution initiale du site SNO avec sa base de donn\u00e9es Postgresql et une solution avec la base de donn\u00e9es InfluxDB. Pouvoir d\u00e9finir un jeu de requ\u00eates et de traitements pour les deux solutions. Les aspects de performances et de consommation de ressources seront prises [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11715","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/11715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11715"}],"version-history":[{"count":27,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/11715\/revisions"}],"predecessor-version":[{"id":11760,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/11715\/revisions\/11760"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}