2020/10/11
Ziele auf:
Die endgültige Quelle ist unten gespeichert.
https://github.com/sugasaki/elasticsearch-multinode-docker
Folgen Sie den unteren Schritten
Install Elasticsearch with Docker | Elasticsearch Reference [7.9] | Elastic
Make sure Docker Engine is allotted at least 4GiB of memory. In Docker Desktop, you configure resource usage on the Advanced tab in Preference (macOS) or Settings (Windows).
Stellen Sie sicher, dass der Docker Engine mindestens 4 GB Speicher zugewiesen sind. Konfigurieren Sie in Docker Desktop die Ressourcennutzung auf der Registerkarte Erweitert unter Einstellungen (macOS) oder Einstellungen (Windows).
Wenn der zugewiesene Speicher niedrig ist, kann der Knoten möglicherweise nicht gestartet werden.
Elasticsearch
Es gibt verschiedene andere einleitende Artikel, daher werde ich sie weglassen.
Starten Sie die elastische Suche und den Testbetrieb mit Docker - Qiita
Japanische Kibana-Lokalisierung von Docker - Qiita
Führen Sie einen 3-Knoten-Cluster mit Docker Compose aus.
Bereiten Sie einen Arbeitsordner vor und erstellen Sie "docker-compose.yml" direkt darunter.
Starten Sie einen Elasticsearch-Cluster mit drei Knoten. Der Knoten es01 lauscht auf localhost: 9200, und es02 und es03 kommunizieren mit es01 über das Docker-Netzwerk.
docker-compose.yml
version: "2.2"
services:
# 1st node port=9200
elasticsearch01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
healthcheck:
interval: 20s
retries: 10
test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"'
# 2nd node
elasticsearch02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data02:/usr/share/elasticsearch/data
networks:
- elastic
# 3rd node
elasticsearch03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
elasticsearch_multinode_data01:
driver: local
elasticsearch_multinode_data02:
driver: local
elasticsearch_multinode_data03:
driver: local
networks:
elastic:
driver: bridge
Beachten Sie, dass in dieser Konfiguration Port 9200 geöffnet und öffentlich zugänglich ist. Wenn Sie Port 9200 nicht verfügbar machen und stattdessen einen Reverse-Proxy verwenden möchten, ersetzen Sie 9200: 9200 durch 127.0.0.1: 9200: 9200 in der Datei "docker-compose.yml". Auf Elasticsearch kann nur vom Host-Computer aus zugegriffen werden.
Die Volumes elasticsearch_multinode_data01 bis 03 bleiben auch nach dem Neustart erhalten. Wenn sie noch nicht vorhanden sind, werden sie beim Starten des Clusters von Docker-Compose erstellt.
docker-compose up
$ curl -X GET "localhost:9200/_cat/health?v&pretty"
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1602390892 04:34:52 es-docker-cluster green 3 3 0 0 0 0 0 0 - 100.0%
$ curl -X GET "localhost:9200/_cat/nodes?v&pretty"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.19.0.4 37 63 47 2.44 1.47 1.18 dilmrt - es03
172.19.0.3 18 63 46 2.44 1.47 1.18 dilmrt * es01
172.19.0.2 24 63 48 2.44 1.47 1.18 dilmrt - es02
$ docker volume ls
DRIVER VOLUME NAME
local docker_elasticsearch_multinode_data01
local docker_elasticsearch_multinode_data02
local docker_elasticsearch_multinode_data03
Detaillierte Bestätigung von data01
$ docker volume inspect docker_elasticsearch_multinode_data01
[
{
"CreatedAt": "2020-10-11T04:20:26Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "docker",
"com.docker.compose.version": "1.27.4",
"com.docker.compose.volume": "elasticsearch_multinode_data01"
},
"Mountpoint": "/var/lib/docker/volumes/docker_elasticsearch_multinode_data01/_data",
"Name": "docker_elasticsearch_multinode_data01",
"Options": null,
"Scope": "local"
}
]
Starten Sie das Terminal und geben Sie den Docker mit dem folgenden Befehl ein, um dies zu überprüfen
$ docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
Überprüfen Sie mit dem Befehl ls
/ # ls -ll /var/lib/docker/volumes/
total 44
drwxr-xr-x 3 root root 4096 Oct 11 04:20 docker_elasticsearch_multinode_data01
drwxr-xr-x 3 root root 4096 Oct 11 04:20 docker_elasticsearch_multinode_data02
drwxr-xr-x 3 root root 4096 Oct 11 04:20 docker_elasticsearch_multinode_data03
-rw------- 1 root root 65536 Oct 11 04:20 metadata.db
Wenn Sie zufrieden sind, beenden Sie mit dem Befehl exit
[[Docker für Mac] Ich habe nach dem aktuellen Zustand von Docker Volume | w0o0ps | note] gesucht (https://note.com/w0o0ps/n/n9bc1bcd9fa59)
Ich kann das tatsächliche Datenvolumen auf dem Docker-Desktop | t11o nicht finden
Erstellen Sie einen Index mit dem Namen "Kunde", geben Sie Daten ein und überprüfen Sie ihn. Führen Sie nach dem Beenden von Elasticsearch in der Mitte erneut aus, um zu überprüfen, ob die Daten dauerhaft sind.
curl -X PUT "localhost:9200/customer?pretty&pretty"
$ curl -X GET "localhost:9200/_cat/indices?v&pretty"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open customer FIT3eS3YSR2UEE0np3BnwA 1 1 0 0 416b 208b
Geben Sie Daten ein, indem Sie 1 für _id angeben
Führen Sie die folgenden Schritte in großen Mengen aus
curl --include -XPOST "http://localhost:9200/customer/_doc/1?pretty" \
-H 'Content-Type: application/json' \
-d '{
"name": "John Doe",
"message": "The night was young, and so was he. But the night was sweet, and he was sour."
}'
$ curl -X GET 'localhost:9200/customer/_doc/1?pretty'
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "John Doe",
"message" : "The night was young, and so was he. But the night was sweet, and he was sour."
}
}
Beenden Sie Elasticsearch und führen Sie es erneut aus.
$ docker-compose down
$ docker-compose up
Bestätigung der Datenpersistenz
$ curl -X GET "localhost:9200/_cat/indices?v&pretty"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open customer oD3E_VXqSWy7I0F1NSIlyQ 1 1 1 0 9.6kb 4.8kb
$ curl -X GET 'localhost:9200/customer/_doc/1?pretty'
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "John Doe",
"message" : "The night was young, and so was he. But the night was sweet, and he was sour."
}
}
Referenz: Install Kibana with Docker | Kibana Guide [7.9] | Elastic
Fügen Sie Folgendes oben im Abschnitt "Volumes" von "docker-compose.yml" hinzu.
docker-compose.yml
# kibana
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
container_name: kibana
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200 # container_Siehe Name
- "I18N_LOCALE=ja-JP" #Anzeige auf Japanisch
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
networks:
- elastic
healthcheck:
interval: 10s
retries: 20
test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status
restart: always
Ich habe der Umgebung auch eine japanische Einstellung hinzugefügt.
Referenz: Dockers japanische Lokalisierung von Kibana - Qiita
$ docker-compose up
Zugriff auf http://localhost:5601/
Der Kibana-Bildschirm wird im Browser angezeigt
Kibana-Menü> Verwaltung> Stapelverwaltung
Wählen Sie im Menü Daten die Option Indexverwaltung.
Sie sollten den zuvor erstellten Kundenindex sehen.
Wenn Sie vollständig zufrieden sind, beenden Sie Elasticsearch und fahren Sie mit Logstash fort.
Logstash
Referenz: Running Logstash on Docker | Logstash Reference [7.9] | Elastic
Fügen Sie in docker-compose.yml
nach den Kibana-Einstellungen Folgendes oben im Abschnitt Volumes hinzu.
docker-compose.yml
# logstash
logstash:
image: docker.elastic.co/logstash/logstash:7.9.2
container_name: logstash
networks:
- elastic
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
restart: always
$ docker-compose up
Überprüfen Sie, ob es läuft
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
072d509e37f0 docker.elastic.co/kibana/kibana:7.9.2 "/usr/local/bin/dumb…" 16 minutes ago Up 16 minutes (healthy) 0.0.0.0:5601->5601/tcp kibana
7bd68ec00995 docker.elastic.co/logstash/logstash:7.9.2 "/usr/local/bin/dock…" 16 minutes ago Up 16 minutes 5044/tcp, 9600/tcp logstash
7bff0bddb7e1 docker.elastic.co/elasticsearch/elasticsearch:7.9.2 "/tini -- /usr/local…" 16 minutes ago Up 16 minutes 9200/tcp, 9300/tcp es02
e32fcf67c1c3 docker.elastic.co/elasticsearch/elasticsearch:7.9.2 "/tini -- /usr/local…" 16 minutes ago Up 16 minutes 9200/tcp, 9300/tcp es03
60f489bf0dc8 docker.elastic.co/elasticsearch/elasticsearch:7.9.2 "/tini -- /usr/local…" 16 minutes ago Up 16 minutes (healthy) 0.0.0.0:9200->9200/tcp, 9300/tcp es01
Wenn Sie sich nicht als Entwickler der Twitter-API registriert haben, registrieren Sie sich bitte unten.
https://developer.twitter.com/en/apps/
Ich habe mich unter Bezugnahme auf Folgendes registriert.
[Detaillierte Erläuterung des Beispielsatzes der Twitter-API-Nutzungsanwendung der Version 2020 zur Übernahme des API-Schlüssels | ITTI, einer Website-Produktionsfirma in Shinjuku](https://www.itti.jp/web-direction/how-to-apply- for-twitter-api /)
Fügen Sie eine der folgenden Apps hinzu und notieren Sie sich consumer_key usw.
Wir werden so vorgehen, dass die Ordnerstruktur wie folgt ist.
$ tree --charset=C
.
|-- docker-compose.yml
|-- logstash
| |-- config
| | |-- logstash.yml
| | |-- pipelines.yml
| `-- pipeline
| `-- twitter.conf
Fügen Sie den Logstash-Einstellungen Volumes hinzu, wie unten gezeigt.
docker-compose.yml
logstash:
image: docker.elastic.co/logstash/logstash:7.9.2
container_name: logstash
volumes:
- ./logstash/pipeline/:/usr/share/logstash/pipeline/
- ./logstash/config/:/usr/share/logstash/config/
networks:
- elastic
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
restart: always
Erstellen Sie einen Ordner ". / Logstash / config /" und platzieren Sie Folgendes darunter
:./logstash/config/logstash.yml
pipeline.ordered: auto
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: ["http://es01:9200"]
:./logstash/config/pipelines.yml
- pipeline.id: twitter_pipeline
path.config: "/usr/share/logstash/pipeline/twitter.conf"
queue.type: persisted
:./logstash/pipeline/twitter.conf
input {
twitter {
consumer_key => "<your_consumer_key>"← Legen Sie den Schlüssel fest, der auf dem Twitter API-Verwaltungsbildschirm angezeigt wird
consumer_secret => "<your_consumer_secret>"
oauth_token => "your_oauth_token"
oauth_token_secret => "your_oauth_token_secret"
keywords => ["Maezawa", "Präsident Maezawa"]
ignore_retweets => true
full_tweet => true
}
}
output {
elasticsearch {
hosts => ["http://es01:9200/"]
index => "twitter_maezawa"
}
}
Referenz: [Stimmungsanalyse auf Twitter-Daten mit dem Blog von ELK | Clément](https://clementbm.github.io/elasticsearch/kibana/logstash/elk/sentiment%20analysis/2020/03/02/elk-sentiment-analysis-twitter -coronavirus.html)
Ab dem 11. Oktober 2020 lautet das Schlüsselwort "Mr. Maezawa" mit Twitter-Trend Da es 95% E3% 82% 93 war (srr = trend_click & vertikal = Trends), wird ["Mr. Maezawa", "President Maezawa"] als Schlüsselwort für Twitter festgelegt. Ich habe auch versucht, den Indexnamen als "twitter_maezawa".
docker-compose up
Gehe nach Kibana.
Es ist erfolgreich, wenn Index zu [Indexverwaltung] hinzugefügt wird (http: // localhost: 5601 / app / management / data / index_management / indizes), wie unten gezeigt.
http://localhost:5601/app/management/data/index_management/indices
Erstellen Sie ein Indexmuster, um die gesammelten Daten anzuzeigen. http://localhost:5601/app/management/kibana/indexPatterns/create
Geben Sie "twitter_maezawa" in den Namen des Indexmusters ein und drücken Sie den nächsten Schritt.
Wählen Sie als Zeitfeld @timestamp aus und klicken Sie auf Indexmuster erstellen.
[Discover](http: // localhost: 5601 / app / remove # /? _ G = (Filter:! (), RefreshInterval: (Pause:! T, Wert: 0), Zeit: (von: jetzt-1h bis) : now)) & a = (Spalten :! ( source), Filter :! (), Index: c9d9ea70-0b90-11eb-be10-f594a95a62f0, Intervall: auto, Abfrage: (Sprache: kuery, Abfrage: ''), Sortierung Sie können die Details der Daten überprüfen, indem Sie :! ())) Öffnen.
Erstellt über das Menü Visualisieren
Zum Dashboard hinzugefügt.
Da es eine große Sache ist, werde ich versuchen, die japanischen morphologischen Analyse-Engines "kuromoji" und "icu" hinzuzufügen.
Erstellen Sie einen Elasticsearch-Ordner und erstellen Sie eine Docker-Datei darunter. Ich werde auch versuchen, elasticsearch.yml zu lesen.
elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:7.9.2
COPY ./config/elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
#Plugin entfernen ↓ Aktivieren, wenn ein bereits enthaltener Fehler angezeigt wird
# RUN elasticsearch-plugin remove analysis-icu
# RUN elasticsearch-plugin remove analysis-kuromoji
# install plugin
RUN elasticsearch-plugin install analysis-icu
RUN elasticsearch-plugin install analysis-kuromoji
docker-compose.yml
elasticsearch01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
Wechseln Sie zu ↓
elasticsearch01:
build: ./elasticsearch/
Ändern Sie in ähnlicher Weise elasticsearch02 und elasticsearch03.
elasticsearch.yml
Erstellen Sie "elasticsearch.yml" im Ordner "elasticsearch / config". Der Inhalt ist leer und OK
.
|-- docker-compose.yml
|-- elasticsearch
| |-- Dockerfile
| `-- config
| `-- elasticsearch.yml
build
docker-compose build
docker-compose up
Ich werde es für alle Fälle bestätigen.
$ curl -X GET "localhost:9200/_cat/nodes?v&pretty"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.24.0.2 73 81 51 2.27 2.20 1.23 dilmrt - es03
172.24.0.3 58 81 52 2.27 2.20 1.23 dilmrt * es02
172.24.0.4 49 81 52 2.27 2.20 1.23 dilmrt - es01
Überprüfen Sie mit dem folgenden Befehl, ob das Plug-In installiert ist.
$ curl -X GET "http://localhost:9200/_nodes/es01/plugins?pretty"
...Kürzung
},
"plugins" : [
{
"name" : "analysis-icu",
"version" : "7.9.2",
"elasticsearch_version" : "7.9.2",
"java_version" : "1.8",
"description" : "The ICU Analysis plugin integrates the Lucene ICU module into Elasticsearch, adding ICU-related analysis components.",
"classname" : "org.elasticsearch.plugin.analysis.icu.AnalysisICUPlugin",
"extended_plugins" : [ ],
"has_native_controller" : false
},
{
"name" : "analysis-kuromoji",
"version" : "7.9.2",
"elasticsearch_version" : "7.9.2",
"java_version" : "1.8",
"description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
"classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
"extended_plugins" : [ ],
"has_native_controller" : false
}
],
Lassen Sie uns das elastische Forum - Qiita visualisieren
[Dashboard](http: // localhost: 5601 / app / dashboards # / list? _G = (Filter :! (), RefreshInterval: (Pause:! T, Wert: 0), Zeit: (von: now-1h) , jetzt)))).
Ich konnte es mit der Tag Cloud visualisieren.
Das Endergebnis ist wie folgt.
version: "2.2"
services:
# 1st node port=9200
elasticsearch01:
# image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
build: ./elasticsearch/
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
healthcheck:
interval: 20s
retries: 10
test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"'
# 2nd node
elasticsearch02:
# image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
build: ./elasticsearch/
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data02:/usr/share/elasticsearch/data
networks:
- elastic
# 3rd node
elasticsearch03:
# image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
build: ./elasticsearch/
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_multinode_data03:/usr/share/elasticsearch/data
networks:
- elastic
# kibana
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
container_name: kibana
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200 # container_Siehe Name
- "I18N_LOCALE=ja-JP"
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
networks:
- elastic
healthcheck:
interval: 10s
retries: 20
test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status
restart: always
# logstash
logstash:
image: docker.elastic.co/logstash/logstash:7.9.2
container_name: logstash
volumes:
- ./logstash/pipeline/:/usr/share/logstash/pipeline/
- ./logstash/config/:/usr/share/logstash/config/
networks:
- elastic
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
restart: always
volumes:
elasticsearch_multinode_data01:
driver: local
elasticsearch_multinode_data02:
driver: local
elasticsearch_multinode_data03:
driver: local
networks:
elastic:
driver: bridge
$ tree --charset=C
.
|-- docker-compose.yml
|-- elasticsearch
| |-- Dockerfile
| `-- config
| `-- elasticsearch.yml
`-- logstash
|-- config
| |-- logstash.yml
| |-- pipelines.yml
`-- pipeline
`-- twitter.conf
Der folgende Befehl
docker-compose down
Wenn Sie die Lautstärke löschen,
docker-compose down --volumes
Beim Löschen aller folgenden Elemente (Container, Image, Volume und Netzwerk)
docker-compose down --rmi all --volumes
docker volume prune
[Erste Elasticsearch mit Docker --Qiita](https://qiita.com/kiyokiyo_kzsby/items/344fb2e9aead158a5545#elasticsearch%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF% E3% 81% AE% E5% 81% 9C% E6% AD% A2)
[Eine Geschichte über das Erstellen einer ElasticStack-Umgebung auf Docker und das Konvertieren von Tweets über "Corona" in eine Tag-Cloud - Qiita](https://qiita.com/kenchan1193/items/9320390d48f3d2ae883c#elasticstack%E7%92%B0%E5% A2% 83% E6% A7% 8B% E7% AF% 89)
Recommended Posts