Vagrant – Installation d’Elasticsearch et de Kibana

Maintenant que Java est installé, nous allons passer à l’installation d’Elasticsearch et de Kibana.

Pour rappel, l’ensemble des fichiers de configuration peut se retrouver sur GitHub : https://github.com/bdauvissat/ELKVagrantAnsible

Les procédures d’installation sont détaillées sur les pages suivantes :

Si on regarde le début de ces procédures, on note que les premières étapes sont communes. Nous allons donc factoriser ces points et ne les jouer qu’une seule fois.

On va donc créer un rôle « elastic_common » et le répertoire qui lui correspond.

Dans le main.yml présent dans le sous-répertoire, on va donc effectuer les étapes suivantes :

  • Installation de la clé publique Elastic
  • Installation du package apt-transport-https
  • Sauvegarde de la définition du repository
---
- name: Install Elastic public key
  apt_key:
    url: "https://artifacts.elastic.co/GPG-KEY-elasticsearch"
    state: present

- name: Update repositories cache and install apt-transport-https package
  apt:
    name: apt-transport-https
    state: latest

- name: Save the repository definition
  shell: echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
…

Dans le fichier FirstVM.yml, on ajoute donc le rôle elastic_common

---
- name: Tuto Ansible
  hosts: all
  become: true
  roles:
    - role: java
    - role: elastic_common
...

Une fois le fichier sauvegardé, il faut relancer l’installation avec la commande « vagrant provision ».

Une fois la partie commune effectuée, on peut passer à Elasticsearch en créant le rôle correspondant.

Le fichier main.yml de la tâche Elasticsearch doit alors ressembler à ça :

---
- name: Install Elasticsearch
  apt:
    name: elasticsearch
    update_cache: yes

- name: Enable Elasticsearch service
  service:
    name: elasticsearch.service
    state: started
    enabled: yes

- name: Config file for Elasticsearch
  template:
    src: ../templates/elasticsearch.yml.j2
    dest: /etc/elasticsearch/elasticsearch.yml
    owner: root
    group: elasticsearch

- name: Restart Elasticsearch service
  service:
    name: elasticsearch.service
    state: restarted

On commence par installer Elasticsearch. Ensuite, on créé le service correspondant. Puis on modifie le fichier de configuration et enfin, on redémarre le service.

Dans la création du service, l’attribut enabled permet de spécifier si le service doit être démarré automatiquement au démarrage de la machine ou pas.

La mise en place du fichier de configuration permet placer un template de fichier de configuration dans le sous-répertoire « templates » du rôle elasticsearch. Ce fichier doit avoir une extension « j2 ».

On précise alors où se trouve le fichier de template, où il doit être copié et avec quel utilisateur cette action doit être effectuée.

Le fichier de configuration pour Elastissearch est modifié :

# ---------------------------------- Network --------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0

La modification de la propriété « network.host » permet de spécifier qui peut se connecter à elasticsearch. L’adresse IP 0.0.0.0 indique que la connexion est ouverte à tous.

Il reste maintenant à mettre à jour le fichier FirstVM.yml pour lui ajouter le rôle elasticsearch puis à relancer un « vagrant provision » pour prendre en compte ces nouveaux éléments.

Le principe est le même pour l’installation de Kibana :

---
- name: Install Kibana
  apt:
    name: kibana
    update_cache: yes

- name: Enable kibana service
  service:
    name: kibana.service
    state: started
    enabled: yes

- name: Config file for Kibana
  template:
    src: ../templates/kibana.yml.j2
    dest: /etc/kibana/kibana.yml
    owner: root
    group: root

- name: Restart Kibana service
  service:
    name: kibana.service
    state: restarted

Le fichier de configuration pour Kibana est modifié  :

# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://127.0.0.1:9200"
host: 0.0.0.0

Comme pour Elasticsearch, on définit qui peut se connecter avec la propriété « host ». On définit également l’URL de connexion à Elasticsearch avec la propriété « elasticsearch.url ».

Et le fichier FirstVM.yml ressemble maintenant à

---
- name: Tuto Ansible
  hosts: all
  become: true
  roles:
    - role: java
    - role: elastic_common
    - role: elasticsearch
    - role: kibana
...

Un nouveau lancement de « vagrant provision » va achever l’installation de Kibana.

On peut alors vérifier qu’Elasticsearch répond bien lorsqu’on l’interroge depuis notre machine locale :

curl -XGET '127.0.0.1:9200/?pretty'

Et là, cela ne répond pas.

Idem si on essaie d’accéder à Kibana via un navigateur web avec l’URL http://127.0.0.1:5601/

Cela vient du fait que les ports n’ont pas été redirigés de la VM vers la machine locale.

Il faut donc modifier le Vagrantfile pour ajouter cette translation de port :

#Configure forwarded ports
config.vm.network "forwarded_port", guest: 9200, host: 9200, auto_correct: true
config.vm.network "forwarded_port", guest: 9300, host: 9300, auto_correct: true
config.vm.network "forwarded_port", guest: 5601, host: 5601, auto_correct: true

Comme la modification porte sur la VM elle-même, juste l’arrêter et la relancer ne suffit pas à ouvrir les ports. Il faut donc détruire la VM (vagrant destroy) puis la relancer (vagrant up) avant de tester à nouveau la connexion à Elasticsearch et à Kibana.

 

A propos Benjamin

Développeur Java, évangéliste du logiciel libre auprès de mes proches, j'essaie de concilier tout ça avec la curiosité qui m'a toujours fait avancer.
Ce contenu a été publié dans Ansible, Elasticsearch, Industrialisation, Kibana, Vagrant, avec comme mot(s)-clé(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.