Outils pour utilisateurs

Outils du site


informatique:docker:influxdata_stack

Influxdata Stack

Objectif

Mettre à disposition un solution de collecte/stockage/restitution de séries temporelles.
Quelques idées de données source :

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 kiss:

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

informatique/docker/influxdata_stack.txt · Dernière modification : 2024/10/14 17:51 de 127.0.0.1