1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Fluentdを利用して、Dockerコンテナのログを別システムへ転送する

Last updated at Posted at 2025-01-07

概要

Dockerコンテナにて出力されているログをFluentdにて収集し、別システムへ転送するためのセットアップ手順を記載します。

環境

本手順で取り扱う内容は、次の環境にて確認しています。

  • Dockerコンテナ
    マシン:Amazon EC2
    OS:Ubuntu 24.04

  • Fluentd Server
    マシン:Amazon EC2
    OS:Ubuntu 24.04

構成図は次のようになります。
image.png

  • 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"で、コンテナのログは引き続き閲覧可能です。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?