本ドキュメントは、Windows環境において Rancher Desktop を活用し、Elastic Stack(Elasticsearch・Logstash・Kibana)を構築・動作確認する手順をまとめた技術資料です。Docker Desktop を使用せず、軽量な containerd ベースのランタイムである Rancher Desktop を使うことで、シンプルかつ効率的に ELK 環境を構築する方法を紹介します。
手順は以下のような流れで構成されています。
- Rancher Desktop のインストールおよび設定
- ELK 各コンポーネントの構成ファイル(docker-compose.yml, logstash.conf など)の作成
- nerdctl を使ったコンテナの起動・停止
- Kibana による動作確認
- Logstash による JSON データの取り込み確認
これから ELK Stack を学習・検証したい開発者やインフラ担当者に向けて、実践的な構築・確認フローを提供します。
動作環境
以下の環境で作業しています。
端末OS | Windows 10 Pro |
Terminal | VSCode 1.99.3 |
コンテナ | Rancher Desktop 1.18.2 |
Elasticsearch | 8.15.5 |
Logstash | 8.15.5 |
Kibana | 8.15.5 |
ELK Stack構築手順
Rancher Desktop インストール
以下サイトからinstallerをダウンロードし、実行します。
https://rancherdesktop.io

今回はWindows端末を使用する手順なので、”Download for Windows(x64)”を選択しています。

Installerを実行して表示されるウィザードに従ってInstallを完了させます。
下図はRancher Desktopの起動画面です。

home directory作成
任意のpathにフォルダを作成してください。この説明資料では、”C:\dxdoc\local_elk_0502”をhome directoryとして作成しています。また、Logstash用に、home directoryの下に”pipeline”というフォルダを作成し、その中に以下内容のテキストファイル”logstash.conf”を作成してください。
input {
file {
path => "/usr/share/logstash/test_data.json"
start_position => "beginning"
sincedb_path => "/dev/null" # 再起動しても毎回読み込む
codec => "json"
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "test-index"
user => "elastic"
password => "FiV8YQnjwJI6nYk_*hlZ"
}
stdout { codec => rubydebug }
}
次に、home directoryの下に、snapshot保管用のフォルダとして”repo”というフォルダを作成してください。

Composeファイルの配備
以下の内容で”docker-compose.yml”ファイルを作成し、home directory直下に配置します。

この docker-compose.yml は、Elastic Stack(Elasticsearch・Logstash・Kibana)を 単一ノード構成でローカル環境に立ち上げるための設定ファイルです。各サービスは以下のように構成されています。
# version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.5
container_name: es01_0502
environment:
- node.name=es01
- discovery.type=single-node
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=FiV8YQnjwJI6nYk_*hlZ
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- path.repo=/usr/share/elasticsearch/backup
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
volumes:
- es_data:/usr/share/elasticsearch/data
- /mnt/c/dxdoc/local_elk_0502/repo:/usr/share/elasticsearch/backup
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:8.15.5
container_name: logstash_0502
depends_on:
- elasticsearch
environment:
LS_JAVA_OPTS: "-Xms512m -Xmx512m"
volumes:
- ./pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
#- ./pipeline/test_data.json:/usr/share/logstash/test_data.json
ports:
- 5044:5044 # Beats (Filebeatなど) からのデータ受け取りに使用する例
- 9600:9600 # LogstashのモニタリングAPI
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:8.15.5
container_name: kibana_0502
depends_on:
- elasticsearch
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=mSG0YMSQI+3YvsWQ6l+X
ports:
- 5601:5601
networks:
- elk
volumes:
es_data:
networks:
elk:
driver: bridge
構成内容の概要
elasticsearch | バージョン 8.15.5 の Elasticsearch を起動し、パスワード付きのシングルノード構成。データ保存用ボリュームとスナップショット用ディレクトリをマウント。 |
logstash | Logstash を起動し、logstash.conf に基づいてデータを処理。テスト用 JSON データもマウントされ、Filebeat などからの入力を受け取れるよう 5044 ポートが開放されている。 |
kibana | Kibana を起動し、Elasticsearch に接続して可視化を提供。ポート 5601 でアクセス可能。Kibana System ユーザーを使って認証。 |
その他 | • すべてのサービスは共通ネットワーク “elk” 上で接続されており、相互通信が可能。 • “es_data” という名前の Docker ボリュームを使って、Elasticsearch の永続データを保持。 |
上記composeファイルで指定しているコンテナイメージファイルは、version 8.15.5を指定しています。他のバージョンは、以下サイトから確認出来ます。
https://hub.docker.com/_/elasticsearch/tags
Rancher Desktopの設定
Preferencesをクリック

Container Engineを開き、”containerd”を選択、Applyボタンをクリックし、設定する。

Kubernetesを開き、”Enable Kubernetes”のcheckを外し、Applyボタンをクリックし、設定する。

Terminalを開き、カレントディレクトリをHome Directoryへ移動
VSCodeを開き、Home Directoryを開きます。Terminalを開き(ctrl + @)、カレントディレクトリを作成したHome Directoryに移動してください。

コンテナを起動する
以下コマンドをTerminalで実行し、コンテナを構築、起動します。
nerdctl compose -f docker-compose.yml up -d

実行後に出力されるログ

コンテナ起動確認
以下コマンドをTerminalで実行し、3つのコンテナが起動していることを確認する。
nerdctl ps

Rancher Desktop
Rancher DesktopでContainersを開くと、以下のように3つのコンテナが”running”になっています。

Passwordの設定
以下の2つのpasswordを設定します。
- elasticsearch用の”elastic”アカウント
- kibana用(kibanaが内部でelasticsearchに接続する)”kibana_system”アカウント
elasticsearchの”elastic”アカウントのpasswordを設定する
以下コマンドをTerminalで実行し、elasticsearchのコンテナに入ります。
nerdctl exec -it es01_0502 /bin/bash
プロンプトが以下のように変わります。

以下コマンドを実行し、elasticアカウントのパスワードを発行します。
bin/elasticsearch-reset-password -u elastic -b

上図のように、New valueとして、新規にpasswordが発行されます。新たに発行されたpasswordを、composeファイルの”elasticsearch”サービス下の”ELASTICSEARCH_PASSWORD”に設定します。

passwordは実行された環境毎に異なりますので、自端末で出力された値を使用してください。
kibanaがelasticsearchに内部接続する際に使用する”kibana_system”アカウントのpasswordを設定する
elasticsearchのコンテナに入ったまま、続けて以下コマンドを実行します。
bin/elasticsearch-reset-password -u kibana_system -b

同様に、New valueとして、新規にkibana_systemアカウント用のpasswordが発行されます。新たに発行されたpasswordをcomposeファイルの”kibana”サービス下の”ELASTICSEARCH_PASSWORD”に設定します。

コンテナ再構築
以下コマンドで、コンテナを再起動し、Composeファイルに設定したパスワード反映させます。
停止コマンド
nerdctl compose -f docker-compose.yml down
起動コマンド
nerdctl compose -f docker-compose.yml up -d
Kibanaにアクセスし、動作確認
以下URLでkibanaにアクセスし、動作確認します。
http://localhost:5601
kibanaへのログイン画面が表示されます。

usernameに”elastic”、Passwordに設定したpasswordを入力し、Log inを押下します。

home画面が表示されれば成功です。

Logstash動作確認
動作確認用サンプルデータの配備
以下内容のtextファイルを用意し、”pipeline”フォルダ配下に”test_data.json”という名前で配置してください。
{"name": "Alice", "age": 30}
{"name": "Bob", "age": 25}
{"name": "Test", "age": 78}

Logstashが、この”test_data.json”ファイルを読み取り、elasticsearchにデータ送信する動作を確認します。
logstash.confファイルの修正
logstash.confファイルの中に、elasticアカウントのpasswordを指定しますので、それを新たに発行したpasswordに変更してください。

Composeファイルの修正
logstashのvolumesで、下図の赤枠箇所がコメントアウトされているので、コメントアウトを外します。

Logstashを再起動
コンテナを再作成し、comoseファイルの追加設定を反映させます。
停止コマンド
nerdctl compose -f docker-compose.yml down
起動コマンド
nerdctl compose -f docker-compose.yml up -d
データ取り込み確認
Kibanaにログインし、メニューからDevToolsを選択してください。

DevToolsのConsoleで以下コマンドを実行し、”test-index”という名称のindexが作成されていることを確認してください。
get _cat/indices?index=test*
コマンド実行後、画面右側に、test-indexという文字が記載されていればOKです。Logstashから、test-indexのデータが送信され、Elasticsearchがtest-indexという名称のインデックスを作成し、データを保管しています。

次に、以下コマンドを実行し、test-indexインデックスの中身を確認します。
get test-index/_search
”test_data.json”に記載されたJSON情報が取り込まれていることを確認出来ます。

Logstashにより、”test_data.json”の内容がelasticsearchに取り込まれたことを確認しました。
参考コマンド
# コンテナ作成、削除
nerdctl compose -f docker-compose.yml down
nerdctl compose -f docker-compose.yml up -d
# コンテナ稼働確認
nerdctl ps
# elasticsearchのコンテナに入る
nerdctl exec -it es01_0502 /bin/bash
nerdctl exec -it logstash_0502 /bin/bash
# アカウントのpasswordを再発行[elasticsearchコンテナに入った状態で実行]
bin/elasticsearch-reset-password -u elastic -b
bin/elasticsearch-reset-password -u kibana_system -b
# log確認
nerdctl compose logs -f logstash
nerdctl compose logs -f kibana
nerdctl compose logs -f elasticsearch
nerdctl compose logs --tail=100 logstash
# restart service
nerdctl compose restart logstash