社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Docker で ELK stack (version 7.6.2)

ソース

github.com

ディレクトリ構造
├── 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 コンソールが表示されればうまく動作していると思われます。
f:id:blueskyarea:20200422214059p:plain

停止

すべての起動中のコンテナを停止するコマンド。

docker stop $(docker ps -q)