Un tutorial Elasticsearch: Getting Started

#Nota: Elastic a anunțat recent că va implementa licențierea cu sursă închisă pentru noile versiuni de Elasticsearch și Kibana dincolo de versiunea 7.9. Pentru mai multe detalii, citiți comentariile directorului nostru general Tomer Levy despre Truly Doubling Down on Open Source.

Elasticsearch este inima vie a ceea ce este astăzi cea mai populară platformă de analiză a logurilor – stiva ELK (Elasticsearch, Logstash și Kibana). Rolul Elasticsearch este atât de central încât a devenit sinonim cu numele însuși al stivei. Destinat în primul rând căutării și analizei logurilor, Elasticsearch este astăzi unul dintre cele mai populare sisteme de baze de date disponibile în prezent. Acest tutorial Elasticsearch oferă utilizatorilor noi cunoștințele și instrumentele necesare pentru a începe să utilizeze Elasticsearch. Acesta include instrucțiuni de instalare, precum și instrucțiuni inițiale de indexare și manipulare a datelor.

Ce este Elasticsearch?

Lansat inițial în 2010, Elasticsearch (uneori supranumit ES) este un motor modern de căutare și analiză care se bazează pe Apache Lucene. Complet open source și construit cu Java, Elasticsearch este o bază de date NoSQL. Asta înseamnă că stochează datele într-un mod nestructurat și că nu puteți folosi SQL pentru a o interoga.

Acest tutorial Elasticsearch ar putea fi considerat, de asemenea, un tutorial NoSQL. Cu toate acestea, spre deosebire de majoritatea bazelor de date NoSQL, Elasticsearch se concentrează foarte mult pe capacitățile și caracteristicile de căutare – atât de mult încât, de fapt, cel mai simplu mod de a obține date de la ES este să le căutați folosind API-ul extins Elasticsearch.

În contextul analizei de date, Elasticsearch este utilizat împreună cu celelalte componente din stiva ELK, Logstash și Kibana, și joacă rolul de indexare și stocare a datelor.

Instalarea Elasticsearch

Cerințele pentru Elasticsearch sunt simple: Java 8 (versiune specifică recomandată: Oracle JDK versiunea 1.8.0_131). Aruncați o privire la acest tutorial Logstash pentru a vă asigura că sunteți pregătit. De asemenea, veți dori să vă asigurați că sistemul dvs. de operare se află pe matricea de suport Elastic, altfel s-ar putea să vă confruntați cu probleme ciudate și imprevizibile. După ce ați făcut acest lucru, puteți începe prin a instala Elasticsearch.

Puteți descărca Elasticsearch ca distribuție independentă sau îl puteți instala folosind depozitele apt și yum. Vom instala Elasticsearch pe o mașină Ubuntu 16.04 care rulează pe AWS EC2 folosind apt.

În primul rând, trebuie să adăugați cheia de semnare Elastic, astfel încât să puteți verifica pachetul descărcat (săriți peste acest pas dacă ați instalat deja pachete de la Elastic):

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Pentru Debian, trebuie să instalăm apoi pachetul apt-transport-https:

sudo apt-get install apt-transport-https

Postul următor este de a adăuga definiția depozitului la sistemul dumneavoastră:

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

Nu mai rămâne decât să vă actualizați depozitele și să instalați Elasticsearch:

sudo apt-get updatesudo apt-get install elasticsearch

Configurarea Elasticsearch

Configurarea Elasticsearch se face cu ajutorul unui fișier de configurare a cărui locație depinde de sistemul de operare. În acest fișier, puteți configura setările generale (de exemplu, numele nodului), precum și setările de rețea (de exemplu, gazdă și port), unde sunt stocate datele, memoria, fișierele jurnal și multe altele.

În scopuri de dezvoltare și testare, setările implicite vor fi suficiente, totuși este recomandat să faceți cercetări cu privire la setările pe care ar trebui să le definiți manual înainte de a intra în producție.

De exemplu, și mai ales dacă instalați Elasticsearch în cloud, este o bună practică să legați Elasticsearch fie la un IP privat, fie la localhost:

sudo vim /etc/elasticsearch/elasticsearch.ymlnetwork.host: "localhost"http.port:9200

Rularea Elasticsearch

Elasticsearch nu va rula automat după instalare și va trebui să îl porniți manual. Modul în care veți rula Elasticsearch va depinde de sistemul dvs. specific. Pe cele mai multe sisteme bazate pe Linux și Unix puteți utiliza această comandă:

sudo service elasticsearch start

Și asta e tot! Pentru a confirma că totul funcționează bine, pur și simplu îndreptați curl sau browserul dvs. către http://localhost:9200 și ar trebui să vedeți ceva asemănător cu următoarea ieșire:

{ "name" : "33QdmXw", "cluster_name" : "elasticsearch", "cluster_uuid" : "mTkBe_AlSZGbX-vDIe_vZQ", "version" : { "number" : "6.1.2", "build_hash" : "5b1fea5", "build_date" : "2018-01-10T02:35:59.208Z", "build_snapshot" : false, "lucene_version" : "7.1.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search"}

Pentru a depana procesul de rulare a Elasticsearch, utilizați fișierele jurnal Elasticsearch localizate (pe Deb) în /var/log/elasticsearch/.

Crearea unui index Elasticsearch

Indexarea este procesul de adăugare a datelor în Elasticsearch. Acest lucru se datorează faptului că atunci când introduceți date în Elasticsearch, datele sunt plasate în indexuri Apache Lucene. Acest lucru are sens deoarece Elasticsearch utilizează indexurile Lucene pentru a stoca și a prelua datele sale. Deși nu trebuie să știți foarte multe despre Lucene, este util să știți cum funcționează atunci când începeți să vă ocupați serios de Elasticsearch.
Elasticsearch se comportă ca un API REST, astfel încât puteți utiliza fie metoda POST, fie metoda PUT pentru a adăuga date în el. Folosiți PUT atunci când știți sau doriți să specificați id al elementului de date, sau POST dacă doriți ca Elasticsearch să genereze un id pentru elementul de date:

curl -XPOST 'localhost:9200/logs/my_app' -H 'Content-Type: application/json' -d'{ "timestamp": "2018-01-24 12:34:56", "message": "User logged in", "user_id": 4, "admin": false}'curl -X PUT 'localhost:9200/app/users/4' -H 'Content-Type: application/json' -d '{ "id": 4, "username": "john", "last_login": "2018-01-25 12:34:56"}'

Și răspunsul:

{"_index":"logs","_type":"my_app","_id":"ZsWdJ2EBir6MIbMWSMyF","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}{"_index":"app","_type":"users","_id":"4","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

Datele pentru document sunt trimise ca un obiect JSON. S-ar putea să vă întrebați cum putem indexa datele fără a defini structura datelor. Ei bine, cu Elasticsearch, ca și cu orice altă bază de date NoSQL, nu este nevoie să definim în prealabil structura datelor. Totuși, pentru a asigura o performanță optimă, puteți defini maparele Elasticsearch în funcție de tipurile de date. Mai multe despre acest lucru mai târziu.

Dacă utilizați oricare dintre expeditorii Beats (de exemplu, Filebeat sau Metricbeat), sau Logstash, aceste părți ale stivei ELK vor crea automat indicii.

Pentru a vedea o listă a indicilor dvs. Elasticsearch, utilizați:

curl -XGET 'localhost:9200/_cat/indices?v&pretty'health status index uuid pri rep docs.count docs.deleted store.size pri.store.sizeyellow open logstash-2018.01.23 y_-PguqyQ02qOqKiO6mkfA 5 1 17279 0 9.9mb 9.9mbyellow open app GhzBirb-TKSUFLCZTCy-xg 5 1 1 0 5.2kb 5.2kbyellow open .kibana Vne6TTWgTVeAHCSgSboa7Q 1 1 2 0 8.8kb 8.8kbyellow open logs T9E6EdbMSxa8S_B7SDabTA 5 1 1 0 5.7kb 5.7kb

Lista în acest caz include indicii pe care i-am creat mai sus, un indice Kibana și un indice creat de o conductă Logstash.

Elasticsearch Querying

După ce ați indexat datele în Elasticsearch, puteți începe să le căutați și să le analizați. Cea mai simplă interogare pe care o puteți face este de a prelua un singur element. Citiți articolul nostru axat exclusiv pe interogările Elasticsearch.

Încă o dată, prin intermediul Elasticsearch REST API, folosim GET:

curl -XGET 'localhost:9200/app/users/4?pretty'

Și răspunsul:

{ "_index" : "app", "_type" : "users", "_id" : "4", "_version" : 1, "found" : true, "_source" : { "id" : 4, "username" : "john", "last_login" : "2018-01-25 12:34:56" }}

Câmpurile care încep cu o subliniere sunt toate câmpurile meta ale rezultatului. Obiectul _source este documentul original care a fost indexat.
De asemenea, folosim GET pentru a face căutări prin apelarea punctului final _search:

curl -XGET 'localhost:9200/_search?q=logged'{"took":173,"timed_out":false,"_shards":{"total":16,"successful":16,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.2876821,"hits":}}

Rezultatul conține o serie de câmpuri suplimentare care descriu atât căutarea, cât și rezultatul. Iată un scurt rezumat:

  • took: Timpul în milisecunde cât a durat căutarea
  • timed_out: If the search timed out
  • _shards: Numărul de fragmente Lucene căutate, precum și ratele de succes și de eșec ale acestora
  • hits: Rezultatele efective, împreună cu informații meta pentru rezultate

Cercetarea pe care am făcut-o mai sus este cunoscută sub numele de căutare URI și este cel mai simplu mod de a interoga Elasticsearch. Furnizând doar un cuvânt, ES va căuta toate câmpurile din toate documentele pentru acel cuvânt. Puteți construi căutări mai specifice folosind interogări Lucene:

  • username:johnb – Caută documente în care câmpul username este egal cu „johnb”
  • john* – Caută documente care conțin termeni care încep cu john și sunt urmați de zero sau mai multe caractere, cum ar fi „john”, „johnb” și „johnson”
  • john? – Caută documente care conțin termeni care încep cu john urmat de un singur caracter. Se potrivește cu „johnb” și „johns”, dar nu și cu „john.”

Există multe alte modalități de căutare, inclusiv utilizarea logicii booleene, amplificarea termenilor, utilizarea căutărilor fuzzy și de proximitate și utilizarea expresiilor regulate.

Elasticsearch Query DSL

Cercetarea prin URL este doar începutul. Elasticsearch oferă, de asemenea, o căutare în corpul cererii cu un Query DSL pentru căutări mai avansate. Există o gamă largă de opțiuni disponibile în aceste tipuri de căutări și puteți combina diferite opțiuni pentru a obține rezultatele de care aveți nevoie.

Conține două tipuri de clauze: 1) clauze de interogare leaf care caută o valoare într-un câmp specific și 2) clauze de interogare compuse (care pot conține una sau mai multe clauze de interogare leaf).

Tipurile de interogare din Elasticsearch

Există o gamă largă de opțiuni disponibile în aceste tipuri de căutări și puteți amesteca și combina diferite opțiuni pentru a obține rezultatele pe care le solicitați. Tipurile de interogări includ:

  1. Interogări geografice,
  2. interogări „More like this”
  3. interogări scriptate
  4. interogări full text
  5. interogări shape
  6. interogări span
  7. interogări la nivel de termen
  8. interogări specializate

De la Elasticsearch 6.8, stiva ELK a fuzionat interogările Elasticsearch și filtrele Elasticsearch, dar ES încă le diferențiază în funcție de context. DSL face distincție între un context de filtru și un context de interogare pentru clauzele de interogare. Clauzele dintr-un context de filtrare testează documentele în mod boolean: Documentul se potrivește cu filtrul, „da” sau „nu”? De asemenea, filtrele sunt, în general, mai rapide decât interogările, dar interogările pot calcula, de asemenea, un scor de relevanță în funcție de cât de mult se potrivește un document cu interogarea. Filtrele nu utilizează un scor de relevanță. Acesta determină ordonarea și includerea documentelor:

curl -XGET 'localhost:9200/logs/_search?pretty' -H 'Content-Type: application/json' -d'{ "query": { "match_phrase": { "message": "User logged in" } }}'

Și rezultatul:

{ "took" : 28, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.8630463, "hits" : }}'

Crearea unui cluster Elasticsearch

Întreținerea unui cluster Elasticsearch poate fi consumatoare de timp, mai ales dacă faceți ELK DIY. Dar, având în vedere capacitățile puternice de căutare și analiză ale Elasticsearch, astfel de clustere sunt indispensabile. Avem o scufundare mai profundă în acest subiect cu tutorialul nostru despre clusterul Elasticsearch, așa că vom folosi acest lucru ca o trambulină pentru acea trecere în revistă mai amănunțită.

Ce este un cluster Elasticsearch, mai exact? Clusterele Elasticsearch grupează mai multe noduri și/sau instanțe Elasticsearch împreună. Desigur, puteți alege întotdeauna să mențineți o singură instanță sau un singur nod Elasticsearch în cadrul unui anumit cluster. Ideea principală a unei astfel de grupări constă în distribuirea sarcinilor, a căutării și a indexării în cadrul clusterului între nodurile sale. Opțiunile de noduri includ noduri de date, noduri master, noduri client și noduri de ingerare.

Instalarea nodurilor poate implica o mulțime de configurații, pe care tutorialul nostru menționat mai sus le acoperă. Dar iată care este instalarea de bază a nodurilor clusterului Elasticsearch:

În primul rând, instalați Java:

sudo apt-get install default-jre

În continuare, adăugați cheia de conectare a Elasticsearch:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

În continuare, instalați noua iterație a Elasticsearch:

sudo apt-get update && apt-get install elasticsearch

Va trebui să creați și/sau să configurați propriul fișier de configurare (sudo vim /etc/elasticsearch/elasticsearch.yml) al fiecărui nod Elasticsearch elasticsearch.yml. De acolo, porniți Elasticsearch și apoi verificați starea clusterului Elasticsearch. Răspunsurile vor arăta cam așa:

{ "cluster_name" : "elasticsearch-cluster-demo", "compressed_size_in_bytes" : 255, "version" : 7, "state_uuid" : "50m3ranD0m54a531D", "master_node" : "IwEK2o1-Ss6mtx50MripkA", "blocks" : { }, "nodes" : { "m4-aw350m3-n0D3" : { "name" : "es-node-1", "ephemeral_id" : "x50m33F3mr--A11DnuM83r", "transport_address" : "172.31.50.123:9200", "attributes" : { } }, },}

Sănătatea clusterului Elasticsearch va fi următoarea pe listă. Verificați periodic starea de sănătate a clusterului dvs. cu următorul apel API:

curl -X GET "localhost:9200/_cluster/health?wait_for_status=yellow&local=false&level=shards&pretty"

Acest exemplu arată că parametrul local este false, (care este de fapt implicit). Acest lucru vă va arăta starea nodului principal. Pentru a verifica nodul local, schimbați la true.

Parametrul level vă va arăta, în mod implicit, starea de sănătate a clusterului, dar rangurile dincolo de acesta includ indices și shards (ca în exemplul de mai sus).

Există parametri opționali suplimentari pentru timeout-uri…

timeout
master_timeout

…sau, pentru a aștepta să apară anumite evenimente:

wait_for_active_shards
wait_for_events
wait_for_no_initializing_shards
wait_for_no_relocating_shards
wait_for_nodes
wait_for_status

Îndepărtarea datelor Elasticsearch

Îndepărtarea elementelor din Elasticsearch este la fel de ușoară ca și introducerea datelor în Elasticsearch. Metoda HTTP care trebuie folosită de data aceasta este-surpriză, surpriză-DELETE:

$ curl -XDELETE 'localhost:9200/app/users/4?pretty'{ "_index" : "app", "_type" : "users", "_id" : "4", "_version" : 2, "result" : "deleted", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1}

Pentru a șterge un index, folosiți:

$ curl -XDELETE 'localhost:9200/logs?pretty'

Pentru a șterge toți indicii (folosiți cu extremă precauție) folosiți:

$ curl -XDELETE 'localhost:9200/_all?pretty'$

Răspunsul în ambele cazuri ar trebui să fie:

{ "acknowledged" : true}

Pentru a șterge un singur document:

$ curl -XDELETE 'localhost:9200/index/type/document'

Ce urmează?

Acest tutorial ajută începătorii cu Elasticsearch și, ca atare, oferă doar pașii de bază ai operațiilor CRUD în Elasticsearch. Elasticsearch este un motor de căutare și, ca atare, dispune de o profunzime imensă a caracteristicilor sale de căutare.
Versiunile recente au introdus câteva caracteristici noi incredibile pentru Elasticsearch și, de asemenea, unele modificări semnificative ale structurii de date subiacente.

Este întotdeauna o idee bună să explorați documentația oficială Elasticsearch, precum și tutorialul nostru Logstash și tutorialul Kibana.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.