Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
pub_zone:linux:stack_tig [21:14 06/12/2017] – créée nimbus | pub_zone:linux:stack_tig [17:05 27/06/2019] (Version actuelle) – [Correction d'un MEASUREMENT] nimbus | ||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
Tout simplement (si on se trouve sur le serveur qui héberge la base de données et en supposant que le client influx est dans le PATH) | Tout simplement (si on se trouve sur le serveur qui héberge la base de données et en supposant que le client influx est dans le PATH) | ||
<code bash> | <code bash> | ||
- | influx -precision rfc3339 -database ' | + | influx -precision rfc3339 -database ' |
+ | influx -precision ns -database ' | ||
</ | </ | ||
- | ==== Correction d'une SERIE ==== | + | ==== Correction d'un MEASUREMENT |
- | <WRAP center round todo 60%> | + | === Méthode subtile === |
- | Work in Progress 8-o | + | |
- | </ | + | |
<WRAP center round info> | <WRAP center round info> | ||
**Contexte : **\\ | **Contexte : **\\ | ||
- | J'ai des erreurs de mesures()) | + | J'ai des erreurs de mesures((Problème corrigé depuis... causé par une concurrence d' |
* Nom de la base InfluxDB : '' | * Nom de la base InfluxDB : '' | ||
- | * La SERIE est stockée dans la MEASUREMENT '' | + | * La SERIE est stockée dans la MEASUREMENT |
* Fréquence de collecte : '' | * Fréquence de collecte : '' | ||
+ | * Valeur à corriger : | ||
+ | * Points de **température > 100°C** (la pièce à vivre n'est pas censée être un four ;-)) | ||
</ | </ | ||
+ | __Avant__ correction : | ||
+ | {{ : | ||
+ | |||
+ | __Après__ correction : | ||
+ | {{ : | ||
On commence par [[# | On commence par [[# | ||
On affiche la structure de la **MEASUREMENT** | On affiche la structure de la **MEASUREMENT** | ||
- | < | + | < |
- | SHOW SERIES FROM Temperature_temperhum | + | > SHOW SERIES FROM Temperature_temper |
key | key | ||
--- | --- | ||
- | Temperature_temperhum, | + | Temperature_temper, |
- | SHOW TAG KEYS FROM Temperature_temperhum | + | > SHOW TAG KEYS FROM Temperature_temper |
- | name: Temperature_temperhum | + | name: Temperature_temper |
tagKey | tagKey | ||
------ | ------ | ||
host | host | ||
- | SHOW FIELD KEYS FROM Temperature_temperhum | + | > SHOW FIELD KEYS FROM Temperature_temper |
- | name: Temperature_temperhum | + | name: Temperature_temper |
fieldKey fieldType | fieldKey fieldType | ||
-------- --------- | -------- --------- | ||
Ligne 44: | Ligne 49: | ||
* 1 tagKey '' | * 1 tagKey '' | ||
* 1 fieldKey '' | * 1 fieldKey '' | ||
+ | |||
+ | Commençons par évaluer l' | ||
+ | <code bash> | ||
+ | > SELECT COUNT(" | ||
+ | name: Temperature_temper | ||
+ | time count | ||
+ | ---- ----- | ||
+ | 1970-01-01T00: | ||
+ | </ | ||
+ | |||
+ | Bon ok, 1 point de mesure à corriger, // | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | Pour appliquer la 2ème méthode, qui implique d' | ||
+ | </ | ||
+ | |||
+ | Liste des points de **température** à corriger | ||
+ | <code bash> | ||
+ | > PRECISION rfc3339 | ||
+ | > SELECT * FROM Temperature_temper WHERE value > 100 LIMIT 10; | ||
+ | name: Temperature_temper | ||
+ | time | ||
+ | ---- | ||
+ | 2017-12-07T11: | ||
+ | |||
+ | > PRECISION ns | ||
+ | > SELECT * FROM Temperature_temper WHERE value > 100 LIMIT 10; | ||
+ | name: Temperature_temper | ||
+ | time host value | ||
+ | ---- ---- ----- | ||
+ | 1512644404000000000 drouard.eu 568.5 | ||
+ | </ | ||
+ | |||
+ | Passons à la correction !\\ | ||
+ | En fonction de la nature, criticité de la métrique, 2 possibilités pour corriger l' | ||
+ | * Méthode 1 ☛ **Supprimer la valeur** erronée : | ||
+ | * Il est possible de corriger l' | ||
+ | * Méthode 2 ☛ **Maquiller la valeur** erronée (Ce n'est qu'une extension de la méthode 1) : | ||
+ | * Cette stratégie consiste sournoisement à faire une moyenne (par ex.) entre les 2 valeurs entourant le pic puis à inscrire cette valeur à la place de la valeur du pic | ||
+ | |||
+ | On commence par identifier le laps de temps incriminé via une petite requête (±1 période de collecte) : | ||
+ | <code bash> | ||
+ | > PRECISION rfc3339 | ||
+ | > SELECT * FROM Temperature_temper WHERE time >= ' | ||
+ | name: Temperature_temper | ||
+ | time | ||
+ | ---- | ||
+ | 2017-12-07T10: | ||
+ | 2017-12-07T11: | ||
+ | 2017-12-07T11: | ||
+ | </ | ||
+ | |||
+ | On supprime la valeur erronée | ||
+ | <code bash> | ||
+ | DELETE FROM Temperature_temper WHERE " | ||
+ | </ | ||
+ | |||
+ | On vérifie que la mesure à bien été supprimée | ||
+ | <code bash> | ||
+ | > SELECT * FROM Temperature_temper WHERE time >= ' | ||
+ | name: Temperature_temper | ||
+ | time | ||
+ | ---- | ||
+ | 2017-12-07T10: | ||
+ | 2017-12-07T11: | ||
+ | </ | ||
+ | |||
+ | La **méthode 1** consiste à en rester là et éventuellement maquiller légèrement la courbe dans Grafana... | ||
+ | |||
+ | Maintenant, on va aller un peu plus loin avec la **méthode 2**. | ||
+ | <WRAP center round info> | ||
+ | **Note** : il faut savoir que si l'on insert une valeur avec un **timestamp existant**, alors l''' | ||
+ | </ | ||
+ | |||
+ | On va devoir injecter une nouvelle valeur avec comme paramètres : | ||
+ | * **'' | ||
+ | * Dans cet ex : '' | ||
+ | * **'' | ||
+ | * Dans cet ex : '' | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | A noter qu'il est possible de convertir une date au format RFC-3339 vers le format epoch avec une précision à la nanoseconde avec la commande '' | ||
+ | <code bash> | ||
+ | date -d 2017-12-07T11: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Syntaxe générique d' | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | Ensuite, on peut forger la requête d' | ||
+ | * En mode **CLI** via le client '' | ||
+ | <code bash> | ||
+ | INSERT Temperature_temper, | ||
+ | </ | ||
+ | * En mode **HTTP API** (C'est à la mode... et et c'est pratique aussi) via '' | ||
+ | <code bash> | ||
+ | curl -i -XPOST -u USERNAME: | ||
+ | </ | ||
+ | |||
+ | Enfin, on vérifie la correction | ||
+ | <code bash> | ||
+ | > SELECT * FROM Temperature_temper WHERE time >= ' | ||
+ | name: Temperature_temper | ||
+ | time host value | ||
+ | ---- ---- ----- | ||
+ | 1512644101000000000 drouard.eu 19.29 | ||
+ | 1512644404000000000 drouard.eu 19.3 | ||
+ | 1512644701000000000 drouard.eu 19.31 | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Méthode (moins) subtile === | ||
+ | <WRAP center round info> | ||
+ | **Contexte : **\\ | ||
+ | J'ai un '' | ||
+ | '' | ||
+ | * Nom de la base InfluxDB : '' | ||
+ | * La '' | ||
+ | * Éléments à corriger | ||
+ | * Le nom du '' | ||
+ | * Le '' | ||
+ | * Les '' | ||
+ | |||
+ | La structure du '' | ||
+ | < | ||
+ | name: Temperature_temper | ||
+ | time host | ||
+ | ---- ---- | ||
+ | 1512659404000000000 drouard.eu | ||
+ | 1512659702000000000 drouard.eu | ||
+ | 1512660004000000000 drouard.eu | ||
+ | ... | ||
+ | 1541081404000000000 | ||
+ | 1541081703000000000 | ||
+ | 1541082004000000000 | ||
+ | ... | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | On commence par exporter les données | ||
+ | <code bash> | ||
+ | influx -database ' | ||
+ | </ | ||
+ | |||
+ | Ensuite je supprime les entêtes (les 3 premières lignes) | ||
+ | <code bash> | ||
+ | sed -i ' | ||
+ | </ | ||
+ | |||
+ | Je supprime les données contenu dans le '' | ||
+ | < | ||
+ | sed -i 's/ Temperature// | ||
+ | </ | ||
+ | |||
+ | Ensuite, je formate avec '' | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | awk ' | ||
+ | </ | ||
+ | |||
+ | Si le format est correct, je génère le fichier d' | ||
+ | <code bash> | ||
+ | awk ' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | On aurait pu tout à fait manipuler les données manuellement dans un éditeur de texte (vim, notepad++, etc.) ou dans un tableur tel que LibreOffice au format CSV... Mais ce n'est pas forcément toujours plus simple et dépend du nombre et du type de modification ;-) | ||
+ | </ | ||
+ | |||
+ | |||
+ | Et je l' | ||
+ | <code bash> | ||
+ | curl -i -XPOST -u USERNAME: | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | < | ||
+ | HTTP/1.1 100 Continue | ||
+ | |||
+ | HTTP/1.1 204 No Content | ||
+ | Content-Type: | ||
+ | Request-Id: 7099242b-dde8-11e8-9845-000000000000 | ||
+ | X-Influxdb-Build: | ||
+ | X-Influxdb-Version: | ||
+ | X-Request-Id: | ||
+ | Date: Thu, 01 Nov 2018 15:11:45 GMT | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Copier un MEASUREMENT ==== | ||
+ | On utilise la commande '' | ||
+ | <code bash> | ||
+ | SELECT * INTO openweathermapNEW FROM openweathermap GROUP BY * | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Supprimer un TAG / FIELD d'un MEASUREMENT ==== | ||
+ | On reprend la copie d'un MEASUREMENT mais on définit les '' | ||
+ | <code bash> | ||
+ | SELECT time, | ||
+ | </ | ||
+ | |||
+ | On surprime l' | ||
+ | <code bash> | ||
+ | DROP MEASUREMENT openweathermap | ||
+ | </ | ||
+ | |||
+ | Et on recopie intégralement le nouveau MEASUREMENT avec l' | ||
+ | <code bash> | ||
+ | SELECT * INTO openweathermap FROM openweathermapNEW GROUP BY * | ||
+ | </ | ||
+ | |||
+ | |||
+ |