{{ :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/]]