Elasticsearch in Docker
- Elasticsearch🖹 und Kibana (ELK) in Docker: ☛ Elasticsearch in Docker
- Einbindung von Fluentd🖹 an Elasticsearch: ☛ Fluent an Elasticsearch
- Ablegen von FHEM🖹 Daten in Elasticsearch: ☛ Von FHEM über Fluent in Elasticsearch
Elasticsearch in Docker
Gar nicht lange rum machen, gleich in die Vollen, hier das Docker Compose Stack:
1version: '3.9'
2
3services:
4 elasticsearch:
5 image: elasticsearch:7.17.8
6 ports:
7 - "9200:9200"
8 networks:
9 - efk
10 environment:
11 - discovery.type=single-node
12 volumes:
13 - type: volume
14 source: efk-data
15 target: /usr/share/elasticsearch/data
16 deploy:
17 resources:
18 limits:
19 memory: 6g
20 placement:
21 max_replicas_per_node: 1
22 constraints:
23 - node.labels.elk == here
24 mode: replicated
25 replicas: 1
26 restart_policy:
27 condition: any
28 delay: 2s
29 window: 120s
30 update_config:
31 parallelism: 1
32 delay: 10s
33 order: stop-first
34
35 kibana:
36 image: kibana:7.17.8
37 networks:
38 - efk
39 environment:
40 - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
41 ports:
42 - "5601:5601"
43 depends_on:
44 - elasticsearch
45 deploy:
46 resources:
47 limits:
48 memory: 1g
49 placement:
50 max_replicas_per_node: 1
51 constraints:
52 - node.labels.elk == here
53 mode: replicated
54 replicas: 1
55 restart_policy:
56 condition: any
57 delay: 2s
58 window: 120s
59 update_config:
60 parallelism: 1
61 delay: 10s
62 order: stop-first
63
64networks:
65 efk:
66
67volumes:
68 efk-data:
69 driver_opts:
70 type: "nfs"
71 o: "addr=192.168.1.151,nolock,soft,rw,nfsvers=4"
72 device: ":/docker/elk/data"
Sehen wir uns das an:
Zuerst habe ich mich bewusst für Version 7.17 entschieden. Dazu gab es passende Dokumente im Netz. Versuche mit Version 8 liefen nicht so gut, u.a. weil dort mit Sicherheitstokens gearbeitet wird, die irgendwo im Containerlog beim 1. Start stehen. Lästig im Swarm.
Elasticsearch und Kibana kommen in ein gemeinsames Netz, was deren Anbindung zueinander vereinfacht. Die Daten vom Elasticsearch kommen natürlich auf ein Volume. Da im Swarm auf ein NFS.
Placement und Resourcen, damit Docker das Zeug auf die richtigen Hosts im Swarm packt.
discovery.type=single-node
steht in diversen Beispielen und auch versteckt in der Doku, also rein damit.
docker stack deploy -c ./docker-stack.yml
Und tatsächlich lief nach etlichen Minuten dann alles an:
- Die Images waren recht groß, d.h. der erste Download dauerte schonmal einige Zeit.
- Start der Elasticsearch Datenbank dauert auch.
- Start von Kibana auch.
Jetzt mit dem Browser auf http://euer-host:5601 gehen. Der Host ist der, wo euer Docker-Swarm läuft. Der Port 5601 wird überall gemappt, dank Swarm Mode.