technique:monitoring:influxdb:metrics_influxdb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
technique:monitoring:influxdb:metrics_influxdb [2020/02/06 16:28] – ↷ Page déplacée de monitoring:influxdb:metrics_influxdb à technique:monitoring:influxdb:metrics_influxdb qduchemitechnique:monitoring:influxdb:metrics_influxdb [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1
Ligne 1: Ligne 1:
-====== Collecte de métriques ====== 
- 
-Picasoft héberge plusieurs services sur son infrastructure. Ces différents logiciel, ainsi que les machines elle-mêmes, peuvent produire un certain nombre de métrique sur leur utilisation ou leur état. Quelques exemples : 
-  * La température CPU d'un serveur physique 
-  * Le nombre d'utilisateurs sur Mattermost 
-  * Le nombre de pad crées sur Etherpad 
-  * L'utilisation RAM d'une machine virtuelle 
- 
-Il est intéressant de collecteur ces mesures et de les stocker, pour ensuite les afficher sous forme graphique et pouvoir observer leur évolution dans le temps. Bien entendu, il ne s'agit pas de collecter des données sur l'utilisation personnelle des services, mais bien de mesurer l'état de notre infrastructure dans son ensemble pour en connaître son évolution. 
- 
-===== Stockage ===== 
-==== InfluxDB ==== 
-Pour le stockage de métriques, on utilise généralement ce qui s'appelle une //Time series database// (ou //TSDB//). Ce sont des bases de données qui sont orientées pour stocker et manipuler des données temporelles, des //Time series//, c'est à dire une suite de points. Chaque point de la série est associé à un instant donné. \\ 
-Par exemple on peut imaginer une série ''cpu_temp'' qui va contenir la mesure de température du CPU. La série sera remplie avec des points ayant pour date le //timestamp// du moment de la mesure et pour valeur la température du CPU. 
- 
-Il existe plusieurs //TSDB//, chacune avec des avantages et des inconvénients. Pour Picasoft, nous avons choisi [[https://www.influxdata.com/time-series-platform/influxdb/|InfluxDB]] qui est une //TSDB// libre et open-source maintenue par la société [[https://www.influxdata.com/|InfluxData]]. Sa version ouverte convient très bien à notre cas d'utilisation (simple) : écrire et lire une série de points pour différentes métriques. 
- 
-==== Installation ==== 
- 
-Pour notre déploiement de InfluxDB, nous avons les besoins suivants :  
-  * déploiement avec Docker 
-  * utilisation derrière notre reverse-proxy Traefik pour la gestion du HTTPS 
-  * gestion des droits d'accès en lecture et écriture (pour ne pas ouvrir notre base sur le grand internet mondial) 
- 
-InfluxDB est relativement simple à déployer dans la mesure où une image Docker officielle très complète existe déjà. De plus tout peut se faire derrière une API HTTP (qui est donc exposée derrière Traefik, en HTTPS) et il est possible de créer des utilisateurs avec des droits d'administration, d'écriture ou de lecture sur différentes bases de données. 
- 
-Picasoft a donc fait [[https://gitlab.utc.fr/picasoft/dockerfiles/tree/master/influxdb|sa propre image Docker]], qui est rien de plus qu'une copie de l'image officielle (qui fait déjà le café). Le README explique comment utiliser l'image. 
- 
-On déploie donc notre InfluxDB sur la VM ''monitoring'', en lui donnant les informations suivantes : 
-  * la base de donnée à créer 
-  * des utilisateurs/mot de passe à créer avec des droits spécifiques 
-  * les labels qui vont bien pour exposer le service derrière Traefik 
-  * un volume pour avoir une persistance des données 
- 
-On obtient un service //Docker Compose// comme celui-ci : 
- 
-<code yaml> 
-influxdb: 
-  image: registry.picasoft.net:5000/influxdb:1.6-1 
-  container_name: influxdb 
-  volumes: 
-    - /DATA/docker/influxdb:/var/lib/influxdb 
-  environment: 
-    - INFLUXDB_DB=databasename 
-    - INFLUXDB_HTTP_AUTH_ENABLED=true 
-    - INFLUXDB_ADMIN_USER=admin_user_name 
-    - INFLUXDB_ADMIN_PASSWORD=admin_user_password 
-    - INFLUXDB_WRITE_USER=write_user_name 
-    - INFLUXDB_WRITE_USER_PASSWORD=write_user_password 
-    - INFLUXDB_READ_USER=read_user_name 
-    - INFLUXDB_READ_USER_PASSWORD=read_user_password  
-  labels: 
-    - "traefik.frontend.rule=Host:influxdb.picasoft.net" 
-    - "traefik.port=8086" 
-    - "traefik.enable=true" 
-  restart: always 
-</code> 
- 
-==== Utilisation ==== 
- 
-InfluxDB est ensuite directement utilisable via son API HTTP sur ''https://influxdb.picasoft.net''. L'utilisation de l'API ne sera pas détaillé ici mais la documentation de InfluxDB propose des ressources très complètes :  
-  * [[http://docs.influxdata.com/influxdb/v1.6/guides/writing_data/|Écrire des données via l'API]] 
-  * [[http://docs.influxdata.com/influxdb/v1.6/guides/querying_data/|Lire des données via l'API]] 
-  * [[http://docs.influxdata.com/influxdb/v1.6/administration/authentication_and_authorization/|Gestion de l'authentification]] 
- 
- 
-===== Collecte ===== 
- 
-La base de donnée étant prête, il faut maintenant remonter les métriques des différents services. Pour cela un script en Python a été développé : le ''[[https://gitlab.utc.fr/picasoft/picasoft-metrics-bot|picasoft-metrics-bot]]''. Il a été conçu de manière assez modulaire, pour permettre facilement l'ajout d'autres services. Son principe de fonctionnement est simple : on lui donne (par fichier de configuration) des informations sur les services, et il va se charger de collecter les informations puis de les pousser dans la base InfluxDB. 
- 
-Pour le moment, il contient un module pour Etherpad et un module pour Mattermost. Le fonctionnement du script, des modules, et de leur développement est largement documenté dans le README. 
- 
-==== Déploiement ==== 
- 
-Le bot a un //Dockerfile// que l'on utilise pour build une image Docker de celui-ci. On le déploie ensuite sur la VM ''monitoring''. Le conteneur va simplement lancer le script à intervalle régulier (dans notre cas, toutes les 60 secondes), poussant ainsi des métriques régulièrement dans InfluxDB. 
- 
-<code yaml> 
-picasoft-metrics-bot: 
-  image: registry.picasoft.net:5000/picasoft-metrics-bot:1.0.0 
-  container_name: picasoft-metrics-bot 
-  volumes: 
-    - /DATA/docker/picasoft-metrics-bot/config/config.json:/code/config/config.json 
-  environment: 
-    - INTERVAL_SECONDS=60 
-  restart: always 
-</code> 
- 
-===== Visualisation ===== 
- 
-Maintenant que la base InfluxDB se remplie avec les métriques de nos services, on souhaite pouvoir les visualiser. Une solution logicielle **très largement répandue** est [[https://grafana.com/|Grafana]]. C'est un logiciel libre qui permet de réaliser un vaste panel de graphiques différents en se connectant à différents types de //TSDB//, le tout dans une interface Web avec un accès fin des droits de lecture et écriture des //dashboards//. 
- 
-==== Déploiement ==== 
- 
-Pour notre déploiement de Grafana, nous avons les besoins suivants :  
-  * déploiement avec Docker 
-  * utilisation derrière notre reverse-proxy Traefik pour la gestion du HTTPS 
-  * gestion des droits d'accès en lecture et écriture 
- 
-Grafana est relativement simple à déployer dans la mesure où une image Docker officielle très complète existe déjà. Tout se passe via une interface Web donc le service est simple à exposer derrière Traefik, et il est possible de créer des utilisateurs et de gérer les droits d'accès aux différentes parties de Grafana. 
- 
-Picasoft a donc fait [[https://gitlab.utc.fr/picasoft/dockerfiles/tree/master/grafana|sa propre image Docker]], qui est rien de plus qu'une copie de l'image officielle. Le README explique comment utiliser l'image. 
- 
-On déploie donc notre Grafana sur la VM ''monitoring'', en lui donnant les informations suivantes : 
-  * le nom et l'URL de l'instance 
-  * un utilisateur/mot de passe d'administration a créer automatiquement 
-  * les labels qui vont bien pour exposer le service derrière Traefik 
-  * un volume pour avoir une persistance des données 
- 
-On obtient un service //Docker Compose// comme celui-ci : 
- 
-<code yaml> 
-grafana: 
-  image: registry.picasoft.net:5000/grafana:5.2.4-1 
-  container_name: grafana 
-  volumes: 
-    - /DATA/docker/grafana:/var/lib/grafana 
-  environment: 
-    - GF_DEFAULT_INSTANCE_NAME=picasoft 
-    - GF_SERVER_ROOT_URL=https://grafana.picasoft.net 
-    - GF_SECURITY_ADMIN_USER=admin_user_name 
-    - GF_SECURITY_ADMIN_PASSWORD=admin_user_password 
-  labels: 
-    - "traefik.frontend.rule=Host:grafana.picasoft.net" 
-    - "traefik.port=3000" 
-    - "traefik.enable=true" 
-  restart: always 
-</code> 
- 
-Comme Grafana s'execute en utilisateur non-root, il faudra correctement donner les droits d'accès au volume qui est monté. L'utilisateur de Grafana a l'UID/GID ''472'', on fait donc ''mkdir -p /DATA/docker/grafana && chown 472:472 /DATA/docker/grafana'' 
- 
-==== Utilisation ==== 
- 
-Une fois l'instance déployée, on peut se connecter dessus à l'aide des identifiants d'administration et commencer à configurer Grafana. 
- 
-Il y a 2 concepts importants à comprendre dans Grafana : les //datasources// et les //dashboards//. \\ 
-Les //datasources// sont, comme le nom l'indique, des sources de données pour Grafana. Ce sont des connecteurs qui peuvent se connecter à un grand nombre de base de données : InfluxDB, Prometheus, OpenTSDB, etc. \\ 
-Les //dashboards// sont tout simplement des vues sur lesquelles il est possible de mettre plusieurs graphiques à visualiser. 
- 
-=== Datasources === 
- 
-Dans notre cas, Picasoft a simplement configuré un //datasource// de type InfluxDB. Il suffit de lui indiquer l'URL de InfluxDB ainsi que les identifiants permettant de lire la base de donnée. Il est important de spécifier, pour des raisons de sécurité, des accès en lecture seule à Grafana puisqu'il n'y a pas besoin d'aller écrire dans la base. 
- 
-=== Dashboards === 
- 
-Pour Picasoft, il convient de créer un //dashboard// pour chaque service, et d'y afficher l'ensemble des métriques du service. Nous n'allons pas entrer dans le détail sur la configuration de //dashboards// Grafana ici, car [[http://docs.grafana.org/|la documentation]] est relativement complète. 
- 
-Quelques ressources :  
-  * [[http://docs.grafana.org/features/datasources/influxdb/|Utiliser Grafana avec InfluxDB]] 
-  * [[https://gitlab.utc.fr/picasoft/picasoft-metrics-bot|Liste des métriques de Picasoft]] 
  
  • technique/monitoring/influxdb/metrics_influxdb.1581002903.txt.gz
  • de qduchemi