概要
Dockerコンテナにて出力されているログをFluentdにて収集し、別システムへ転送するためのセットアップ手順を記載します。
環境
本手順で取り扱う内容は、次の環境にて確認しています。
-
Dockerコンテナ
マシン:Amazon EC2
OS:Ubuntu 24.04 -
Fluentd Server
マシン:Amazon EC2
OS:Ubuntu 24.04
- Fluentdをログ収集&転送機能として利用します。
- 本記事ではFluentdはコンテナとして動作させる手順を案内していますが、OSに直接インストールする形でも動作するはずです。
- ログ収集対象のDockerコンテナが複数台存在する場合もあると思いますが、本記事では話をシンプルにするために1台構成としています。
前提条件
ログ収集対象のDockerコンテナが既に稼働していること。
手順
Fluentdセットアップ
本手順は、Fluentdを動作させるマシン上にて作業して下さい。
通信設定
セキュリティグループのインバウンドルールにて、ログ収集対象コンテナが動作しているマシンからのTCP 24224 Port接続を許可して下さい。
Fluentdコンテナインストール
Fluentd用のディレクトリを作成します。
次のコマンドではfluentd
という名前のディレクトリを作成していますが、任意の名前で構いません。
$ mkdir fluentd
$ cd fluentd
compose.yaml
を作成し、編集します。
$ vi compose.yaml
編集する内容のサンプルが次になります。
Fluentdのバージョンがv1.18.0-1.0
となっていますが、こちらは2024/12/26時点での最新バージョンになるので、DockerHubのページにて確認いただき、適宜書き換えて下さい。
services:
fluentd:
container_name: fluentd
image: fluent/fluentd:v1.18.0-1.0
restart: unless-stopped
volumes:
- ./config:/fluentd/etc
ports:
- 24224:24224
compose.yaml
が存在するディレクトリにて、次のコマンドを実行して下さい。
$ mkdir config
$ cd config
fluent.conf
を作成し、編集します。
$ vi fluent.conf
編集する内容のサンプルが次になります。
各パラメータの詳細が知りたい場合は、ドキュメントを参照して下さい。
in_forward Input plugin
Http output plugin
<source>
@type forward
</source>
<match docker.**>
@type http
endpoint <YOUR-ENDPOINT>
open_timeout 2
<format>
@type json
</format>
content_type application/json
headers {"Authorization": "Bearer <YOUR-ACCESSTOKEN>"}
<buffer>
chunk_limit_records 1
</buffer>
</match>
編集が完了したら、Fluentdコンテナを起動します。
compose.yaml
が存在するディレクトリに移動し、docker compose up -d
を実行して下さい。
$ cd ../
$ docker compose up -d
Fluentdコンテナが起動していることを確認して下さい。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f519dfd9d0d6 fluent/fluentd:v1.18.0-1.0 "tini -- /bin/entryp…" About an hour ago Up 14 minutes 5140/tcp, 0.0.0.0:24224->24224/tcp, :::24224->24224/tcp fluentd
以上でFluentdコンテナのセットアップは完了です。
ログ収集対象コンテナの設定変更
本手順は、ログ収集対象コンテナが稼働しているマシンにて作業して下さい。
コンテナがdocker composeにて動作している場合
compose.yaml
の内容を編集する必要があります。
対象コンテナのセクションにて、次の内容を挿入して下さい。
<FluentdマシンのIP>
となっている箇所は、先ほどセットアップしたFluentdマシンのIPを指定して下さい。
logging:
driver: "fluentd"
options:
fluentd-address: "<FluentdマシンのIP>:24224"
tag: "docker.{{.Name}}"
compose.yaml
が存在するディレクトリにて、次のコマンドを実行し、変更内容を反映させてください。
$ docker compose up -d
コンテナがdocker composeにて動作していない場合
docker composeにて動作していない場合は、ログのオプションを付与した上で、再度起動させてください。次のコマンドはnginxコンテナのサンプルになります。
docker run -d \
--log-driver=fluentd \
--log-opt fluentd-address=<FluentdマシンのIP>:24224 \
--log-opt tag=docker.{{.Name}} \
nginx:latest
動作確認
転送先システムにて、ログが受信できていることを確認して下さい。
もし、受信できていない場合、次のコマンドにてFluentdのログを確認することが有効です。
$ docker logs fluentd -f
補足
- ログ収集対象コンテナから出力されるログをFluentdに転送しても、"docker logs <コンテナ名> -f"で、コンテナのログは引き続き閲覧可能です。
参考