はじめに
Docker はアプリケーションをコンテナ化するための広く採用されているプラットフォームですが、これらのコンテナのログを管理することは、健全で効率的な Docker 環境を維持する上で重要な側面です。このチュートリアルでは、アプリケーションの動作をより良く可視化し制御するために、Docker コンテナのロギング設定方法を、基本から高度なテクニックまで、段階的に解説します。
Docker ロギング入門
Docker は、開発者がアプリケーションを一貫性があり再現可能な方法でパッケージ化およびデプロイすることを可能にする、人気のコンテナ化プラットフォームです。Docker コンテナ内でアプリケーションを実行する場合、ロギングは監視とトラブルシューティングの重要な側面です。Docker は、コンテナ化されたアプリケーションのロギングを設定および管理するためのいくつかのオプションを提供しています。
Docker ロギングについて
Docker は、コンテナによって生成されたログを処理するためにロギングドライバを使用します。ロギングドライバは、ログの保存方法とアクセス方法を決定します。Docker は、さまざまなロギングドライバをサポートしており、以下のようなものがあります。
json-file:デフォルトのロギングドライバで、ホストのファイルシステム上に JSON 形式でログを保存します。syslog:ログを syslog サーバーに送信します。journald:ログを systemd ジャーナルに送信します。gelf:ログを Graylog Extended Log Format (GELF) エンドポイントに送信します。fluentd:ログを Fluentd サーバーに送信します。awslogs:ログを Amazon CloudWatch Logs に送信します。splunk:ログを Splunk エンタープライズまたは Splunk Cloud インスタンスに送信します。
ロギングドライバの選択は、アプリケーションの要件、実行しているインフラストラクチャ、ログ管理および分析に使用しているツールによって異なります。
コンテナログへのアクセス
実行中のコンテナのログにアクセスするには、docker logsコマンドを使用できます。このコマンドを使用すると、特定のコンテナのログを表示したり、リアルタイムでログを追跡したり、さまざまな基準に基づいてログをフィルタリングしたりできます。
## コンテナのログを表示
docker logs my-container
## リアルタイムでログを追跡
docker logs -f my-container
## ログの最後の10行を表示
docker logs --tail 10 my-container
デフォルトでは、docker logsコマンドは、コンテナ用に指定されたロギングドライバからのログを取得します。json-fileドライバを使用している場合、ログはホストのファイルシステム上に保存され、ホストからも直接アクセスできます。
Docker コンテナのロギング設定
ロギングドライバの設定
Docker コンテナのロギングドライバは、いくつかの方法で設定できます。
Docker デーモン全体のロギングドライバを設定する:
## Docker デーモンの設定ファイル編集 ## ロギングドライバの設定を追加 ## Docker デーモンを再起動特定のコンテナのロギングドライバを設定する:
## 特定のロギングドライバでコンテナを実行 docker run -d --log-driver=syslog --log-opt syslog-address=tcp://192.168.1.100:514 my-appDocker サービスのロギングドライバを設定する:
## 特定のロギングドライバで Docker サービスを作成 docker service create --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-service
ロギングオプションの設定
ロギングドライバによっては、ロギング動作をカスタマイズするためのさまざまなオプションを設定できます。一般的なオプションには以下があります。
max-size:ログファイルが回転する前の最大サイズ。max-file:保持するログファイルの最大数。syslog-address:syslog サーバーのアドレス。fluentd-address:Fluentd サーバーのアドレス。awslogs-group:CloudWatch Logs グループの名前。splunk-url:Splunk インスタンスの URL。
これらのオプションは、コンテナの実行時またはサービスの作成時に --log-opt フラグを使用して設定できます。
ログデータの表示
ロギングドライバとオプションを設定したら、適切なツールを使用してログデータを閲覧できます。たとえば、json-file ドライバを使用している場合は、ホストのファイルシステム上で直接ログを表示できます。Syslog や Fluentd などのリモートロギングサービスを使用している場合は、それぞれの管理インターフェースを通じてログにアクセスする必要があります。
高度なロギング技術
Fluentd によるログの集約
Fluentd は、Docker コンテナを含むさまざまなソースからのログを集約および処理するために使用できる、人気のオープンソースデータコレクタです。Fluentd を Docker と一緒に使用するには、以下の手順に従います。
ホストマシンに Fluentd をインストールします。
## Ubuntu 22.04 に Fluentd をインストール sudo apt-get update sudo apt-get install -y td-agentFluentd を設定して Docker コンテナからのログを収集します。
## Fluentd の設定ファイル (td-agent.conf) を編集 sudo vim /etc/td-agent/td-agent.conf ## 以下の設定を追加 <source> @type docker tag docker.* dump_stdin true </source> <match docker.**> @type forward send_timeout 60s recover_wait 10s heartbeat_interval 1s hard_timeout 60s <server> host 192.168.1.100 port 24224 </server> </match>Fluentd サービスを再起動します。
sudo systemctl restart td-agentfluentdロギングドライバを使用して Docker コンテナを実行します。docker run -d --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-app
この設定により、Docker コンテナからのログは Fluentd サーバーに転送され、そこでさらに処理、分析、保存できます。
Elasticsearch と Kibana への統合
もう 1 つの高度なロギング技術は、Docker ログを Elasticsearch と Kibana に統合することです。Elasticsearch は強力な検索および分析エンジンであり、Kibana はログデータの視覚化および分析のための使いやすいインターフェースを提供します。
Docker ログを Elasticsearch と Kibana に統合するには、logstash ロギングドライバまたは elastic ロギングドライバを使用できます。ここでは、logstash ドライバを使用した例を示します。
Docker Compose を使用して Elasticsearch と Kibana スタックを実行します。
version: "3" services: elasticsearch: image: elasticsearch:7.9.2 environment: - discovery.type=single-node kibana: image: kibana:7.9.2 ports: - 5601:5601 logstash: image: logstash:7.9.2 command: logstash -f /etc/logstash/conf.d/logstash.conf volumes: - ./logstash.conf:/etc/logstash/conf.d/logstash.conf以下の設定を含む
logstash.confファイルを作成します。input { docker { host => "unix:///var/run/docker.sock" tags => ["docker"] } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "docker-%{+YYYY.MM.dd}" } }Elasticsearch、Kibana、Logstash スタックを実行します。
docker-compose up -dlogstashロギングドライバを使用して Docker コンテナを実行します。docker run -d --log-driver=logstash --log-opt logstash-address=logstash:5000 my-app
この設定により、Docker コンテナからのログは Logstash に転送され、Logstash はそれらを Elasticsearch に送信します。その後、Kibana を使用してログデータを視覚化および分析できます。
まとめ
この包括的なガイドでは、Docker コンテナのロギング設定方法を、基本的な設定から高度なロギング技術まで学びます。このチュートリアルを完了するまでに、Docker 環境のロギング機能を最適化する方法を深く理解し、問題のトラブルシューティング、アプリケーションの監視、整理整頓された効率的なコンテナ化されたインフラストラクチャの維持に役立つ知識を習得します。



