背景
様々なログのデータをデータベースに集積して可視化して解析する用途に「Elastic Stack」を使用していますがDockerで手軽に最新のElastic Stack環境を作成するメモ書きです。
Elastic Stack
詳しくは公式ページの案内にありますが簡潔すると以下の様な機能構成になります。
- Elasticsearch
データの集積と検索と分析を担います。 - Logstash
データをElasticsearchに投入する際のパイプライン機能を担います。 - Kibana
データの可視化で様々なチャートやグラフなどで表現機能を担います。
以前はこれらの頭文字をとって「ELK Stack」とも呼ばれていました。
基本機能はオープンソースで無料で使用出来ますが、一部に有料ライセンス機能があります。
はじめは試用期間を試して後で無効にする事もできます。
動作環境
ホスト側
- OS:Ubuntu Server 20.04.4LTS
- Docker CE version 20.10.16
- docker compose version v2.6.0
コンテナ側
- Elastic Stack 8.2.2
Docker環境の準備
以下のページにて紹介していますので参考にしてみて下さい。
ファイアウォール設定(重要)
グローバルIPアドレス環境で構築した場合にはElastic Stackの各サービスがインターネット外部に漏洩してしまうので必ずファイアウォール(セキュリティグループ等)の設定を事前に行いましょう。
今回の場合ではTCP/5601番を作業端末側だけに限定して開放します。
Elastic Stackを狙ったサイバー攻撃は世界中から頻繁に来ていますので数秒たりとも外部開放はしないように。
Elastic Stackの構築
今回は手軽にDocker Composeで最新のElastic Stackが構築出来る以下のリポジトリを利用します。
- [GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.] (https://github.com/deviantony/docker-elk)
Githubから取得
必要となる基本のファイルをGithubから入手します。
$ git clone https://github.com/deviantony/docker-elk.git
$ cd docker-elk
Docker Composeでコンテナ環境を起動
$ docker compose up -d
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
docker-elk-elasticsearch-1 "/bin/tini -- /usr/l…" elasticsearch running 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9200->9200/tcp, :::9300->9300/tcp
docker-elk-kibana-1 "/bin/tini -- /usr/l…" kibana running 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp
docker-elk-logstash-1 "/usr/local/bin/dock…" logstash running 0.0.0.0:5000->5000/tcp, 0.0.0.0:5000->5000/udp, 0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp, :::5000->5000/tcp, :::5000->5000/udp, :::5044->5044/tcp, :::9600->9600/tcp
docker-elk-setup-1 "/entrypoint.sh" setup running 9300/tcp
Elastic Stackのログイン画面
環境にもよりますが数分待つとWebブラウザからElastic Stackのログイン画面が表示出来ます。
DockerホストのIPアドレス番号とポート番号はKibanaの5601番を指定します。
標準のアカウント名は「elastic」パスワードは「changeme」に設定されているので一端はログインして動作確認をしておきます。
パスワードの初期化と新規作成
標準のアカウントのパスワードをリセットして新規作成します。
使用される3つのアカウントについて実施します。
各コマンド実行時に表示される新しいパスワードを別途記録しておきます。
$ docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user elastic
$ docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user logstash_internal
$ docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user kibana_system
新規パスワード設定
環境設定ファイル「.env」に先程作成した新規パスワードに修正変更します。
ELASTIC_PASSWORD='elasticの新規パスワード'
LOGSTASH_INTERNAL_PASSWORD='logstashの新規パスワード'
KIBANA_SYSTEM_PASSWORD='kibanaの新規パスワード'
Docker Compose 再起動
docker composeでLogstashとKibanaを再起動します。
$ docker compose up -d logstash kibana
新しいパスワードでElastic Stackに再ログイン出来る事を確認します。
日本語化
Elastic Stackの画面を日本語にする場合には設定ファイルを修正します。
i18n.locale: "ja-JP"
docker composeでKibanaを再起動します。
$ docker compose restart kibana