Vous avez besoin de développer avec ElasticSearch ? Voici un mini-tutorial pour vous donner quelques pistes, et vous partager une expérience récente.

Docker est un système simple qui permet d’isoler une application dans une boîte, tout en partageant les ressources d’une machine hôte. C’est mieux qu’une machine virtuelle car cela ne demande pas autant de ressources. C’est surtout plus simple. Allez faire un tour sur le site de Docker, et installez simplement Docker pour votre environnement. Une fois installé, pour les développeurs sous Mac, vous retrouverez l’icône de Docker dans votre bar d’activité en haut.

Cliquez sur l’icône de Docker, puis sélectionnez « Open Kitematic » comme sur la capture ci-dessus. Cliquez ensuite sur « + New », pour pouvoir ensuite chercher l’image docker « sebp/elk ». Vous pouvez aussi faire « docker pull sebp/elk » en ligne de commande, si vous n’utilisez pas Kitematic.

docker_capture

A noter qu’il sera nécessaire de créer avant tout un compte sur Docker Hub et passer par une étape de vérification de votre email, avant que Kitematic ne fonctionne complètement. Si vous voyez des erreurs 401 plus tard => vérifiez que vous avez correctement ouvert une session sur Docker Hub.

Sélectionnez ici la deuxième image et cliquez sur « Create »

docker_kitematic

Ceci permet de télécharger la dernière version d’ElasticSearch + LogStash + Kibana, correctement configuré, avec un environnement Java.

Si vous souhaitez une autre version d’ElasticSearch, il suffit d’utiliser un des tags du projet. Pratique pour aller chercher une version plus ancienne.

Vous allez me dire : mettre 3 applications dans un conteneur c’est un anti-pattern. Ici il s’avère que pour du développement, c’est parfaitement adapté et non, ce n’est pas un anti-pattern.

J’utilise l’excellent projet elk-docker (https://elk-docker.readthedocs.io/) qui est plutôt bien documenté et qui peut servir de base pour se faire une image de travail intéressante.

Et si je veux rejoindre un Cluster ?

Si vous souhaitez configurer le serveur ElasticSearch dans un cluster, il suffit d’abord de démarrer une image elk, puis de se connecter sur une instance (via le bouton Exec, sur Kitematic / ou via un term avec la commande docker exec -it elk si elk est le nom de votre image). 

Ensuite, vous pouvez éditer le fichier /etc/elastichsearch/elasticsearch.yml, et configurer votre node :

# Fichier /etc/elasticsearch/elasticsearch.yml
# cluster name est le nom du cluster (par defaut elasticsearch)
cluster.name: es-test
# Donner un nom à votre node
node.name: captaindash-dev-1
# En mode Dev, je ne souhaite pas etre master mais juste data node
node.master: false
node.data: true
# Binding special (on est dans un conteneur Docker)
network.host: 0.0.0.0
# L'adresse publique de la machine hôte (ici l'IP de mon MacBook Pro dans le réseau du client)
network.publish_host: "10.99.88.70"
# Le ou les noms des masters à contacter (ici un serveur ES dans un cluster chez mon client... que j'ai anonymisé)
discovery.zen.ping.unicast.hosts: ["srv00193000.info.superclient.fr"]

Vous pouvez alors relancer ElasticSearch (/etc/init.d/elasticsearch restart sur cette image Docker).

Les soucis que vous allez rencontrez :

  • pas la même version d’ElasticSearch que le master (=> utilisez une version identique au(x) master(s))
  • pas la même version majeure de Java (7 au lieu de 8) (=> elk est en Java 8)

Si votre image et votre master n’ont pas les mêmes plugins ElasticSearch, vous devriez avoir cette erreur (j’ai retiré les IP et le nom ici du master du client) :

[WARN ][transport] [captaindash-dev-1] Transport response handler not found of id [8263]
[INFO ][discovery.zen] [captaindash-dev-1] failed to send join request to master [{es-super-master-du-client}{NZD9efGSSpegtM1knKCaGw}{188.xx.xx.xx}{188.xx.xx.xx:9300}], reason [RemoteTransportException[[es-super-master-client][188.xx.xx.xx:9300][internal:discovery/zen/join]]; nested: IllegalStateException[failure when sending a validation request to node]; nested: RemoteTransportException[[captaindash-dev-1][172.xx.xx.xxx:9300][internal:discovery/zen/join/validate]]; nested: IllegalArgumentException[No custom metadata prototype registered for type [licenses], node like missing plugins]; ]

Pour résoudre ce problème, nous avons désactivé les plugins inutiles avec les commandes ES de la 2.4.

Au final, cela permet d’avoir un serveur ElasticSearch en local, qui fonctionne aussi lorsque vous n’êtes plus sur le réseau du client, pour développer.

C’est tout pour aujourd’hui !

Une pensée sur « Environnement de développement ElasticSearch 2.4 avec Docker »

Les commentaires sont fermés.