Firelens for Fargateでログを複数箇所に吐き出す
Fargate上のNginxコンテナのアクセスログを、fluent bitから複数の宛先(CloudWatchLogs / Kinesis Firehose)に出力できるか検証しました。
結論からいうとできる、が、タスク定義だけでは解決できず、CustomConfigurationを使う必要がありそう。というところです。
注意点としては、Fargate起動モードの場合、CustomConfigurationのソースにS3が使えないため、カスタムDockerImageを作成する必要がある点です。
Fargate 起動タイプを使用するタスクの場合、サポートされる config-file-type の値は file のみです。
FluentBit用DockerFile
FROM amazon/aws-for-fluent-bit:latest COPY fluent-bit.conf /tmp/
fluent-bit.conf
[OUTPUT] Name firehose Match * region ap-northeast-1 delivery_stream mgm-sample [OUTPUT] Name cloudwatch Match * region ap-northeast-1 log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
taskdefinitions.json
{ "family": "FireLensSample", "taskRoleArn": "arn:aws:iam::123456789012:role/RoleForESCTasksFireLens", "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "containerDefinitions": [ { "essential": true, "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/custom-fluent-bit", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "file", "config-file-value": "/tmp/fluent-custom.conf" } }, "memoryReservation": 500 }, { "essential": true, "image": "nginx:latest", "name": "Nginx", "logConfiguration": { "logDriver":"awsfirelens" }, "memoryReservation": 1000, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "1024", "memory": "2048" }
もう少し確認したい点は、 fluent-bit.conf
の FILTER
が自分の環境だとうまく動作しなかった点。
Include/Exclude Patternを柔軟に設定できると、便利度がグーンと上がるけど、そもそもtaskdef.jsonで完結したいなという思いがある。