Inhaltsverzeichnis
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.
Der gesamte Technologie-Stack von Elastic Stack umfasst:
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
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
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.
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
Wir können auch einen neuen Index erstellen
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 client
Nach erfolgreicher Bedienung mittels Google-Plugin
Wir können die gerade eingefügten Daten sehen, indem wir eine Vorschau der Daten über ElasticSearchHead anzeigen
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:
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:
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:
- Rufen Sie JSON aus dem alten Dokument ab
- modifizieren Sie es
- alte Dokumente löschen
- 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
Wenn Sie ein Datenelement löschen, das nicht existiert, erhalten Sie die Fehlermeldung 404
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:
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
alles recherchieren
POST /haoke/_search
#请求数据
{
"query": {
"match": {
"name": "lh ttd lyj"
}
}
}
Zum Hervorheben müssen Sie nur eine Hervorhebung hinzufügen
POST /haoke/_search
#请求数据
{
"query": {
"match": {
"name": "lh"
}
}
"highlight": {
"fields": {
"name": {
}
}
}
}
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
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.