導入
このチュートリアルでは、Ubuntu(バージョン22.04)を実行しているサーバーにDocker Composeを使用してELK STackをインストールする方法を学習します。ELK Stackは、Elasticsearch、Kibana、Logstashで構成されています。.
- Elasticsearch は検索および分析エンジンです。.
- Kibana はデータ分析用のユーザー インターフェースです。.
- Logstash はアプリケーション関連のログを分析できます。.
前提条件
- Ubuntu 22.04以降を実行しているサーバー: そのサーバーへのSSHアクセスとrootまたはsudoユーザーアクセス
- Docker、Docker Compose、ElasticSearch、YAML の基礎知識
ステップ1 – Docker Composeをインストールする
すでにサーバーにDocker Composeがインストールされている場合は、この手順をスキップできます。まず、以下のコマンドでサーバーにSSH接続してください。
ssh holu@<your_host>
必ずaptパッケージを更新し、cURLをインストールしてください。
sudo apt-get update && sudo apt-get install curl -y
curl がインストールされていることを確認したら、Docker が提供するクイック インストール スクリプトを使用して、Docker と Docker Compose をインストールできます。
curl https://get.docker.com | sh
このコマンドはget.docker.comからスクリプトをダウンロードし、それをshに「パイプ」します(ダウンロードしたスクリプトをshに渡し、shがスクリプトを実行してDockerをインストールします)。最後に、dockerコマンドを使用するたびにsudoを使わなくても済むように、自分自身をDockerグループに追加します。.
sudo usermod -aG docker holu
変更を適用するには、必ずログアウトして再度ログインしてください。.
ステップ2 – docker-compose.yamlを作成する
ファイル docker-compose.yaml ELKスタックのすべてのインフラストラクチャを宣言するために使用されます。単一のコマンドで複数のコンテナを作成するために使用されます。.
サーバーに新しいフォルダを作成し、ファイルを作成します docker-compose.yaml そこに作成します:
mkdir elk-stack && cd elk-stack && touch docker-compose.yaml
Docker Compose を使用して、次の 3 つの Docker コンテナを作成します。

これら3つのコンテナを作成するには、ファイルに次の内容を追加します。 docker-compose.yaml 追加:
version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=false現在、.env ファイルという要素が一つ欠けています。.env ファイルは、パスワードや API トークンなどの秘密情報を保存し、設定やコードから削除するために使用されます。Docker Compose は .env ファイルを自動的に検出し、${MY_VARIABLE} のような変数を env 変数に置き換えます。.
env を作成し、次の行を追加します。
ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>これで、docker compose を実行して、すべてを起動できるようになります。
docker compose up -d
出力:
[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Startedこのコマンドを使うことができます ドッカーps すべてが期待どおりに動作しているかどうかを確認するために使用します。.
holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch
ウェブブラウザでKibanaを起動するには、次のように入力します。 :5601 URL バーで開きます。.
ユーザー名付き 弾力性のある ファイルに以前保存したパスワード .env ログインすることに決定しました。.

ログイン時にこのページが表示された場合は、「自分で探索」をクリックします。.

これでKibanaのホームページにアクセスできるようになります。画面は以下のようになります。

ステップ3 – Logstash
いよいよパズルの最後のピース、Logstashを追加します。Logstashはアプリケーションのログを分析し、分析したログをElasticsearchに送信します。.
docker-compose.yaml 「kibana」の下の「サービス」セクションで 4 番目のコンテナを編集して追加します。.
logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.confLogstashの設定は少し複雑です。logstash.confという追加の設定ファイルが必要です。Logstashはパイプラインと呼ばれる仕組みで動作します。パイプラインとは、Logstashの動作(ログの取得元、ログの解析方法、ログの送信先)を記述したファイルです。パイプラインはlogstash.confファイルに記述されます。.
これは、最も基本的なものの 1 つです。
input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}非常に分かりやすいですね。ファイル(この場合は/var/log/dpkg.log)を入力として受け取り、Elasticsearchと標準出力に出力します。.
上記の例を logstash.conf ファイルに配置します。.
elk-stack ディレクトリには、次のファイルが含まれているはずです。
elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.conf次のコマンドを使用して Logstash を起動できるようになりました。
docker compose up -d
出力:
[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana RunningKibanaからLogstashにアクセスできるようになりました。まずはLogstashデータビューを作成する必要があります。.
Analyticsの検出ページに移動します。次のような画面が表示されます。

「データ ビューの作成」ボタンをクリックしてデータ ビューを作成します。

データ ビューを保存すると、Logstash からのレポートが表示されるようになります。

ステップ4 – スタックを破壊する
最後に、スタックを停止してコンテナを削除するには、次のコマンドを実行します。
docker compose down
出力:
[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default Removed結果
Docker ComposeでELKスタックが動作しているはずです。次のステップでは、Filebeatなどのレポートジェネレーターを追加するか、公式ドキュメントを確認してください。.











