Tutorial

Comment installer et configurer Elasticsearch sur Ubuntu 18.04

UbuntuElasticsearchUbuntu 18.04

Introduction

Elasticsearch est une plateforme de recherche distribuée et d'analyse de données en temps réel. Il s'agit d'un choix très répandu en raison de sa facilité d'utilisation, de ses puissantes fonctionnalités et de son évolutivité.

Cet article vous guidera pour installer Elasticsearch, le configurer pour votre cas d'utilisation, sécuriser votre installation, et commencer à travailler avec votre serveur Elasticsearch.

Conditions préalables

Avant de suivre ce tutoriel, vous aurez besoin de :

Pour ce tutoriel, nous travaillerons avec la quantité minimale de CPU et de RAM requise pour exécuter Elasticsearch. Notez que la quantité de CPU, de RAM et de stockage dont votre serveur Elasticsearch aura besoin dépend du volume de journaux que vous prévoyez.

Étape 1 — Installation et configuration d'Elasticsearch

Les composants Elasticsearch ne sont pas disponibles dans les dépôts de paquets par défaut d'Ubuntu. Ils peuvent cependant être installés avec APT après avoir ajouté la liste des sources des paquets d'Elastic.

Tous les paquets sont signés avec la clé de signature Elasticsearch afin de protéger votre système contre l'usurpation de paquets. Les paquets qui ont été authentifiés à l'aide de la clé seront considérés comme fiables par votre gestionnaire de paquets. Dans cette étape, vous allez importer la clé GPG publique d'Elasticsearch et ajouter la liste des sources du paquet Elastic afin d'installer Elasticsearch.

Pour commencer, utilisez cURL, l'outil de ligne de commande pour le transfert de données avec URL pour importer la clé GPG publique d'Elasticsearch dans APT. Notez que nous utilisons les arguments -fsSL pour faire taire toute progression et toute erreur éventuelle (sauf en cas de panne de serveur) et pour permettre à cURL d'effectuer une requête sur un nouvel emplacement s'il est redirigé. Transmettez la sortie de la commande cURL au programme apt-key, qui ajoute la clé GPG publique à l'APT.

  • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Ensuite, ajoutez la liste des sources Elastic au répertoire sources.list.d où APT cherchera de nouvelles sources :

  • echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Ensuite, mettez à jour vos listes de paquets afin qu'APT puisse lire la nouvelle source Elastic :

  • sudo apt update

Installez ensuite Elasticsearch avec cette commande :

  • sudo apt install elasticsearch

Elasticsearch est maintenant installé et prêt à être configuré.

Étape 2 — Configurer Elasticsearch

Pour configurer Elasticsearch, nous allons éditer ses fichiers de configuration. Elasticsearch possède trois fichiers de configuration :

  • elasticsearch.yml pour configurer Elasticsearch, le fichier de configuration principal 
  • jvm.options pour configurer les paramètres d’ Elasticsearch Java Virtual Machine (JVM)
  • log4j2.properties pour configurer la journalisation d'Elasticsearch

Pour ce tutoriel, nous nous intéressons au fichier elasticsearch.yml où sont stockées la plupart des options de configuration. Ce dossier se trouve dans le répertoire /etc/elasticsearch. 

Utilisez votre éditeur de texte préféré pour modifier le fichier de configuration d'Elasticsearch. Ici, nous utiliserons nano :

  • sudo nano /etc/elasticsearch/elasticsearch.yml

Note : Le fichier de configuration d'Elasticsearch est au format YAML, ce qui signifie que nous devons conserver le format d'indentation. Veillez à ne pas ajouter d'espaces supplémentaires lorsque vous modifiez ce fichier.

Le site elasticsearch.yml fournit des options de configuration pour votre/vos cluster, nœud, chemins, mémoire, réseau, découverte et passerelle. La plupart de ces options sont préconfigurées dans le fichier, mais vous pouvez les modifier en fonction de vos besoins. Pour les besoins de notre démonstration d'une configuration à serveur unique, nous n'ajusterons les paramètres que pour l'hôte du réseau.

Elasticsearch écoute le trafic de partout sur le port 9200. Vous voudrez limiter l'accès extérieur à votre instance Elasticsearch pour empêcher les personnes extérieures de lire vos données ou de fermer votre cluster Elasticsearch par le biais de son API REST. Pour restreindre l'accès et donc accroître la sécurité, trouvez la ligne qui précise network.host, le décommenter et remplacer sa valeur par localhost de façon à ce qu'il ressemble à ça : 

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

Nous avons spécifié localhost de sorte qu'Elasticsearch écoute sur toutes les interfaces et adresses IP liées. Si vous souhaitez qu'il n'écoute que sur une interface spécifique, vous pouvez spécifier son IP au lieu de localhost. Sauvegardez et fermez elasticsearch.yml. Si vous utilisez nanovous pouvez le faire en appuyant sur CTRL+X, suivi de Y et ensuite ENTRÉE. 

Ce sont les paramètres minimums avec lesquels vous pouvez commencer pour utiliser Elasticsearch. Vous pouvez maintenant lancer Elasticsearch pour la première fois.

Démarrez le service Elasticsearch avec systemctl. Donnez à Elasticsearch quelques instants pour démarrer. Dans le cas contraire, vous risquez d'obtenir des erreurs en ne pouvant pas vous connecter.

  • sudo systemctl start elasticsearch

Ensuite, exécutez la commande suivante pour permettre à Elasticsearch de démarrer à chaque fois que votre serveur démarre :

  • sudo systemctl enable elasticsearch

Elasticsearch étant activé au démarrage, passons à l'étape suivante pour discuter de la sécurité.

Étape 3 — Sécurisation d'Elasticsearch

Par défaut, Elasticsearch peut être contrôlé par toute personne pouvant accéder à l'API HTTP. Ce n'est pas toujours un risque pour la sécurité car Elasticsearch n'écoute que sur l'interface de bouclage (c'est-à-dire 127.0.0.1), qui n'est accessible que localement. Ainsi, aucun accès public n'est possible et tant que tous les utilisateurs du serveur sont fiables, la sécurité peut ne pas être une préoccupation majeure.

Si vous devez autoriser l'accès à distance à l'API HTTP, vous pouvez limiter l'exposition du réseau avec le pare-feu par défaut d'Ubuntu, UFW. Ce pare-feu devrait déjà être activé si vous avez suivi les étapes de la condition préalable dans le tutoriel Configuration initiale du serveur avec Ubuntu 18.04. 

Nous allons maintenant configurer le pare-feu pour permettre l'accès au port par défaut de l'API HTTP d'Elasticsearch (TCP 9200) pour l'hôte à distance fiable, généralement le serveur que vous utilisez dans une configuration à serveur unique, tel que198.51.100.0. Pour autoriser l'accès, tapez la commande suivante :

  • sudo ufw allow from 198.51.100.0 to any port 9200

Une fois que cela est fait, vous pouvez activer l'UFW avec la commande :

  • sudo ufw enable

Enfin, vérifiez le statut de l'UFW avec la commande suivante :

  • sudo ufw status

Si vous avez correctement spécifié les règles, le résultat devrait ressembler à ceci :

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

L'UFW devrait maintenant être activé et mis en place pour protéger le port 9200 d'Elasticsearch.

Si vous souhaitez investir dans une protection supplémentaire, Elasticsearch vous propose la solution commerciale plugin Shield, disponible à l'achat.

Étape 4 — Tester Elasticsearch

Maintenant, Elasticsearch devrait fonctionner sur le port 9200. Vous pouvez le tester avec cURL et une demande GET.

  • curl -X GET 'http://localhost:9200'

Vous devriez voir la réponse suivante :

Output
{ "node.name" : "My First Node", "cluster.name" : "mycluster1", "version" : { "number" : "2.3.1", "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39", "build_timestamp" : "2020-04-04T12:25:05Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" }

Si vous voyez une réponse similaire à celle ci-dessus, Elasticsearch fonctionne correctement. Si ce n'est pas le cas, assurez-vous que vous avez suivi correctement les instructions d'installation et que vous avez laissé un certain temps pour qu'Elasticsearch puisse démarrer complètement.

Pour effectuer une vérification plus approfondie d'Elasticsearch, exécutez la commande suivante :

  • curl -XGET 'http://localhost:9200/_nodes?pretty'

Dans le résultat de la commande ci-dessus, vous pouvez vérifier tous les paramètres actuels pour le nœud, le cluster, les chemins d'application, les modules, et plus encore.

Étape 5 — Utiliser Elasticsearch

Pour commencer à utiliser Elasticsearch, ajoutons d'abord quelques données. Elasticsearch utilise une API RESTful, qui répond aux commandes CRUD habituelles : create, read, update, et delete. Pour l'utiliser, nous utiliserons à nouveau la commande cURL.

Vous pouvez ajouter votre première entrée de la sorte :

  • curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Vous devriez recevoir la réponse suivante :

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

Avec cURL, nous avons envoyé une requête HTTP POST au serveur Elasticsearch. L'URI de la demande était /tutorial/helloworld/1 avec plusieurs paramètres : 

  • tutorial est l'index des données dans Elasticsearch. 
  • helloworld est le type. 
  • 1 est l'identifiant de notre entrée sous l'index et le type ci-dessus. 

Vous pouvez récupérer cette première entrée avec une requête HTTP GET.

  • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Le résultat obtenu devrait être :

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

Pour modifier une entrée existante, vous pouvez utiliser une requête HTTP PUT.

  • curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  • {
  • "message": "Hello, People!"
  • }'

Elasticsearch devrait reconnaître une modification réussie comme celle-ci :

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "created" : false }

Dans l'exemple ci-dessus, nous avons modifié le message de la première entrée en « Hello, People ». Le numéro de version a ainsi été automatiquement augmenté, passant à 2. 

Vous avez peut-être remarqué l'argument supplémentaire pretty dans la requête ci-dessus. Il permet un format lisible par un(e) utilisateur/utilisatrice, de sorte que vous pouvez écrire chaque champ de données sur une nouvelle ligne. Vous pouvez également « embellir » vos résultats lors de la récupération des données pour obtenir un résultat plus lisible, en entrant la commande suivante :

  • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

La réponse sera maintenant formatée pour qu'un utilisateur/une utilisatrice puisse l'analyser :

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "found" : true, "_source" : { "message" : "Hello, People!" } }

Nous avons maintenant ajouté et interrogé des données dans Elasticsearch. Pour en savoir plus sur les autres opérations, veuillez consulter la documentation de l'API. 

Conclusion

Vous avez maintenant installé, configuré et commencé à utiliser Elasticsearch. Depuis la première version d'Elasticsearch, Elastic a développé trois outils supplémentaires — Logstash, Kabana et Beats — à utiliser en conjonction avec Elasticsearch dans le cadre de l'Elastic Stack. Utilisés ensemble, ces outils vous permettent de rechercher, d'analyser et de visualiser les journaux générés à partir de n'importe quelle source et dans n'importe quel format, selon une pratique connue sous le nom de journalisation centralisée. Pour commencer avec Elastic Stack sur Ubuntu 18.04, veuillez consulter notre guide Comment installer Elasticsearch, Logstash, et Kibana (Elastic Stack) sur Ubuntu 18.04. 

Creative Commons License