Installation und Einführung von ElasticSearch

Installation und Einführung von ElasticSearch

Einführung in Elastic Stack

       Wenn Sie noch nie von Elastic Stack gehört haben, müssen Sie von ELK gehört haben. Tatsächlich ist ELK die Abkürzung für drei Softwareprogramme, nämlich Elasticsearch, Logstash und Kibana. Im Entwicklungsprozess ist das neue Mitglied Beats beigetreten. Also Der Elastic Stack wurde gebildet. ELK ist also der alte Name und Elastic Stack der neue Name.
Fügen Sie hier eine Bildbeschreibung ein

Der gesamte Technologie-Stack von Elastic Stack umfasst:

Fügen Sie hier eine Bildbeschreibung ein

Elasticsearch

Basierend auf Java ist es eine verteilte Open-Source-Suchmaschine. Zu seinen Funktionen gehören: verteilt, Nullkonfiguration, automatische Erkennung, automatisches Index-Sharding, Index-Kopiermechanismus, Schnittstelle im Restful-Stil, mehrere Datenquellen, automatisches Suchladen usw.

Logstash

Logstash basiert auf Java und ist ein Open-Source-Tool zum Sammeln, Analysieren und Speichern von Protokollen.

Kibana

Kibana basiert auf NodeJS und ist ebenfalls ein Open-Source- und kostenloses Tool. Kibana kann
eine protokollanalysefreundliche Weboberfläche für Logstash und ElasticSearch bereitstellen, mit der wichtige Datenprotokolle zusammengefasst, analysiert und durchsucht werden können.

Schläge

       Beats ist ein Open-Source-Agent des Unternehmens Elastic, der Systemüberwachungsdaten sammelt. Dies ist ein allgemeiner Name für Datensammler, die als Clients auf dem überwachten Server ausgeführt werden. Er kann Daten direkt an Elasticsearch oder über Logstash an Elasticsearch senden und dann Führen Sie nachfolgende Datenanalyseaktivitäten durch.

Beats besteht aus:

  • Packetbeat: ist ein Netzwerkpaketanalysator zur Überwachung und Erfassung von Netzwerkverkehrsinformationen.
  • Filebeat: Wird zum Überwachen und Sammeln von Serverprotokolldateien verwendet.
  • Metricbeat: Es kann regelmäßig Überwachungsindikatorinformationen von externen Systemen abrufen, die Apache, MySQL, Nginx und andere Dienste überwachen und sammeln können.

Sowohl Beats als auch Logstash können tatsächlich Daten sammeln, aber die aktuelle Mainstream-Methode besteht darin, Beats für die Datenerfassung zu verwenden und dann Logstash für die Datensegmentierung und -verarbeitung zu verwenden. In den frühen Tagen, als Beats noch nicht existierte, wurde Logstash für die Datenerfassung verwendet.

Erste Schritte mit ElasticSearch

Einführung

offizielle Website

       ElasticSearch ist ein Lucene-basierter Suchserver. Es stellt eine verteilte, mehrbenutzerfähige Volltextsuchmaschine bereit, die auf einer RESTful-Webschnittstelle basiert. Elasticsearch wurde in Java entwickelt und unter den Bedingungen der Apache-Lizenz als Open Source veröffentlicht und ist eine beliebte Suchmaschine für Unternehmen. Es wurde für den Einsatz im Cloud Computing entwickelt, ermöglicht eine Echtzeitsuche, ist stabil, zuverlässig, schnell und einfach zu installieren und zu verwenden.

       ElasticSearch ist der Kern des Elastic Stack und Elasticsearch ist eine verteilte, RESTful-Such- und Datenanalyse-Engine, die eine Vielzahl neuer Anwendungsfälle lösen kann.

herunterladen

Gehen Sie zum Download auf die offizielle Website: Elastic

Fügen Sie hier eine Bildbeschreibung ein

       Wählen Sie die entsprechende Version der Daten aus. Hier verwende ich Linux zur Installation. Laden Sie daher zuerst das Linux-Installationspaket von ElasticSearch herunter

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.0-linux-x86_64.tar.gz

Eigenständige Installation

       Da ElasticSearch keine direkten Vorgänge durch Root-Benutzer unterstützt, müssen wir einen es-Benutzer erstellen

# 添加新用户
useradd es
# 创建elk目录
cd /opt/elk
# 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.0-linux-x86_64.tar.gz
# 解压缩
tar -zxvf elasticsearch-8.8.0-linux-x86_64.tar.gz
#重命名
mv elasticsearch-8.8.0  elsearch

Da wir gerade den Root-Benutzer für den Betrieb verwendet haben, müssen wir auch den Besitz des Ordners /soft auf den Benutzer es ändern

chown es.es /opt/elk -R

Wechseln Sie dann zur Bedienung zum es-Benutzer

# 切换用户
su - es

Dann können wir unsere Konfigurationsdatei ändern

# 进入到 elsearch下的config目录
cd /opt/elk/elsearch/config

Suchen Sie dann die folgende Konfiguration

#打开配置文件
vim elasticsearch.yml 

#设置ip地址,任意网络均可访问
network.host: 0.0.0.0 
#关闭安全功能
xpack.security.enable: true ==> xpack.security.enable: false

       Wenn network.host in Elasticsearch nicht localhost oder 127.0.0.1 ist, wird es als Produktionsumgebung betrachtet, die höhere Umgebungsanforderungen hat. Unsere Testumgebung kann diese möglicherweise nicht erfüllen. Im Allgemeinen müssen zwei Konfigurationen geändert werden: wie folgt:

# 修改jvm启动参数
vim conf/jvm.options

#根据自己机器情况修改
-Xms128m 
-Xmx128m

       Ändern Sie dann die zweite Konfiguration. Für diese Konfiguration müssen wir zum Host-Computer gehen, um sie zu konfigurieren.

# 到宿主机上打开文件
vim /etc/sysctl.conf
# 增加这样一条配置,一个进程在VMAs(虚拟内存区域)创建内存映射最大数量
vm.max_map_count=655360
# 让配置生效
sysctl -p

Starten Sie ElasticSearch

Zuerst müssen wir zum elsearch-Benutzer wechseln

su - es

Gehen Sie dann in das bin-Verzeichnis und führen Sie Folgendes aus

# 进入bin目录
cd /opt/elk/elsearch/bin
# 后台启动
./elasticsearch -d

Besuchen Sie nach erfolgreichem Start die folgende URL

http://192.168.40.150:9200/

Wenn die folgende Meldung erscheint, bedeutet dies, dass der Start erfolgreich war.

Fügen Sie hier eine Bildbeschreibung ein

Sollten beim Start Probleme auftreten, schauen Sie sich bitte die Fehleranalyse unten an~

Fehleranalyse

Fehlerzustand 1

Wenn die folgende Fehlermeldung erscheint

java.lang.RuntimeException: can not run elasticsearch as root
	at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:111)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:178)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)
For complete error details, refer to the log at /soft/elsearch/logs/elasticsearch.log
[root@e588039bc613 bin]# 2020-09-22 02:59:39,537121 UTC [536] ERROR CLogger.cc@310 Cannot log to named pipe /tmp/elasticsearch-5834501324803693929/controller_log_381 as it could not be opened for writing
2020-09-22 02:59:39,537263 UTC [536] INFO  Main.cc@103 Parent process died - ML controller exiting

Dies bedeutet, dass Sie nicht zum Benutzer elsearch gewechselt sind, da Sie den Root-Vorgang nicht verwenden können.

su -  elsearch用户

Fehlerfall 2

[1]:max file descriptors [4096] for elasticsearch process is too low, increase to at least[65536]

Lösung: Wechseln Sie zum Root-Benutzer, bearbeiten Sie limits.conf und fügen Sie den folgenden Inhalt hinzu

vi /etc/security/limits.conf

# ElasticSearch添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

Fehlerfall 3

[2]: max number of threads [1024] for user [elsearch] is too low, increase to at least
[4096]

Das heißt, die maximale Anzahl an Threads ist zu niedrig eingestellt und muss auf 4096 geändert werden.

#解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
#修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096

ElasticSearch-Head-Visualisierungstool

       Da ES offiziell keine visuellen Verwaltungstools für ES bereitstellt, stellt es nur Hintergrunddienste bereit. Elasticsearch-head ist ein für ES entwickeltes Seiten-Client-Tool. Der Quellcode wird auf Github gehostet und die Adresse lautet Portal .

head bietet die folgenden Installationsmethoden

  • Installation des Quellcodes, Start über npm run start (nicht empfohlen)
  • Installation über Docker (empfohlen)
  • Installation über Chrome-Plugin (empfohlen)
  • Installation über das ES-Plugin (nicht empfohlen)

Über Docker installieren

#拉取镜像
docker pull salgat/elasticsearch-head 
#启动容器
docker run -d --name elasticsearch-head -p 9100:9100 salgat/elasticsearch-head 

Hinweis:
Da Front-End und Back-End separat entwickelt werden, treten domänenübergreifende Probleme auf. Die CORS-Konfiguration muss auf der Serverseite wie folgt erfolgen:

vim elasticsearch.yml
# 新加
http.cors.enabled: true 
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization

Bei der Installation über das Chrome-Plugin tritt dieses Problem nicht auf

Installation über die Chrome-Erweiterung

Öffnen Sie den Chrome App Store, um das Portal zu installieren

Fügen Sie hier eine Bildbeschreibung ein

Wir können auch einen neuen Index erstellen

Fügen Sie hier eine Bildbeschreibung ein

Empfehlung: Es wird empfohlen, für die Installation das Chrome-Plugin zu verwenden. Wenn die Netzwerkumgebung dies nicht zulässt, verwenden Sie andere Installationsmethoden.

Grundlegende Konzepte in ElasticSearch

Index

  • Ein Index ist die logische Speicherung logischer Daten durch Elasticsearch, sodass diese in kleinere Teile unterteilt werden können.
  • Ein Index kann als eine Tabelle in einer relationalen Datenbank betrachtet werden. Die Struktur des Index ist für eine schnelle und effiziente Volltextindizierung vorbereitet, insbesondere da er keine Originalwerte speichert.
  • Elasticsearch kann den Index auf einem Computer speichern oder auf mehrere Server verteilen. Jeder Index verfügt über einen oder mehrere Shards und jeder Shard kann mehrere Replikate haben.

dokumentieren

  • Die in Elasticsearch gespeicherte Hauptentität wird als Dokument bezeichnet. In einer relationalen Datenbank-Analogie entspricht ein Dokument einer Zeile mit Datensätzen in einer Datenbanktabelle.

  • Ein Dokument besteht aus mehreren Feldern, und jedes Feld kann mehrmals in einem Dokument vorkommen. Solche Felder werden als mehrwertige Felder bezeichnet.
    Der Typ jedes Felds, der Text, Wert, Datum usw. sein kann. Feldtypen können auch komplexe Typen sein, bei denen ein Feld andere Unterdokumente oder Arrays enthält.

Kartierung

       Alle Dokumente werden analysiert, bevor sie in den Index geschrieben werden. Wie der Eingabetext in Begriffe unterteilt wird und welche Begriffe gefiltert werden. Dieses Verhalten wird als Mapping bezeichnet und die Regeln werden im Allgemeinen vom Benutzer definiert.

Art des Dokuments

  • In Elasticsearch kann ein Indexobjekt Objekte für viele verschiedene Zwecke speichern. Beispielsweise kann eine Blogging-Anwendung Artikel und Kommentare speichern.
  • Jedes Dokument kann eine andere Struktur haben.
  • Unterschiedliche Dokumenttypen können nicht unterschiedliche Typen für dieselbe Eigenschaft festlegen. Beispielsweise muss ein Feld mit dem Namen „Titel“ für alle Dokumenttypen im selben Index denselben Typ haben.

RESTful-API

       Elasticsearch bietet umfangreiche RESTful-API-Operationen, einschließlich grundlegender CRUD, Indexerstellung, Indexlöschung und anderer Operationen.

Erstellen Sie einen unstrukturierten Index

       In Lucene erfordert die Erstellung eines Index die Definition von Feldnamen und Feldtypen. In Elasticsearch werden unstrukturierte Indizes bereitgestellt, was bedeutet, dass Daten in den Index geschrieben werden können, ohne eine Indexstruktur zu erstellen. Tatsächlich führt die unterste Ebene von Elasticsearch strukturierte Operationen aus sind für Benutzer transparent.

Erstellen Sie einen leeren Index

PUT /haoke
{
    
    
    "settings": {
    
    
        "index": {
    
    
        "number_of_shards": "2", #分片数
        "number_of_replicas": "0" #副本数
        }
    }
}

Index löschen

#删除索引
DELETE /haoke
{
    
    
	"acknowledged": true
}

Daten einfügen

URL-Regeln:
POST /{index}/{type}/{id}

POST /haoke/_doc/1001
#数据
{
    
    
"id":1001,
"name":"张三",
"age":20,
"sex":"男"
}

advanced reset clientNach erfolgreicher Bedienung mittels Google-Plugin
Fügen Sie hier eine Bildbeschreibung ein

Wir können die gerade eingefügten Daten sehen, indem wir eine Vorschau der Daten über ElasticSearchHead anzeigen
Fügen Sie hier eine Bildbeschreibung ein

Hinweis: Unstrukturierte Indizes müssen nicht im Voraus erstellt werden und Indizes werden standardmäßig beim direkten Einfügen von Daten erstellt.
Daten ohne Angabe der ID einfügen:
Fügen Sie hier eine Bildbeschreibung ein

Daten aktualisieren

       In Elasticsearch werden Dokumentdaten nicht verändert, können aber durch Überschreiben aktualisiert werden.

PUT /haoke/_doc/1001
{
    
    
"id":1001,
"name":"大漂亮",
"age":21, 
"sex":"女"
}

Die Aktualisierungsergebnisse lauten wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

       Sie können sehen, dass die Daten überschrieben wurden. Die Frage ist, kann es teilweise aktualisiert werden? - OK. Habe ich vorhin nicht gesagt, dass Dokumentdaten nicht aktualisiert werden können?
       Tatsächlich ist es so: Intern werden die Dokumentdaten noch abgefragt und dann der Überschreibvorgang durchgeführt. Die Schritte sind wie folgt:

  1. Rufen Sie JSON aus dem alten Dokument ab
  2. modifizieren Sie es
  3. alte Dokumente löschen
  4. neue Dokumente indizieren
#注意:这里多了_update标识
POST /haoke/_update/1001
{
    
    
"doc":{
    
    
"age":66
}
}


Wie Sie sehen, wurden die Daten teilweise aktualisiert.

Index löschen

       Um in Elasticsearch Dokumentdaten zu löschen, müssen Sie lediglich eine DELETE-Anfrage ohne zusätzliche Parameter initiieren

DELETE  /haoke/_doc/1001

Fügen Sie hier eine Bildbeschreibung ein

Wenn Sie ein Datenelement löschen, das nicht existiert, erhalten Sie die Fehlermeldung 404
Fügen Sie hier eine Bildbeschreibung ein

Durch das Löschen eines Dokuments wird es nicht sofort von der Festplatte entfernt, sondern nur als gelöscht markiert. Elasticsearch bereinigt gelöschte Inhalte im Hintergrund, wenn Sie später weitere Indizes hinzufügen. [Entspricht dem Batch-Betrieb]

Suchdaten

Daten nach ID suchen

GET /haoke/_doc/tPBUbIgBY_Q1v-_oKRV-
#返回的数据如下
{
    
    
_index: "haoke"
_id: "tPBUbIgBY_Q1v-_oKRV-"
_version: 1
_seq_no: 4
_primary_term: 1
found: true
_source: {
    
    
id: 1005
name: "王五"
age: 20
sex: "男"
}-
}

Alle Daten durchsuchen

GET  /haoke/_search

Beachten Sie, dass bei der Abfrage aller Daten standardmäßig nur 10 Datensätze zurückgegeben werden

Daten zur Stichwortsuche

#查询年龄等于20的用户
GET /haoke/_search?q=age:20

Das Ergebnis ist wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

DSL-Suche

       Elasticsearch bietet eine umfangreiche und flexible Abfragesprache namens DSL Query (Query DSL), mit der Sie komplexere und leistungsfähigere Abfragen erstellen können.
       DSL (Domain Specific Language) erscheint in Form eines JSON-Anfragetexts.

POST /haoke/_search
#请求体
{
    
    
    "query" : {
    
    
        "match" : {
    
     #match只是查询的一种
        	"age" : 20
        }
    }
}

Implementierung: Männliche Benutzer abfragen, die älter als 30 Jahre sind.

POST /haoke/user/_search
#请求数据
{
    
    
    "query": {
    
    
        "bool": {
    
    
            "filter": {
    
    
                    "range": {
    
    
                        "age": {
    
    
                        "gt": 30
                    }
                }
            },
            "must": {
    
    
                "match": {
    
    
                	"sex": "男"
                }
            }
        }
    }
}

Abfrageergebnisse

Fügen Sie hier eine Bildbeschreibung ein

alles recherchieren

POST /haoke/_search
#请求数据
{
    
    
    "query": {
    
    
        "match": {
    
    
        	"name": "lh ttd lyj"
        }
    }
}

Fügen Sie hier eine Bildbeschreibung ein

Zum Hervorheben müssen Sie nur eine Hervorhebung hinzufügen

POST /haoke/_search
#请求数据
{
    
    
    "query": {
    
    
        "match": {
    
    
        	"name": "lh"
        }
    }
    "highlight": {
    
    
        "fields": {
    
    
        	"name": {
    
    }
        }
    }
}

Fügen Sie hier eine Bildbeschreibung ein

Polymerisation

       In Elasticsearch werden Aggregationsoperationen unterstützt, ähnlich der Gruppierungsoperation in SQL.

POST /haoke/_search
{
    
    
    "aggs": {
    
    
        "all_interests": {
    
    
            "terms": {
    
    
                "field": "age"
            }
        }
    }
}

Die Ergebnisse sind wie folgt, wir aggregieren nach Alter

Fügen Sie hier eine Bildbeschreibung ein
Aus den Ergebnissen geht hervor, dass es zwei Daten für Personen im Alter von 20 Jahren und ein Datenelement für Personen im Alter von 21, 35, 50 und 80 Jahren gibt.

Supongo que te gusta

Origin blog.csdn.net/qq_52589631/article/details/131188382
Recomendado
Clasificación