A previous version of this article was written by Toli.
Introduction
Elasticsearch est une plateforme de recherche distribuée et d’analyse de données en temps réel. C’est un choix populaire en raison de sa facilité d’utilisation, de ses fonctionnalités puissantes et de sa scalabilité.
Cet article vous guidera à travers l’installation d’Elasticsearch, sa configuration pour votre cas d’utilisation, la sécurisation de votre installation, et le début du travail avec votre serveur Elasticsearch.
Prérequis
Avant de suivre ce tutoriel, vous aurez besoin de :
- Un serveur Ubuntu 22.04 avec 2 Go de RAM et 2 CPU configuré avec un utilisateur sudo non-root. Vous pouvez y parvenir en suivant le Guide d’installation initiale avec Ubuntu 22.04
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 attendez.
Étape 1 — Installation et Configuration d’Elasticsearch
Les composants Elasticsearch ne sont pas disponibles dans les dépôts de packages par défaut d’Ubuntu. Ils peuvent cependant être installés avec APT après avoir ajouté la liste de sources de packages d’Elastic.
Tous les packages sont signés avec la clé de signature Elasticsearch afin de protéger votre système contre les faux packages. Les packages authentifiés avec la clé seront considérés comme fiables par votre gestionnaire de packages. Dans cette étape, vous importerez la clé publique GPG Elasticsearch et ajouterez la liste de sources de packages Elastic pour installer Elasticsearch.
Pour commencer, utilisez cURL, l’outil en ligne de commande pour transférer des données avec des URL, pour importer la clé publique GPG Elasticsearch dans APT. Notez que nous utilisons les arguments -fsSL pour supprimer tout progrès et erreurs éventuelles (sauf en cas d’échec du serveur) et permettre à cURL de faire une demande sur un nouvel emplacement s’il est redirigé. Redirigez la sortie vers la commande gpg --dearmor
, qui convertit la clé dans un format que apt peut utiliser pour vérifier les packages téléchargés.
Ensuite, ajoutez la liste de sources Elastic au répertoire sources.list.d
, où apt
recherchera de nouvelles sources:
La portion [signed-by=/usr/share/keyrings/elastic.gpg]
du fichier indique à apt d’utiliser la clé que vous avez téléchargée pour vérifier les informations sur le référentiel et les fichiers des packages Elasticsearch.
Ensuite, mettez à jour vos listes de paquets pour que APT lise la nouvelle source Elastic :
Ensuite, installez Elasticsearch avec cette commande :
Appuyez sur Y
lorsque vous êtes invité à confirmer l’installation. Si vous êtes invité à redémarrer des services, appuyez sur ENTER
pour accepter les valeurs par défaut et continuer. Elasticsearch est maintenant installé et prêt à être configuré.
Étape 2 — Configuration d’Elasticsearch
Pour configurer Elasticsearch, nous allons modifier son fichier de configuration principal elasticsearch.yml
où la plupart de ses options de configuration sont stockées. Ce fichier 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
:
Remarque : Le fichier de configuration d’Elasticsearch est au format YAML, ce qui signifie que nous devons respecter le format d’indentation. Assurez-vous de ne pas ajouter d’espaces supplémentaires lorsque vous éditez ce fichier.
Le fichier elasticsearch.yml
fournit des options de configuration pour votre 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 selon vos besoins. Dans le cadre de notre démonstration d’une configuration sur un seul serveur, nous ajusterons uniquement les paramètres pour l’hôte du réseau.
Elasticsearch écoute le trafic de partout sur le port 9200
. Vous voudrez restreindre l’accès extérieur à votre instance Elasticsearch pour empêcher les externes de lire vos données ou d’arrêter votre grappe Elasticsearch via son [API REST] (https://en.wikipedia.org/wiki/Representational_state_transfer). Pour restreindre l’accès et donc augmenter la sécurité, trouvez la ligne qui spécifie network.host
, décommentez-la et remplacez sa valeur par localhost
afin qu’elle ressemble à ceci :
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
Nous avons spécifié localhost
pour que 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 adresse IP à la place de localhost
. Enregistrez et fermez elasticsearch.yml
. Si vous utilisez nano
, vous pouvez le faire en appuyant sur CTRL+X
, suivi de Y
puis de ENTRÉE
.
Voici les paramètres minimum avec lesquels vous pouvez commencer à utiliser Elasticsearch. Maintenant, vous pouvez démarrer Elasticsearch pour la première fois.
Démarrez le service Elasticsearch avec systemctl
. Laissez Elasticsearch quelques instants pour démarrer. Sinon, vous pouvez rencontrer des erreurs concernant l’impossibilité de se connecter.
Ensuite, exécutez la commande suivante pour permettre à Elasticsearch de démarrer à chaque fois que votre serveur démarre :
Avec Elasticsearch 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 quiconque peut accéder à l’API HTTP. Ce n’est pas toujours un risque de sécurité car Elasticsearch n’écoute que sur l’interface de bouclage (c’est-à-dire 127.0.0.1
), qui ne peut être accédée localement que. Ainsi, aucun accès public n’est possible et tant que tous les utilisateurs du serveur sont de confiance, la sécurité peut ne pas être une préoccupation majeure.
Si vous devez autoriser l’accès distant à l’API HTTP, vous pouvez limiter l’exposition 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 du tutoriel préalable Configuration initiale du serveur avec Ubuntu 22.04.
Nous allons maintenant configurer le pare-feu pour autoriser l’accès au port par défaut de l’API HTTP d’Elasticsearch (TCP 9200) pour l’hôte distant de confiance, généralement le serveur que vous utilisez dans une configuration monoserveur, tel que 198.51.100.0
. Pour autoriser l’accès, tapez la commande suivante:
Une fois cela fait, vous pouvez activer UFW avec la commande:
Enfin, vérifiez l’état de UFW avec la commande suivante:
Si vous avez spécifié les règles correctement, vous devriez recevoir une sortie comme ceci:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
UFW devrait maintenant être activé et configuré pour protéger le port 9200 d’Elasticsearch.
Si vous souhaitez investir dans une protection supplémentaire, Elasticsearch propose le plugin commercial Shield à l’achat.
Étape 4 — Test d’Elasticsearch
À ce stade, Elasticsearch devrait fonctionner sur le port 9200. Vous pouvez le tester avec cURL et une requête GET.
Vous devriez recevoir la réponse suivante :
Output{
"name" : "elastic-22",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ",
"version" : {
"number" : "7.17.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
"build_date" : "2022-02-23T22:20:54.153567231Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"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. Sinon, assurez-vous d’avoir suivi les instructions d’installation correctement et d’avoir laissé un certain temps à Elasticsearch pour démarrer complètement.
Pour effectuer une vérification plus approfondie d’Elasticsearch, exécutez la commande suivante :
Dans la sortie de la commande ci-dessus, vous pouvez vérifier tous les paramètres actuels du nœud, du cluster, des chemins d’application, des modules, et plus encore.
Étape 5 — Utilisation d’Elasticsearch
Pour commencer à utiliser Elasticsearch, ajoutons d’abord des données. Elasticsearch utilise une API RESTful, qui répond aux commandes CRUD habituelles : créer, lire, mettre à jour et supprimer. Pour travailler avec, nous utiliserons à nouveau la commande cURL.
Vous pouvez ajouter votre première entrée comme ceci :
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 requête était /tutorial/helloworld/1
avec plusieurs paramètres :
tutorial
est l’indice des données dans Elasticsearch.helloworld
est le type.1
est l’ID de notre entrée dans l’indice et le type ci-dessus.
Vous pouvez récupérer cette première entrée avec une requête HTTP GET.
Ce devrait être le résultat obtenu :
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.
Elasticsearch devrait reconnaître la modification réussie comme ceci :
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 « Bonjour, tout le monde! ». Avec cela, le numéro de version a automatiquement été augmenté à 2
.
Vous avez peut-être remarqué l’argument supplémentaire pretty
dans la requête ci-dessus. Il permet un format lisible par l’homme afin que vous puissiez écrire chaque champ de données sur une nouvelle ligne. Vous pouvez également « embellir » vos résultats lors de la récupération de données pour obtenir une sortie plus lisible en entrant la commande suivante :
Maintenant, la réponse sera formatée pour qu’un humain 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.
Conclusion
Vous avez maintenant installé, configuré et commencé à utiliser Elasticsearch. Pour explorer davantage les fonctionnalités d’Elasticsearch, veuillez vous référer à la documentation officielle d’Elasticsearch.