🔍

AWS FireLens について

2022/05/19に公開

FireLensとは?

  • Amazon ECSで使用できるカスタムログルーター

  • ECSのタスク定義の中に含めて、サイドカーとして配置する

  • 内部でFluentdまたはFluent Bitを使用しているため、Fluentd、Fluent Bitの機能は使える

    • CloudWatch Logs、Amazon Elasticsearch Service、Amazon S3など(複数に)にアプリケーションログを保存できる
    • ログのフィルタリング
  • つまり、Fluentd, Fluent BitのAWSマネージドサービスようなもの

FireLensの使い方

  • ECSのタスク定義に記述する形で設定する
  • AWS公式のサンプルコードがあるので、基本的にこのコードを参考にする
task-definitions.json
[
  {
    "name": "firelens",
    "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable",
    "firelensConfiguration": {
      "type": "fluentbit",
      "options": {
        "enable-ecs-log-metadata": "false"
      }
    },
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "firelens",
        "awslogs-region": "ap-northeast-1",
        "awslogs-create-group": "true",
        "awslogs-stream-prefix": "firelens"
      }
    },
  },
  {
    "name": "app",
    "image": "nginx",
    "logConfiguration": {
      "logDriver": "awsfirelens",
      "options": {
        "Name": "cloudwatch",
        "region": "ap-northeast-1",
        "log_group_name": "/aws/ecs/containerinsights/$(ecs_cluster)/application",
	"log_key": "log",
        "auto_create_group": "true",
        "log_stream_prefix": "firelens-",
      }
    },
    "memoryReservation": 100
  }
]
  • FluentdとFluent Bitどっちを使った方がいいのか?

    • AWSの推奨はFluent Bit(参照
    • Fluentdに比べてリソース使用量が大幅に少ないから
    • AWSはFluent Bitに優先的にプラグインの追加や改善を提供し続ける
  • FireLensコンテナのImageについて

    • イメージの利用方法には、Amazon ECR 公開ギャラリーAmazon ECRDocker Hubの3つがある
    • AWSの推奨は、Amazon ECR 公開ギャラリー参照
  • logConfigurationoptionsについて
    オプションはログの出力先のサービスによって変わりまして、Fluentd, Fluent Bitの公式に各サービスで扱えるオプションが載っています。
    例えば、CloudWatch Logsを出力先に設定したい場合、設定できるオプションはこちら

  • 高度なユースケース(フィルタリングや複数のサービスに送るなど)に対応するためには、FluentdまたはFluent Bitの設定ファイルを自前で用意する必要がある

[INPUT]
    Name forward
    unix_path /var/run/fluent.sock

[INPUT]
    Name forward
    Listen 0.0.0.0
    Port 24224

[INPUT]
    Name tcp
    Tag firelens-healthcheck
    Listen 127.0.0.1
    Port 8877

[FILTER]
    Name   grep
    Match app-firelens*
    Regex  log [Ee]rror

[FILTER]
    Name record_modifier
    Match *
    Record ec2_instance_id i-01dce3798d7c17a58
    Record ecs_cluster furrlens
    Record ecs_task_arn arn:aws:ecs:ap-south-1:144718711470:task/737d73bf-8c6e-44f1-aa86-7b3ae3922011
    Record ecs_task_definition firelens-example-twitch-session:5

@INCLUDE /fluent-bit.conf

[OUTPUT]
    Name null
    Match firelens-healthcheck

[OUTPUT]
    Name firehose
    Match app-firelens*
    delivery_stream demo-stream
    region ap-south-1
  • 設定ファイルの格納場所について
    • 格納方法についてはFireLens用のコンテナイメージを自前で用意して設定ファイルを含める方法と、S3に保存する方法の二つある
    • AWSの推奨は、S3に保存する方法(参照
    • コンテナイメージを用意する場合、設定ファイルを変更するたびにイメージビルドしてECRにプッシュする必要がある

FireLensの仕組み

  • アプリケーションコンテナからFireLensコンテナへのログの送信方法
    • 標準出力に送信 → Unixソケット通信
    • Fluent Logger ライブラリを使用してアプリケーションコードから送信 → TCPソケット通信

参考文献

Discussion