16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firelensで、fluentbitからdatadog/S3へデータを転送できるdockerイメージを作成する

Last updated at Posted at 2019-11-23

Firelens構築記事の3回目となります。

1回目 firelensを使用した、ログ分割と監視処理
2回目 ローカルで、fluentbitからdatadog/S3へデータを転送できるdockerイメージを作成する

githubのサンプルはfirelensとの連携まで完成しており、文章中の解説はサンプルベースで行います。

サンプル(Github)

Firelensで動くサンプルの作成

前回、ローカル環境でfluentbitコンテナを構築し、カスタム構成ファイルの調整を行いました。

今回は、作成したカスタム構成ファイルをベースに
Firelens用のfluentbitカスタムイメージを作成し、
Amazon ECS上での動作を確認します。

Firelens用のfluentbitカスタムイメージを作成する

docker-composeの、firelens-fluentbitコンテナ部分の解説となります。

docker-compose

/docker-compose.yml
  firelens-fluentbit:  
    build:
      context: firelens-fluentbit
    image: *****/firelens:firelens-fluentbit

dockerfile

ローカル環境では、fluentbitはオリジナルのイメージを使用しましたが
fireLens用のfluentbitイメージは、awsの提供イメージからカスタムします。
その他は同じです。
https://hub.docker.com/r/amazon/aws-for-fluent-bit

/firelens/firelens-fluentbit/dockerfile
FROM amazon/aws-for-fluent-bit:1.3.2
ENV TZ='Asia/Tokyo'
・・・

fluentbitカスタム構成ファイル

ドキュメントを元に、FIreLens用の修正を加えます
https://docs.aws.amazon.com/en_us/AmazonECS/latest/userguide/using_firelens.html

ローカルのカスタム構成ファイルとの相違点

fluent-bit.confには、INPUTセクションは記述しない

当該セクションはFireLensにより上書きされるので、記述しません。

document
In your custom configuration file, for tasks using the bridge or awsvpc network mode, you should not set a Fluentd or Fluent Bit forward input over TCP because FireLens will add it to the input configuration.

INPUTされたデータへのタグ定義も記述出来ませんが、
FireLensよりINPUT時のタグが指定されるため
stream-processorでワイルドカードを2つ使用して、Firelensタグを検出します。

stream-processor.conf
[STREAM_TASK]
    Name   access
    Exec   CREATE STREAM access WITH (tag='access') AS SELECT * from TAG:'*-firelens-*' WHERE service = 'access.log';

その他は、ローカルのfluentbitと同じように
S3の出力プラグインをマルチステージビルドにより生成し
各種カスタム構成ファイルを含めたdockerイメージを生成します。
作成したイメージはECRにPUSHし、呼び出せるようにします。
Firelens用fluentbitイメージの生成は以上です。

Amazon ECSの設定

作成したアプリケーションコンテナとFirelens用fluentbitコンテナで
Amazon ECS(Fargate起動タイプ)を構築します。

タスク定義

類似の記事は多いので、行うべき内容だけまとめます。

  1. アプリケーションコンテナと、fluentbitコンテナを定義する
  2. アプリケーションコンテナのログドライバをfluentbitにする
  3. fluentbitコンテナのログドライバをcloudwatchにする
  4. fluentbitコンテナで、カスタム構成ファイルの指定を宣言する
    その他
  5. コンテナに注入する環境変数(Credential情報等)を定義する
1.アプリケーションコンテナと、fluentbitコンテナを定義する

Log Router Integrationの項目が追加され、使用するfluentbitイメージの選択が可能です。
但し、詳細な設定項目は無く、結局JSONベースで設定を行う必要があります。
スクリーンショット 2019-11-23 23.03.52.png

2.アプリケーションコンテナのログドライバをfluentbitにする
 "logConfiguration": {
    "logDriver": "awsfirelens",
    "secretOptions": null,
    "options": null
  },
3.fluentbitコンテナのログドライバをcloudwatchにする
"logConfiguration": {
    "logDriver": "awslogs",
    "secretOptions": null,
    "options": {
        "awslogs-group": "/ecs/first-run-task-definition",
        "awslogs-region": "ap-northeast-1",
        "awslogs-stream-prefix": "firelens"
    }
},
4.fluentbitコンテナで、カスタム構成の指定を宣言する

fluent_bit_custom.confの使用をJSONで記述します。
fluentbitイメージに内包しているカスタム構成ファイルのパスを指定します。

https://docs.aws.amazon.com/en_us/AmazonECS/latest/userguide/using_firelens.html
Specifying a Custom Configuration File

    "firelensConfiguration": {
        "type": "fluentbit",
        "options": {
            "config-file-type": "file",
            "enable-ecs-log-metadata": "true",
            "config-file-value": "/fluent-bit/etc/fluent_bit_custom.conf"
        }
    },
5.コンテナに注入する環境変数(Credential情報等)を定義する

余談ですが、環境とfluentbitコンテナの依存度を低くするため
コンテナの環境変数として、各種Credentialを指定します。
必要に応じ、KMS等で暗号化を施してください。

クラスタ定義

Fargate起動タイプで作成します。

クラスタより、タスク実行

ここも細かい指定は無いですが、動作確認の為
・セキュリティグループで80ポートのインバウンドを許可
・パブリックIPを使用する
等、PHPにアクセスができるよう調整します。

サンプルの実行

実行すると、作成したfagateタスクにパブリックIPが付与されるので
アクセスすると、ローカルと同様に、datadog,s3への疎通が確認できます。
(第二回と同様の内容なので、キャプチャは割愛します)

まとめ

「fargateとFirelensを組み合わせ、複数のログを複数の場所に出力する」
というポイントで、三回の内容でお送りしました。
現状のFirelensの仕様やドキュメントの内容では、細かいログ管理を行いたい時に中々手間が掛かるなと思い、試行錯誤の結果をまとめた次第です。
もう少し内容の整備が進むと良いと思いました。

基本はこれで終わりですが
fuentbitのカスタム構成ファイルのチューニングで、スマートな構築が出来そうだった為
追加でもう一度記事を書いて、今回の内容は終わりにしたいと思います。

16
7
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
16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?