Elasticsearch est une plateforme de recherche distribuée et d’analyse de données en temps réel. Il s’agit d’un choix populaire 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.
Avant de suivre ce tutoriel, vous aurez besoin de :
Un serveur Ubuntu 20.04 avec 4 Go de RAM et 2 CPU installé avec un utilisateur sudo non root. Vous pouvez y parvenir en suivant la configuration initiale du serveur avec Ubuntu 20.04
OpenJDK 11 installé
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.
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é.
Pour configurer Elasticsearch, nous allons modifier son principal fichier de configuration elasticsearch.yml
, dans lequel la plupart de ses options de configuration sont stockées. 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] (https://en.wikipedia.org/wiki/Representational_state_transfer). Pour restreindre l’accès et donc accroître la sécurité, trouvez la ligne qui précise network.host
, décommentez-le et remplacez sa valeur par localhost
de façon à ce qu’il ressemble à ça :
. . .
# ---------------------------------- 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 les IP liés. 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 nano
vous 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é.
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 20.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, vous devriez recevoir un résultat similaire à ceci :
OutputStatus: 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 pour l’achat.
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 recevoir la réponse suivante :
Output{
"name" : "elasticsearch-ubuntu20-04",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Si vous recevez 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.
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,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Dans l’exemple ci-dessus, nous avons modifié le message
de la première entrée en « Hello, People ». Avec cela, le numéro de version a été automatiquement augmenté à 2
.
Vous avez peut-être remarqué l’argument supplémentaire pretty
dans la demande 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(e) utilisateur/utilisatrice puisse l’analyser :
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"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.
Vous avez maintenant installé, configuré et commencé à utiliser Elasticsearch. Pour explorer davantage les fonctionnalités d’Elasticsearch, veuillez consulter la documentation officielle d’Elasticsearch.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.