🔍
AWS FireLens について
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 ECR
、Docker Hub
の3つがある - AWSの推奨は、
Amazon ECR 公開ギャラリー
(参照)
- イメージの利用方法には、
-
logConfiguration
のoptions
について
オプションはログの出力先のサービスによって変わりまして、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ソケット通信
参考文献
- AWS公式ブログ
- AWS公式ドキュメント
Discussion