{{ :informatique:docker:influxdata_stack:logo_influxdata.png?nolink&300x59}}
====== Influxdata Stack ======
===== Objectif =====
Mettre à disposition un solution de collecte/stockage/restitution de séries temporelles.\\
Quelques idées de données source :
* Collecte de données météo : [[:electronique:micro_controleurs:esp8266:wifi_indoor_sensor|]], [[:electronique:micro_controleurs:attiny85:i2c_wind_sensor|]]
* Collecte des données Linky : [[:electronique:micro_controleurs:esp8266:wifi_linky_collector|]]
* Collecte de données Freebox : [[https://blog.seboss666.info/2016/07/monitoring-de-synchronisation-adsl-avec-telegraf-influxdb-grafana-et-un-peu-dhuile-de-coude/|blog.seboss666.info/monitoring-de-synchronisation-adsl]]
* Disposer d'une database pour datalogguers ..
Mise en oeuvre de 2 des 4 briques TICK : Telegraf, Inluxdb. La restitution est assurée via Grafana.
===== Architecture =====
{{:informatique:docker:influxdata_stack:influxdb_archi.png?direct&501x467}}
===== Installation =====
==== Influxdb ====
Lancement docker Influxdb : ''docker run -d –user=1000:1000 –restart=always –name="Influxdb" -p 8086:8086 -v /home/florian/Documents/Dockers/Docker_Data/InfluxDB:/var/lib/influxdb influxdb'' \\ Visualisation de la conf : ''docker exec -it Influxdb influxd config'' \\ \\ Doc associée : [[https://hub.docker.com/_/influxdb|https://hub.docker.com/_/influxdb]]
==== Telegraf ====
Pour l'installation ça se passe ici : [[https://docs.influxdata.com/telegraf/v1.9/introduction/installation/|docs.influxdata.com/telegraf/installation]] \\
Une fois n'est pas coutume je ne l'installe pas dans un docker → je souhaite exploiter la collecte de métriques système, je préfère donc un démon standard. \\
J'ai trouvé un exemple de collecte système avec collectd en docker voir paragraphe collectd to Influxdb
==== Grafana ====
Lancement du docker Grafana : ''docker run -d –network=host –restart=always –name="Grafana" -p 3000:000 grafana/grafana''
===== Requeter InfluxDB =====
Lancement du client : ''docker exec -it Influxdb influx'' \\ Les commandes courantes :[[https://docs.influxdata.com/influxdb/v1.7/query_language/|docs.influxdata.com/query_language]]
===== Mettre en place des collectes =====
==== Telegraf vers Http Input Influxdb ====
=== Métriques système ===
Création database:
florian@ubuntuNAS:~/Documents/Dockers/Docker_Data/InfluxDB$ docker exec -it Influxdb influx
Connected to http://localhost:8086 version 1.7.3
InfluxDB shell version: 1.7.3
Enter an InfluxQL query> SHOW DATABASES;
name: databases
name
----
_internal> CREATE DATABASE system_metrics> show databases;
name: databases
name
----
_internal
system_metrics> CREATE USER system_metrics with password '********'> GRANT ALL ON system_metrics to system_metrics
Configurer télégraf avec des inputs système. Exemple dans ''/etc/telegraf/telegraf.conf'' :
## INPUT ##
[[inputs.cpu|]]
percpu = true
totalcpu = true
fielddrop = ["time_*"]
[inputs.cpu.tags]
influxdb_database = "system_metrics"
[[inputs.disk|]]
ignore_fs = ["tmpfs", "devtmpfs"]
[inputs.disk.tags]
influxdb_database = "system_metrics"
## OUTPOUT# #
[[outputs.influxdb|]]
database = "system_metrics"
urls = ["http://127.0.0.1:8086"]
username = "system_metrics"
password = "********"
[outputs.influxdb.tagpass]
influxdb_database = ["system_metrics"]
Toute la conf utilisée est proposée dans la doc du dashboard qui suit.
Installation du dashboard [[https://grafana.com/dashboards/914|Telegraf system overview]] et de la configuration de Telegraf associée. \\
C'est beau : \\
{{:informatique:docker:influxdata_stack:system_overview.png?direct&1024x527}}
=== Métriques docker ===
Création d'une database à l'image de ce qui a été fait pour les métriques système.\\
Configurer télégraf avec un input Docker. Exemple dans ''/etc/telegraf/telegraf.conf'' :
## INPUT ##
[[inputs.docker|]]
endpoint = "unix:///var/run/docker.sock"
gather_services = false
container_name_include = []
container_name_exclude = []
timeout = "5s"
perdevice = true
## Whether to report for each container total blkio and network stats or not
total = false
## docker labels to include and exclude as tags. Globs accepted.
## Note that an empty array for both will include all labels as tags
docker_label_include = []
docker_label_exclude = []
[inputs.docker.tags]
influxdb_database = "docker_metrics"
## OUTPUT ##
[[outputs.influxdb|]]
database = "docker_metrics"
urls = ["http://127.0.0.1:8086"]
username = "docker_metrics"
password = "**********"
retention_policy = ""
write_consistency = "any"
timeout = "5s"
[outputs.influxdb.tagpass]
influxdb_database = ["docker_metrics"]
Penser à ajouter telegraf au group docker : ''usermod -aG docker telegraf''
Installation du dashboard[[https://grafana.com/dashboards/3056|]] [[https://grafana.com/dashboards/1150|InfluxDB Docker]] et de la configuration de Telegraf associée.
C'est beau :
{{:informatique:docker:influxdata_stack:docker_overview.png?direct&1024x560}}
=== Métriques Traefik ===
Ca se passe coté Traefik. Let's go to [[:informatique:docker:traefik|]]
==== UDP Input Influxdb pour l'iot ====
Modifier le fichier de conf ''influxdb.conf'' (on peut se mettre autant de sources udp que l'on veut en dupliquant le pavé) :
[[udp|]]
enabled = true
bind-address = ":8089"
database = "data_base_source"
retention-policy = ""
batch-size = 5000
batch-pending = 10
read-buffer = 0
batch-timeout = "1s"
precision = ""
En docker **penser à mapper le port .. en UDP** {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/kiss.png?nolink&23x23|kiss}}:
{{:informatique:docker:influxdata_stack:udp_docker_conf.png?nolink&300x101}}
Et on pousse de la data pour tester (le timestamp est facultatif) :
echo -en "measurement,=[,=]] =[,=] []"> /dev/udp/x.x.x.x/8089
Pour rappel du protocole à utiliser : [[http://docs.influxdata.com/influxdb/write_protocols/line_protocol_reference|docs.influxdata.com/influxdb/write_protocols/line_protocol_reference]]
==== Collectd Input Influxdb ====
Exemple avec une dokerisation de collectd : [[https://blog.laputa.io/try-influxdb-and-grafana-by-docker-6b4d50c6a446|blog.laputa.io/try-influxdb-and-grafana-by-docker]]
===== Purge intelligente - Downsampling =====
[[https://bostik.iki.fi/aivoituksia/projects/influxdb-cascaded-downsampling.html#sf-influxdb-cascaded-downsampling-1|bostik.iki.fi/influxdb-cascaded-downsampling]]
===== Documentation =====
[[https://www.guillaume-leduc.fr/monitoring-de-votre-serveur-avec-telegraf-influxdb-et-grafana.html|https://www.guillaume-leduc.fr/monitoring-de-votre-serveur-avec-telegraf-influxdb-et-grafana.html]] ({{:informatique:docker:influxdata_stack:leduc_influx_stack.pdf|source en pdf}} )\\
[[https://blog.octo.com/monitorer-votre-infra-avec-telegraf-influxdb-et-grafana/|https://blog.octo.com/monitorer-votre-infra-avec-telegraf-influxdb-et-grafana/]]\\
[[https://linuxfr.org/users/m4rotte/journaux/base-de-series-temporelles|https://linuxfr.org/users/m4rotte/journaux/base-de-series-temporelles]]\\
[[https://www.google.fr/amp/s/phmarduino.wordpress.com/2017/12/02/visualisez-vos-donnees-iot/amp/|https://www.google.fr/amp/s/phmarduino.wordpress.com/2017/12/02/visualisez-vos-donnees-iot/amp/]]