3
1

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 5 years have passed since last update.

Fargate のログを FireLens を通して、EC2 の Fluentd/td-agent に出力する

Last updated at Posted at 2019-11-23

概要

AWS FireLens を利用して、Fargate に立ち上げた nginx から EC2 インスタンスに用意した td-agent にログを落とす構成を作ってみます。今回の例は ECS(Fargate) ですが、CPU Unit や Memory Limit 周り以外は設定としては ECS(EC2) でも同様です。

図示すると
image.png

のような状態から、
image.png

のような構成を作ります。

構築

Fargate で nginx が動作している状態

Task Definition は以下のようになっているはずです。

image.png (155.0 kB)

image.png (270.9 kB)

image.png (108.5 kB)

nginx コンテナは以下のようになっています。

image.png (158.0 kB)

image.png (132.9 kB)

FireLens の設定を入れる

Task Definition の設定で、 Enable FireLens integration にチェックを付けて Apply します。

image.png (113.2 kB)

すると、コンテナに log_router というコンテナが増えます(内部では用意されたイメージで fluentbit が動作します)

image.png (72.5 kB)

ログを出力する方のコンテナ(ここでは nginx) 側で、ログをどう処理するかの設定を行います。今回は所定の fluentd が動作しているホストに forward したいので、以下のような設定を nginx コンテナに足します。
Log driver を awesfirelens にして、Name を forward にします。これでログの転送が行われます。Host と Port は今回用意するログの受け側のFluentd/td-agentのIPアドレス/ポートに設定します。

image.png (67.4 kB)

ECS 側の設定はこれで完了です。
fluentd におけるログのタグは <container name>-firelens-* が FireLens に付与されます。この Task Definition だと、nginx-firelens-* というタグが付きます。

td-agent をインストールした EC2 インスタンスを用意する

ログの受け側の EC2 インスタンスを作ります。
通常の Amazon Linux 2 でインスタンスを作成して、適切に security group を開けた後、以下のように設定を投入します。

td-agent のインストール

# curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh
# mkdir -p /var/log/firelens/nginx
# chown -R td-agent:td-agent /var/log/firelens/

td-agent の設定

この設定により、転送されてきたログが /var/log/firelens/nginx.YYYYMMDD.log に出力されます。

<source>
  @type forward
  @id input_forward
</source>

# FireLens の設定により、 nginx-firelens-* というタグで飛んでくるので、こうしておきます
<match nginx-firelens-*>
  @type file
  @id mdoi-nginx
  append true
  path /var/log/firelens/nginx
  time_slice_format %Y%m%d
  flush_interval 1s

  <format>
    @type single_value
    message_key log
  </format>
</match>

新しい Task Definition をデプロイする

受け側が設定できたので、Service で新しい Task Definition を展開すると、設定が反映されます。 td-agent 側の flush_interval にもよりますが、nginx にアクセスすると、すぐにアクセスログが /var/log/firelens/nginx.YYYYMMDD.log に出力され始めます。

ハマったところ

  • Fargate ではなく EC2 のクラスタで試した際にインスタンスの ECS Agent のバージョンが古いと正しく設定できないことがありました。 ECS Agent のバージョンは最新にしておきましょう。
  • Enable FireLens integration したあと、何故か Task Definition がエラーで保存できないことがありましたが、 コンテナの設定を開いたり閉じたりしてみると解消します。エラーになったら試してみましょう。
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?