Docker で ELK stack (version 7.6.2)
ソース
ディレクトリ構造
├── docker-compose.yml ├── elasticsearch │ ├── config │ │ └── elasticsearch.yml │ └── Dockerfile ├── kibana │ ├── config │ │ └── kibana.xml │ └── Dockerfile ├── logstash │ └── Dockerfile └── README.md
elasticsearch, kibana, logstash それぞれの Dockerfile を用意
と言っても、official の docker Image を指定しているだけです。
例)
FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
elasticsearch.xml を用意
version 7.x 以降、”discovery.seed_hosts” の設定が必須になっており、未設定の場合起動しません。
cluster.name: "docker-cluster" node.name: "node1" node.master: true node.data: true network.host: 0.0.0.0 network.publish_host: _local_ discovery.seed_hosts: ["172.40.0.2"] cluster.initial_master_nodes: ["node1"]
kibana.xml を用意
最低限の設定(xpack.monitoring.ui.container.elasticsearch.enabledは不要)。
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://doc-elastic101:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true elasticsearch.requestTimeout: 60000
docker-compose.xml を用意
大した量ではないので載せます。
最初、elasticsearch のIPアドレスとして、172.60.0.1 を指定していましたが
"Already in use" のエラーが解消できなかったため、172.60.0.2 に変更しました。
他のパターンの xxx.xxx.xxx.1 でも解消しなかったため、第4オクテットが1のIPアドレスが予約されている模様。
ただ他の環境ではxxx.xxx.xxx.1で動作したため、原因は不明。
version: '3.2' services: elasticsearch: build: context: elasticsearch/ hostname: doc-elastic101 container_name: elastic1 ports: - "9200:9200/tcp" - "9300:9300/tcp" deploy: resources: limits: memory: 2G networks: elk_nw: ipv4_address: 172.60.0.2 volumes: - type: bind source: ./elasticsearch/config/elasticsearch.yml target: /usr/share/elasticsearch/config/elasticsearch.yml read_only: true - type: volume source: elasticsearch-data target: /usr/share/elasticsearch/data extra_hosts: - "doc-kibana101:172.60.0.4" - "doc-logstash101:172.60.0.3" logstash: build: context: logstash/ hostname: doc-logstash101 container_name: logstash1 ports: - "5043-5100:5043-5100/tcp" deploy: resources: limits: memory: 1G networks: elk_nw: ipv4_address: 172.60.0.3 extra_hosts: - "doc-elastic101:172.60.0.2" - "doc-kibana101:172.60.0.4" environment: LS_JAVA_OPTS: "-Xmx512m -Xms512m" depends_on: - elasticsearch kibana: build: context: kibana/ hostname: doc-kibana101 container_name: kibana1 ports: - "5601:5601/tcp" deploy: resources: limits: memory: 512M networks: elk_nw: ipv4_address: 172.60.0.4 volumes: - type: bind source: ./kibana/config/kibana.xml target: /usr/share/kibana/config/kibana.yml read_only: true extra_hosts: - "doc-elastic101:172.60.0.2" - "doc-logstash101:172.60.0.3" depends_on: - elasticsearch volumes: elasticsearch-data: driver: local networks: elk_nw: driver: bridge ipam: driver: default config: - subnet: 172.60.0.0/16
起動
とりあえず、以下のコマンドを "docker-compose.xml" のあるディレクトリで実行すれば、イメージのダウンロードからコンテナの作成・起動までやってくれます。
docker-compose up --build -d
しばらくしてから、http://localhost:5601 にアクセスしてみて、kibana の web コンソールが表示されればうまく動作していると思われます。
停止
すべての起動中のコンテナを停止するコマンド。
docker stop $(docker ps -q)