AWS Fargate 上の Amazon ECS の複数の宛先にコンテナログを送信するにはどうすればよいですか?

最終更新日: 2020 年 8 月 27 日

AWS Fargateで実行されるアプリケーションのコンテナログを複数の宛先に転送することを考えています。このような宛先は、Amazon CloudWatch、Amazon Kinesis Data Firehose、または Splunk です。

簡単な説明

Amazon Elastic Container Service (Amazon ECS) タスク定義では、特定のコンテナに対して 1 つのログ設定オブジェクトのみを指定できます。つまり、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 イメージを作成する必要があります。

解決方法

AWS Identity and Access Management (IAM) のアクセス許可を作成

タスクロールがログを別の宛先にルーティングできるようにする IAM アクセス許可を作成します。たとえば、宛先が Kinesis Data Firehose の場合、firehose:PutRecordBatch API を呼び出すためのアクセス許可をタスクに付与する必要があります。

注: Fluent Bitは、ログの宛先としていくつかのプラグインをサポートしています。CloudWatchKinesis ストリームなどの宛先で必要なアクセス許可には、logs:CreateLogGrouplogs:CreateLogStreamlogs:DescribeLogStreamslogs:PutLogEventskinesis:PutRecords などがあります。

カスタム出力設定ファイルを使用して Fluent Bit Docker イメージを作成します。

1.    LogDestinations.conf というカスタム Fluent Bit 設定ファイルを作成し、その中に希望の [OUTPUT] 定義を作成します。たとえば、次の設定ファイルには、CloudWatch、Kinesis 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] 定義で異なるフィールドを指定する必要があります。例については、「Amazon ECS FireLens の例」を参照してください。

2.    次の Dockerfile の例を使用して、カスタムの Fluent Bit 出力設定ファイルで Docker イメージを作成します。

FROM amazon/aws-for-fluent-bit:latest
ADD logDestinations.conf /logDestinations.conf

注: 詳細については、Docker ウェブサイトの Dockerfile リファレンスを参照してください。

3.    手順 2 で作成した Dockerfile を使用してカスタム Fluent-bit Docker イメージを作成するには、次のコマンドを実行します。

docker build -t custom-fluent-bit:latest .

重要: Dockerfileと同じ場所で docker build コマンドを実行してください。

4.    Docker イメージが Amazon ECS で使用可能であることを確認するには、Docker イメージを Amazon Elastic Container Registry (Amazon ECR) または独自の Docker レジストリにプッシュします。たとえば、ローカルの Docker イメージを Amazon ECR にプッシュするには、次のコマンドを実行します。

docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest

5.    タスク定義 (TaskDefinition) で、FireLens 設定 (firelensConfiguration) のオプション を更新します。以下はその例です。

{
   "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 設定のオプションを更新するときは、次の点を考慮してください。

カスタム設定ファイルを指定するには、FireLens 設定ファイルに config-file-type オプションと config-file-value オプションを含める必要があります。これらのオプションは、AWS コマンドラインインターフェイス (AWS CLI) でタスク定義を作成する場合にのみ設定できます。

設定の ContainerDefinition セクションにある image プロパティを変更して、有効な Amazon ECR イメージの場所を反映する必要があります。完全な registry/repository:tag 命名規則を使用して、Amazon ECR リポジトリ内のイメージを指定できます。以下はその例です。

aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest

他のリポジトリを使用するには、タスク定義の image プロパティを参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?