FireLens触ってみた

完全に理解できてるわけでないので、違ったらご指摘いただけると!

FireLensとは?

ECSとかのLogDriverとして、FluentdやFluentbitを利用して、簡単にFirehoseとかに投げることができる!という認識。
https://github.com/aws/containers-roadmap/tree/master/preview-programs/firelens

何が嬉しいのか?

自分でFluentdを立てて、ボリューム共有して、そこからFirehoseとかに投げるみたいなことをすることはもともと可能。
(というか既にそんな感じでやっている)
ただ、その設定がほとんどいらずに、標準出力に投げたログを簡単にFirehoseに連携できる!

メリット

  1. 自身でFluentdのイメージの保守をしないでOK。
    • AWS が作ってくれている amazon/aws-for-fluent-bit:latest を利用すればOK。
  2. 簡単に設定できる。
    • タスクに、上記のイメージを追加して、設定をちょっとすることで、Fluentbitの利用が可能に。
  3. 正規表現で保存するログを選別できる。

デメリット?

多分、Cloudwatch と、Firehose両方投げるっていうのは、現状簡単にできない?
FluentBitを自分で立てればできそうなので試してみる。

設定の仕方

  1. aws ecs register-task-definition --generate-cli-skeletonで、定義JSONのスケルトンを取得
  2. 下記のように指定
{
  "family": ...,
  "containerDefinitions": [
    {
        ...,
        "logConfiguration": {
            "logDriver": "awsfirelens",
            "options": {
              "Name": "firehose",
              "region": "us-east-1",
              "delivery_stream": "stream", // kinesis streamの名前
              "include-pattern": "^.*include.*$" // 正規表現で取り込むログを指定
            }
        }
    },
    {
      "name": "log_router",
      "essential": true,
      "image": "amazon/aws-for-fluent-bit:latest",
      "firelensConfiguration": {
        "type": "fluentbit",
        "options": {
          "enable-ecs-log-metadata": "false"
        }
      }
    }
  ],
  ...
}
  1. aws ecs register-task-definition --cli-input-json file://${JSON_PATH} を実行。

ちょっとはまったこと

  • aws cli の versionが古かった...
  • firehoseの方に上手くいかなかった
    • IAMロールに権限が足りなかった。
    • log_router のタスクの方で、awslogs を設定すれば、エラーが起きる場合、cloudwatchlogsで確認できるから便利だった!