Dans l’optique d’avoir un suivi plus simple et plus précis de l’état de nos machines, nous avons choisi de mettre en place une solution de monitoring.
Afin de pouvoir surveiller l’activité des services fournis par Picasoft, nous avons choisi de mettre en place une pile ELK. Cette solution open source, développée par l’entreprise Elastic, repose sur trois logiciels libres: Logstash, Elasticsearch et Kibana. Ensemble ils permettent de parser, indexer et présenter de gros volumes de données issues des messages de logs, sous forme de dashboards.
Les composants de la stack ELK sont eux même des conteneurs Docker s’exécutant dans une VM dédiée au monitoring.
Logstash est un ETL (Extract-transform-load). Il peut recevoir les logs de différentes façons et d’une multitude de sources différentes; aussi bien via le réseau qu’en lisant directement dans un fichier texte. Ces logs sont ensuite parsés, filtrés (si besoin est) et renvoyés vers la/les source(s) de stockage désirée(s). Dans notre cas, le stockage est une base de donnée Elasticsearch.
Pour décider du/des type(s) d’input(s), des actions à effectuer sur les logs, et du/des type(s) d’output(s), Logstash est configurable au travers du fichier /DATA/monitoring/logstash/logstash.conf
.
Dans l’infrastructure de monitoring des services, le conteneur Logstash écoute les logs de type syslog sur le port 1234 (port choisi arbitrairement, il peut être changé sans problème si besoin est).
Vous pouvez trouver ici plus de détails concernant la configuration de Logstash.
Elasticsearch est un moteur de recherche et d’indexation de données pouvant être mis à jour et requêté via une API REST. Les données manipulées par Elasticsearch sont au format JSON, ce qui rend cet outil indépendant de toute plateforme et de tout langage de programmation. Elasticsearch est basé sur le projet Lucene de la fondation Apache, qui permet d’indexer et de chercher du texte.
Vous pouvez trouver ici plus de détails concernant la configuration d’Elasticsearch.
Kibana est une interface Web (extension d’Elasticsearch) permettant la visualisation de données au moyen de graphiques. L’utilisation de Kibana est relativement simple et ne demande quasiment pas de configuration. Pour fonctionner, Kibana doit seulement connaître l’adresse du service Elasticsearch. Kibana va directement tenter de s’y connecter au lancement, et l’utilisateur pourra accéder à l’interface graphique de Kibana qui, par défaut, est accessible via le port 5601.
Vous pouvez trouver ici plus de détails concernant l’utilisation de Kibana.
Afin de déployer les services de monitoring en une seule ligne de commande, nous avons utilisé docker-compose. Pour ce faire nous avons défini les conteneurs à déployer, les dépendances entre eux et les différents mapping (de volume et/ou de ports) dans un docker-compose.yml
qui permet de configurer le déploiement des multiples conteneurs. Ce fichier de configuration se trouve dans le dossier /DATA/monitoring
.
version: '3' services: elasticsearch: hostname: elasticsearch image: elasticsearch ports: - "9200:9200" - "9300:9300" volumes: - "./elasticsearch/esdata:/var/lib/elasticsearch" logstash: hostname: logstash image: logstash volumes: - "./logstash/logstash.conf:/etc/logstash/conf.d/logstash.conf" command: -f /etc/logstash/conf.d/logstash.conf ports: - "1234:1234" depends_on: - elasticsearch kibana: hostname: kibana image: kibana ports: - "5601:5601" depends_on: - elasticsearch
Tout au long de la mise en place de l’infrastructure de monitoring, nous avons rencontré des problèmes. Ces derniers ont mené à de nombreuses réflexions, qui sont détaillées dans cette rubrique dans le but de pérenniser les connaissances/recherches faites durant la TX P2017.
Si vous souhaitez avoir des détails sur les réflexions menées lors de la mise en place de l’infrastructure de monitoring, cliquez ici