はじめに
Elasticsearch+Kibanaで情報を取得して可視化する際に、本番環境以外に自分自身で好き放題触れる環境が欲しかったため、CentOSの開発マシンと個人のMac端末にDocker ComposeでHTTP版のElasticsearch+Kibanaの環境を作成しました。備忘録として情報を残します。今回はElasticsearch,KibanaのDocker公式イメージだけで作成しています。カスタマイズしたい場合、別途Docker Fileを作成してbuildする必要があります。
社内proxyに阻まれそうであれば、事前に、
.bashrc、/etc/yum.conf、/etc/systemd/system/docker.service等にproxy設定をしておきます。
1 Dockerのインストール
repositoryのセットアップ
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
必要なパッケージのインストール
$ sudo yum install docker-ce docker-ce-cli containerd.io
dockerの起動とバージョン確認
$ sudo systemctl start docker
$ sudo docker --version
その他のディストリビューションや別バージョンは以下の公式参照
Install Docker Engine
2 Docker Composeのインストール
必要なパッケージのインストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
バイナリの実行権限を適用する
$ sudo chmod +x /usr/local/bin/docker-compose
バージョン確認
$ docker-compose --version
docker-compose version 1.29.2, build 1110ad01
その他のディストリビューションや別バージョンは以下の公式参照
Install Docker Compose
3 Docker ComposeでElasticsearch及びKibanaの起動
ディレクトリ構成は以下のようにしています。
任意のディレクトリ配下にelasticstackディレクトリを作成し、その配下でDocker Composeファイル群を管理しています。(今回の定義ファイルdocker-compose.ymlは最も簡易的な構成にしたため、elasticsearch.yml,kibana.ymlのマウントはしていません。マウントする場合はdocker-compose.ymlに追記します。)
./elasticstack/
├── docker-compose.yml
├── elasticsearch
│ └── conf
│ └── elasticsearch.yml
└── kibana
└── conf
└── kibana.yml
elasticstackディレクトリ配下にdocker-compose.ymlを作成します。
elasticの公式ページのElasticsearchの記述に加え、Kibanaの情報も記載します。
#docker-yml from elastic sample +kibana
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
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:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
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:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
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:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- 5601:5601
environment:
SERVER_NAME: localhost:5601
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
out of memory exceptions回避のため、docker-composeを起動する前に以下の設定を実施します。
(デフォルト値だと容量が足りず、エラーで起動できない)
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
$ sysctl -w vm.max_map_count=262144
docker-composeでコンテナを起動します。(-dはバックグラウンドオプション)
$ docker-compose up -d
コンテナの起動状態を確認します。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
elasticstack_kibana_1 /bin/tini -- /usr/local/bi ... Up 0.0.0.0:5601->5601/tcp,:::5601->5601/tcp
es01 /bin/tini -- /usr/local/bi ... Up 0.0.0.0:9200->9200/tcp,:::9200->9200/tcp, 9300/tcp
es02 /bin/tini -- /usr/local/bi ... Up 9200/tcp, 9300/tcp
es03 /bin/tini -- /usr/local/bi ... Up 9200/tcp, 9300/tcp
コンテナが正常に起動していれば、Chrome等のブラウザから http://localhost:5601 にアクセスすると、KibanaからElasticStackの状態を確認できます。