Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
AWS Fargate 上の Amazon ECS の複数の送信先にコンテナログを送信するにはどうすればよいですか?
AWS Fargate で実行されているアプリケーションコンテナで、Amazon CloudWatch、Amazon Data Firehose、Splunk などの複数の送信先にログを転送したいと考えています。
簡単な説明
Amazon Elastic Container Service (Amazon ECS) のタスク定義では、特定のコンテナに対して単一のログ設定オブジェクトのみを指定できます。つまり、ログを 1 つの送信先にのみ転送できます。Fargate の Amazon ECS で複数の送信先にログを転送するには、FireLens を利用できます。
**注:**FireLens は Fluent Bit と Fluentd の両方のログフォワーダーで動作します。Fluent Bit は Fluentd よりもリソース効率が高いため、次の解決策では Fluent Bit を使用します。
解決策
前提条件:
次の情報を確認します。
- FireLens は、ECS タスク定義の logConfiguration オブジェクトでオプションとして指定されたキーと値のペアで Fluent Bit 出力定義を生成します。ログがルーティングされる送信先は、Fluent Bit 構成ファイルの [OUTPUT] 定義セクションで指定されます。詳細については、Fluent Bit ウェブサイトの出力を参照してください。
- FireLens はユーザーに代わって設定ファイルを作成しますが、カスタム設定ファイルを指定することもできます。この設定ファイルは Amazon Simple Storage Service (Amazon S3) でホストできます。または、カスタム出力設定ファイルを追加してカスタム Fluent Bit Docker イメージを作成できます。
- Fargate で Amazon ECS を使用している場合は、Amazon S3 から設定ファイルをプルすることはできません。プルするのではなく、設定ファイルを使用してカスタム Docker イメージを作成する必要があります。
IAM アクセス許可の作成
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用しているようにしてください。
タスクロールがログを他の送信先にルーティングするための AWS Identity and Access Management (IAM) 権限を作戦します。たとえば、送信先が Data Firehose の場合、firehose:PutRecordBatch API を呼び出すアクセス許可をタスクに付与する必要があります。
**注:**Fluent Bit は、ログの送信先としていくつかのプラグインをサポートしています。CloudWatch や Kinesis ストリームなどの送信先に必要な許可には、logs:CreateLogGroup、logs:CreateLogStream、logs:DescribeLogStreams、logs:PutLogEvents、kinesis:PutRecords などがあります。詳細については、GitHub のウェブサイトで CloudWatch と Kinesis に対する権限を参照してください。
カスタム出力設定ファイルを使用して Fluent Bit Docker イメージを作成する
-
希望する [OUTPUT] 定義を作成して、logDestinations.conf というカスタム Fluent Bit 設定ファイルを作成します。たとえば、次の設定ファイルには、CloudWatch、Data Firehose、Splunk 用に定義された設定が含まれています。
[OUTPUT] Name firehose Match YourContainerName* region us-west-2 delivery_stream nginx-stream [OUTPUT] Name cloudwatch Match YourContainerName* region us-east-1 log_group_name firelens-nginx-container log_stream_prefix from-fluent-bit auto_create_group true [OUTPUT] Name splunk Match <ContainerName>* Host 127.0.0.1 Splunk_Token xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx Splunk_Send_Raw On注: 複数の送信先には、[OUTPUT] 定義で別々のフィールドを指定する必要があります。例については、GitHub ウェブサイトの amazon-ecs-firelens-examples を参照してください。
-
次の Dockerfile 例を使用して、カスタム Fluent Bit 出力設定ファイルで Docker イメージを作成します。
FROM amazon/aws-for-fluent-bit:latestADD logDestinations.conf /logDestinations.conf**注:**詳細については、Docker ウェブサイトの Dockerfile リファレンス を参照してください。
-
作成した Dockerfile を使用してカスタム fluent-bit Docker イメージを作成するには、次のコマンドを実行します。
docker build -t custom-fluent-bit:latest .**重要:**Dockerfile と同じ場所で docker build コマンドを実行してください。
-
Docker イメージが Amazon ECS で利用できることを確認するには、Docker イメージを Amazon Elastic Container Registry (Amazon ECR) にプッシュします。または、Docker イメージを独自の Docker レジストリにプッシュします。たとえば、ローカルの Docker イメージを Amazon ECR にプッシュするには、次のコマンドを実行します。
docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest -
タスク定義で、FireLens configuration のオプションを更新します。
{ "containerDefinitions": [ { "essential": true, "image": "aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "file", "config-file-value": "/logDestinations.conf" } } } ] }注: カスタム構成ファイルを指定するには、FireLens 構成ファイルには config-file-type オプションと config-file-value オプションが必要です。これらのオプションを含めるには、the AWS CLI または Amazon ECS コンソールを使用してタスク定義を作成します。
-
有効な Amazon ECR イメージの場所を反映するには、設定の containerDefinition セクションの image プロパティを変更します。Amazon ECR リポジトリ内のイメージを指定するには、完全な registry/repository:tag 命名規則を使用します。例:
aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest他のリポジトリを使用するには、タスク定義の image プロパティを参照してください。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
- 質問済み 2年前