Table des matières
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 : Wifi Indoor Sensor, Raymarine ST50 I2C
- Collecte des données Linky : Wifi Linky Collector
- Collecte de données Freebox : 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
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
Telegraf
Pour l'installation ça se passe ici : 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 :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 Telegraf system overview et de la configuration de Telegraf associée.
C'est beau :
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 InfluxDB Docker et de la configuration de Telegraf associée. C'est beau :
Métriques Traefik
Ca se passe coté Traefik. Let's go to Traefic Reverse Proxy
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 :
Et on pousse de la data pour tester (le timestamp est facultatif) :
echo -en "measurement,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]"> /dev/udp/x.x.x.x/8089
Pour rappel du protocole à utiliser : docs.influxdata.com/influxdb/write_protocols/line_protocol_reference
Collectd Input Influxdb
Exemple avec une dokerisation de collectd : blog.laputa.io/try-influxdb-and-grafana-by-docker
Purge intelligente - Downsampling
Documentation
https://www.guillaume-leduc.fr/monitoring-de-votre-serveur-avec-telegraf-influxdb-et-grafana.html (source en pdf )
https://blog.octo.com/monitorer-votre-infra-avec-telegraf-influxdb-et-grafana/
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/