Docker Composeファイルの設定
メニューを表示するにはスワイプしてください
すべての必要な設定(Filebeat、Logstash、Flaskアプリケーション)が整ったので、これらをまとめて1つのシステムとして実行します。そのために、Docker Composeを使用します。
Docker Composeは、すべての必要なコンテナを1つのYAMLファイルで定義し、1つのコマンドで実行できるツール。
各サービスごとに個別のdocker runコマンドを書く代わりに、docker-compose.ymlに設定を記述し、すべてをまとめて実行できます。
シンプルなdocker-compose.ymlファイルの例は次のとおりです:
docker-compose.yml
それでは、各コンテナについて説明しながら、ファイル全体を段階的に作成していきます。
Flaskアプリケーション
ログを生成するメインアプリケーション。
docker-compose.yml
このブロックは、Docker に現在のフォルダー(Dockerfile が存在する場所)からコンテナをビルドするよう指示します。
コンテナ名は flask-app です。
volumes 行はローカルの ./logs フォルダーをコンテナ内の /logs に接続します。これにより、アプリケーションによって作成されたすべてのログがコンテナ内とコンピュータの両方に保存されます。
アプリケーションはコンテナ内でポート 5000 で実行されますが、マシンのポート 5050 にマッピングされるため、ブラウザで http://localhost:5050 からアクセスできます。
Filebeat
Filebeat は、ログファイルを監視し、新しいエントリを Logstash に送信するエージェントとして機能します。
docker-compose.yml
Filebeat は公式の 8.15.0 イメージから実行されます。
root ユーザーとして実行されるため、ログファイルを読み取る権限があります。
./logs フォルダーを読み取り専用モードでアタッチし、filebeat.yml 設定ファイルもマウントします。これにより、Filebeat が監視するログと送信先が指定されます。
depends_on により、アプリケーションと Logstash が起動した後にのみ Filebeat が開始されます。
Logstash
Logstash は Filebeat からログを受信し、(例えば JSON のパースなど)処理を行い、Elasticsearch へ転送します。
docker-compose.yml
このコンテナは公式のLogstashイメージを使用。
logstash.conf設定ファイルをマウントし、Logstashに受信ログの処理方法を指示。
コンテナはElasticsearchが起動した後にのみ開始され、処理済みログの保存先が必要。
ポート5044を公開し、FilebeatがデータをLogstashに送信可能。
Elasticsearch
Elasticsearchはログをドキュメントとして保存し、高速な検索を実現。
docker-compose.yml
公式の Elasticsearch イメージバージョン 8.15.0 を使用。
discovery.type=single-nodeは、シングルノードクラスター(ローカルテストに十分)で実行していることを指定。xpack.security.enabled=falseはセキュリティを無効化し、ユーザー名やパスワードの設定が不要。ES_JAVA_OPTSは Java プロセスのメモリ使用量を制限。
サービスはポート 9200 で http://localhost:9200 からアクセス可能。
Kibana
Kibana は Elasticsearch 用のウェブインターフェース。ログの可視化やダッシュボードの作成に利用。
docker-compose.yml
公式のKibanaイメージを使用。
ポート5601が公開されているため、ブラウザでhttp://localhost:5601からKibanaにアクセス可能。
ELASTICSEARCH_HOSTSはKibanaがElasticsearchコンテナに接続し、データを取得・表示するための設定。
最終的なdocker-compose.yml
すべてのサービスが正しい順序で接続された、完全なDocker Composeファイル。
docker-compose.yml
この docker-compose.yml は、すべてのサービスを正しい順序で起動します。Flask アプリケーションがログを生成し、Filebeat がそれらを収集して Logstash に送信します。Logstash はログを処理し、Elasticsearch に転送します。Kibana はデータの閲覧と分析のためのウェブインターフェースを提供します。
残る作業はシステムを実行し、テストすることだけです。これについては次の章で説明します。
1. この構成における Docker Compose の主な目的は何ですか?
2. Flaskアプリケーションからログファイルを収集し、Logstashに送信する役割を担うサービスはどれか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください