A previous version of this article was written by Toli.
Inleiding
Elasticsearch is een platform voor gedistribueerd zoeken en analyseren van gegevens in realtime. Het is een populaire keuze vanwege zijn gebruiksvriendelijkheid, krachtige functies en schaalbaarheid.
Deze handleiding zal u begeleiden bij het installeren van Elasticsearch, het configureren ervan voor uw gebruiksscenario, het beveiligen van uw installatie en het beginnen met werken met uw Elasticsearch-server.
Vereisten
Voordat u deze handleiding volgt, heeft u nodig:
- Een Ubuntu 22.04-server met 2 GB RAM en 2 CPU’s opgezet met een niet-root sudo-gebruiker. U kunt dit bereiken door de Initiële serverconfiguratie met Ubuntu 22.04 te volgen.
Voor deze tutorial zullen we werken met de minimale hoeveelheid CPU en RAM die nodig is om Elasticsearch uit te voeren. Merk op dat de hoeveelheid CPU, RAM en opslag die uw Elasticsearch-server nodig heeft, afhangt van het volume aan logs dat u verwacht.
Stap 1 — Elasticsearch installeren en configureren
De Elasticsearch-componenten zijn niet beschikbaar in de standaard pakketbronnen van Ubuntu. Ze kunnen echter worden geïnstalleerd met APT nadat de pakketbronnen van Elastic zijn toegevoegd.
Alle pakketten zijn ondertekend met de Elasticsearch-ondertekeningsleutel om uw systeem te beschermen tegen pakketvervalsing. Pakketten die zijn geauthenticeerd met de sleutel worden door uw pakketbeheerder als vertrouwd beschouwd. In deze stap importeert u de openbare GPG-sleutel van Elasticsearch en voegt u de Elastic-pakketbron toe om Elasticsearch te installeren.
Gebruik om te beginnen cURL, het commandoregelhulpprogramma voor het overdragen van gegevens via URL’s, om de openbare GPG-sleutel van Elasticsearch in APT te importeren. Let op dat we de argumenten -fsSL gebruiken om alle voortgang en mogelijke fouten te onderdrukken (behalve bij een serverfout) en om cURL toe te staan een verzoek te doen naar een nieuwe locatie als deze wordt doorgestuurd. Leid de uitvoer door naar het commando gpg --dearmor
, dat de sleutel converteert naar een formaat dat apt kan gebruiken om gedownloade pakketten te verifiëren.
Voeg vervolgens de Elastic-bronlijst toe aan de sources.list.d
-directory, waar apt
zal zoeken naar nieuwe bronnen:
Het gedeelte [signed-by=/usr/share/keyrings/elastic.gpg]
van het bestand geeft aan apt opdracht om de gedownloade sleutel te gebruiken om de repository- en bestandsinformatie voor Elasticsearch-pakketten te verifiëren.
Volgende, werk uw pakketlijsten bij zodat APT de nieuwe Elastic-bron zal lezen:
Vervolgens installeert u Elasticsearch met deze opdracht:
Druk op Y
wanneer u wordt gevraagd om de installatie te bevestigen. Als u wordt gevraagd om een dienst te herstarten, drukt u op ENTER
om de standaardwaarden te accepteren en door te gaan. Elasticsearch is nu geïnstalleerd en klaar om geconfigureerd te worden.
Stap 2 — Het configureren van Elasticsearch
Om Elasticsearch te configureren, zullen we het hoofdconfiguratiebestand elasticsearch.yml
bewerken waar de meeste configuratieopties zijn opgeslagen. Dit bestand bevindt zich in de map /etc/elasticsearch
.
Gebruik uw voorkeurteksteditor om het configuratiebestand van Elasticsearch te bewerken. Hier zullen we nano
gebruiken:
Opmerking: Het configuratiebestand van Elasticsearch is in YAML-indeling, wat betekent dat we het inspringingsformaat moeten behouden. Zorg ervoor dat u geen extra spaties toevoegt tijdens het bewerken van dit bestand.
Het bestand elasticsearch.yml
biedt configuratieopties voor uw cluster, knooppunt, paden, geheugen, netwerk, ontdekking en gateway. De meeste van deze opties zijn vooraf geconfigureerd in het bestand, maar u kunt ze aanpassen aan uw behoeften. Voor de doeleinden van onze demonstratie van een enkele serverconfiguratie, zullen we alleen de instellingen voor de netwerkhost aanpassen.
Elasticsearch luistert naar verkeer van overal op poort 9200
. U wilt buiten toegang tot uw Elasticsearch-instantie beperken om te voorkomen dat buitenstaanders uw gegevens lezen of uw Elasticsearch-cluster afsluiten via de [REST API] (https://nl.wikipedia.org/wiki/Representational_state_transfer). Om de toegang te beperken en dus de beveiliging te verhogen, zoekt u de regel die network.host
specificeert, verwijdert u het commentaar ervoor en vervangt u de waarde door localhost
, zodat het er als volgt uitziet:
. . .
# ---------------------------------- Netwerk ----------------------------------
#
# Stel het bindadres in op een specifiek IP (IPv4 of IPv6):
#
network.host: localhost
. . .
We hebben localhost
gespecificeerd zodat Elasticsearch luistert op alle interfaces en gebonden IP’s. Als u wilt dat het alleen luistert op een specifieke interface, kunt u het IP ervan opgeven in plaats van localhost
. Sla elasticsearch.yml
op en sluit het af. Als u nano
gebruikt, kunt u dit doen door op CTRL+X
te drukken, gevolgd door Y
en vervolgens ENTER
.
Dit zijn de minimale instellingen waarmee u Elasticsearch kunt starten. Nu kunt u Elasticsearch voor de eerste keer starten.
Start de Elasticsearch-service met systemctl
. Geef Elasticsearch even de tijd om op te starten. Anders kunt u foutmeldingen krijgen over het niet kunnen verbinden.
Voer vervolgens het volgende commando uit om Elasticsearch in te schakelen om elke keer op te starten wanneer uw server wordt opgestart:
Met Elasticsearch ingeschakeld bij het opstarten, gaan we verder met de volgende stap om de beveiliging te bespreken.
Stap 3 — Elasticsearch beveiligen
Standaard kan Elasticsearch worden gecontroleerd door iedereen die toegang heeft tot de HTTP API. Dit is niet altijd een beveiligingsrisico omdat Elasticsearch alleen luistert op de loopback-interface (dat wil zeggen, 127.0.0.1
), die alleen lokaal toegankelijk is. Dus, er is geen openbare toegang mogelijk en zolang alle servergebruikers vertrouwd zijn, hoeft beveiliging mogelijk geen groot probleem te zijn.
Als u externe toegang tot de HTTP API moet toestaan, kunt u het netwerkexposure beperken met de standaard firewall van Ubuntu, UFW. Deze firewall moet al zijn ingeschakeld als u de stappen in de voorafgaande Initiële serverinstellingen met Ubuntu 22.04-handleiding heeft gevolgd.
We gaan nu de firewall configureren om toegang toe te staan tot de standaard Elasticsearch HTTP API-poort (TCP 9200) voor de vertrouwde externe host, meestal de server die u gebruikt in een single-server setup, zoals 198.51.100.0
. Om toegang toe te staan, typt u het volgende commando:
Zodra dat is voltooid, kunt u UFW inschakelen met het commando:
Tenslotte, controleer de status van UFW met het volgende commando:
Als u de regels correct hebt gespecificeerd, zou u uitvoer zoals deze moeten ontvangen:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
De UFW moet nu ingeschakeld zijn en ingesteld zijn om Elasticsearch-poort 9200 te beschermen.
Als u wilt investeren in aanvullende bescherming, biedt Elasticsearch de commerciële Shield-plug-in te koop aan.
Stap 4 — Elasticsearch testen
Tegenwoordig zou Elasticsearch moeten draaien op poort 9200. U kunt dit testen met cURL en een GET-verzoek.
U zou het volgende antwoord moeten ontvangen:
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"
}
Als u een antwoord ontvangt dat vergelijkbaar is met het bovenstaande, werkt Elasticsearch correct. Zo niet, zorg er dan voor dat u de installatie-instructies correct hebt gevolgd en dat u wat tijd hebt gegeven voor Elasticsearch om volledig op te starten.
Om een grondiger controle van Elasticsearch uit te voeren, voert u het volgende commando uit:
In de uitvoer van het bovenstaande commando kunt u alle huidige instellingen voor de node, cluster, toepassingspaden, modules en meer controleren.
Stap 5 — Elasticsearch gebruiken
Om Elasticsearch te gaan gebruiken, laten we eerst wat gegevens toevoegen. Elasticsearch maakt gebruik van een RESTful API, die reageert op de gebruikelijke CRUD-opdrachten: creëren, lezend, bijwerken, en verwijderen. Om ermee te werken, zullen we opnieuw het cURL-commando gebruiken.
Je kunt je eerste invoer als volgt toevoegen:
Je zou het volgende antwoord moeten ontvangen:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
Met cURL hebben we een HTTP POST-verzoek naar de Elasticsearch-server gestuurd. De URI van het verzoek was /tutorial/helloworld/1
met verschillende parameters:
tutorial
is de index van de gegevens in Elasticsearch.helloworld
is het type.1
is de ID van onze invoer onder de bovenstaande index en het type.
Je kunt deze eerste invoer ophalen met een HTTP GET-verzoek.
Dit zou het resulterende uitvoer moeten zijn:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
Om een bestaande invoer te wijzigen, kun je een HTTP PUT-verzoek gebruiken.
Elasticsearch zou een succesvolle wijziging moeten bevestigen zoals dit:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
In het bovenstaande voorbeeld hebben we het bericht
van de eerste invoer gewijzigd naar “Hallo, mensen!”. Hiermee is het versienummer automatisch verhoogd naar 2
.
Je hebt misschien gemerkt dat het extra argument pretty
in het bovenstaande verzoek. Het maakt een leesbaar formaat mogelijk zodat je elk gegevensveld op een nieuwe rij kunt schrijven. Je kunt ook je resultaten “prettify” bij het ophalen van gegevens om een meer leesbare uitvoer te krijgen door het volgende commando in te voeren:
Nu zal de reactie geformatteerd zijn voor een mens om te parsen:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
}
We hebben nu gegevens toegevoegd en opgevraagd in Elasticsearch. Voor meer informatie over de andere bewerkingen kun je de API-documentatie bekijken.
Conclusie
Je hebt nu Elasticsearch geïnstalleerd, geconfigureerd en bent begonnen met het gebruik ervan. Om de functionaliteit van Elasticsearch verder te verkennen, raadpleeg de officiële Elasticsearch-documentatie.