Supported OS Linux Windows Mac OS

インテグレーションバージョン6.0.0

概要

このページでは、ECS Fargate インテグレーションについて説明します。EKS Fargate については、Datadog の EKS Fargate インテグレーションに関するドキュメントをご覧ください。

ECS Fargate で実行されているすべてのコンテナからメトリクスを取得します。

  • CPU/メモリ使用量および制限のメトリクス
  • Datadog インテグレーションまたはカスタムメトリクスを使用して、Fargate で実行されているアプリケーションを監視

Datadog Agent は、ECS のタスクメタデータエンドポイントでタスク定義のコンテナのメトリクスを取得します。このエンドポイントに関する ECS のドキュメントには、以下のように記載されています。

  • このエンドポイントは、タスクに関連付けられたすべてのコンテナの Docker 統計 JSON を返します。返される統計の詳細については、Docker API ドキュメント内の ContainerStats を参照してください。

タスクメタデータエンドポイントは、タスク定義自体の内部からのみ使用できます。このため、Datadog Agent を監視する各タスク定義内の追加コンテナとして実行する必要があります。

このメトリクスの収集を有効にするために必要な構成は、タスク定義内で環境変数 ECS_FARGATE"true" にすることだけです。

: Network Performance Monitoring (NPM) は、ECS Fargate ではサポートされていません。

セットアップ

以下の手順では、AWS ECS Fargate 内で Datadog Container Agent をセットアップします。: Fargate インテグレーションを最大限活用するには、Datadog Agent バージョン 6.1.1 以降が必要です。

Datadog Agent を持たないタスクも Cloudwatch でメトリクスを報告しますが、Autodiscovery、詳細なコンテナメトリクス、トレーシングなどの機能には Agent が必要です。さらに、Cloudwatch メトリクスは粒度が低く、Datadog Agent を通じて直接発送されるメトリクスより報告のレイテンシーが高くなります。

インストール

また、ECS Fargate 上で AWS Batch ジョブを監視することもできます。AWS Batch のインストールを参照してください。

Datadog で ECS Fargate タスクを監視するには、アプリケーションコンテナと同じタスク定義内のコンテナとして Agent を実行します。Datadog でメトリクスを収集するには、各タスク定義にアプリケーションコンテナのほかに Datadog Agent コンテナを含める必要があります。以下のセットアップ手順を実行します。

  1. ECS Fargate タスクの作成
  2. IAM ポリシーの作成と修正
  3. レプリカサービスとしてのタスクの実行

ECS Fargate タスクの作成

Fargate の主要な作業単位はタスクで、これはタスク定義内で設定されます。タスク定義は、Kubernetes のポッドに相当します。タスク定義には 1 つ以上のコンテナが含まれる必要があります。Datadog Agent を実行するには、アプリケーションコンテナおよび Datadog Agent コンテナを実行するためのタスク定義を作成します。

以下の手順は、Amazon Web ConsoleAWS CLI ツール、または AWS CloudFormation を使用したタスクの構成方法を示します。

Web UI タスク定義

  1. AWS Web Console にログインし、ECS セクションに移動します。
  2. 左メニューの Task Definitions をクリックし、Create new Task Definition ボタンをクリックするか、既存の Fargate タスク定義を選択します。
  3. 新しいタスク定義の場合
    1. 起動タイプとして Fargate を選択し、Next step ボタンをクリックします。
    2. Task Definition Name にタスク定義名を入力します (my-app-and-datadog など)。
    3. タスク実行 IAM ロールを選択します。下の IAM ポリシーの作成と修正セクションで、権限の要件を確認します。
    4. ニーズに合わせて Task memoryTask CPU を選択します。
  4. Datadog Agent コンテナの追加を開始するには、Add container ボタンをクリックします。
    1. Container namedatadog-agent と入力します。
    2. Imagepublic.ecr.aws/datadog/agent:latest と入力します。
    3. Env Variables には、Key DD_API_KEY を追加し、値として Datadog API キーを入力します。
    4. キー ECS_FARGATE と値 true を使用して、もう 1 つ環境変数を追加します。Add をクリックしてコンテナを追加します。
    5. Key DD_SITE と値 を使用して、別の環境変数を追加します。設定しない場合、これはデフォルトで datadoghq.com になります。
    6. (Windows のみ) 作業ディレクトリとして C:\ を選択します。
  5. タスク定義に他のアプリケーションコンテナを追加します。インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。
  6. Create をクリックしてタスク定義を作成します。

AWS CLI タスク定義
  1. datadog-agent-ecs-fargate.json をダウンロードします。: Internet Explorer をお使いの場合は、以下に記載の JSON ファイルを含む gzip ファイルとしてダウンロードされる場合があります。

  1. JSON を TASK_NAMEDatadog API キー、および適切な DD_SITE () で更新します。: 環境変数 ECS_FARGATE はすでに "true" に設定されています。

  1. タスク定義に他のアプリケーションコンテナを追加します。インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。

  2. オプション - Agent 健全性チェックを追加します。

    ECS タスク定義に次を追加して、Agent 健全性チェックを作成します。

    "healthCheck": {
      "retries": 3,
      "command": ["CMD-SHELL","agent health"],
      "timeout": 5,
      "interval": 30,
      "startPeriod": 15
    }
    
  3. 次のコマンドを実行して ECS タスク定義を登録します。

aws ecs register-task-definition --cli-input-json file://<ファイルへのパス>/datadog-agent-ecs-fargate.json
AWS CloudFormation タスク定義

AWS CloudFormation テンプレートを使用して Fargate コンテナを構成することができます。CloudFormation テンプレート内で AWS::ECS::TaskDefinition リソースを使用して Amazon ECS タスクを設定し、そのタスクで必要な起動タイプとして FARGATE を指定します。

下記の CloudFormation テンプレートに Datadog API キーを入れて更新します。また、必要に応じて適切な DD_SITE () 環境変数も設定します。設定しない場合、デフォルトは datadoghq.com になります。

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      Cpu: 256
      Memory: 512
      ContainerDefinitions:
        - Name: datadog-agent
          Image: 'public.ecr.aws/datadog/agent:latest'
          Environment:
            - Name: DD_API_KEY
              Value: <DATADOG_API_KEY>
            - Name: ECS_FARGATE
              Value: true

最後に、他のアプリケーションコンテナを ContainerDefinitions 内に含め、CloudFormation を通してデプロイします。

CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation タスク定義のドキュメントをご参照ください。

レプリカサービスとしてのタスクの実行

ECS Fargate では、タスクを Replica サービスとして実行する唯一のオプションがあります。Datadog Agent は、アプリケーションやインテグレーションコンテナと同じタスク定義内で実行されます。

Web UI レプリカサービス
  1. AWS Web Console にログインし、ECS セクションに移動します。必要に応じて、Networking only クラスターテンプレートを使用してクラスターを作成します。
  2. Datadog Agent を実行するクラスターを選択します。
  3. Services タブで、Create ボタンをクリックします。
  4. Launch type で、FARGATE を選択します。
  5. Task Definition で、先ほど作成したタスクを選択します。
  6. Service name に入力します。
  7. Number of tasks1 と入力し、Next step ボタンをクリックします。
  8. Cluster VPCSubnets、および Security Groups を選択します。
  9. Load balancingService discovery をオプションで設定します。
  10. Next step ボタンをクリックします。
  11. Auto Scaling は、オプションで設定します。
  12. Next step ボタンをクリックし、Create service ボタンをクリックします。
AWS CLI レプリカサービス

AWS CLI ツールを使用して次のコマンドを実行します。

: Fargate バージョン 1.1.0 以降が必要です。したがって、以下のコマンドでは、プラットフォームバージョンを指定します。

必要に応じてクラスターを作成します。

aws ecs create-cluster --cluster-name "<クラスター名>"

クラスターのサービスとしてタスクを実行します。

aws ecs run-task --cluster <CLUSTER_NAME> \
--network-configuration "awsvpcConfiguration={subnets=["<PRIVATE_SUBNET>"],securityGroups=["<SECURITY_GROUP>"]}" \
--task-definition arn:aws:ecs:us-east-1:<AWS_ACCOUNT_NUMBER>:task-definition/<TASK_NAME>:1 \
--region <AWS_REGION> --launch-type FARGATE --platform-version 1.4.0
AWS CloudFormation レプリカサービス

CloudFormation テンプレートでは、前の例で作成した ECSTaskDefinition リソースを、作成する AWS::ECS::Service リソースに参照させることができます。この後、レプリカサービスに ClusterDesiredCount など、アプリケーションに必要なパラメーターを指定します。

Resources:
  ECSTaskDefinition:
    #(...)
  ECSService:
    Type: 'AWS::ECS::Service'
    Properties:
      Cluster: <CLUSTER_NAME>
      TaskDefinition:
        Ref: "ECSTaskDefinition"
      DesiredCount: 1
      #(...)

CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation ECS サービスのドキュメントをご参照ください。

Datadog API キーをシークレットとして提供するには、 シークレットの使用を参照してください。

AWS Batch のインストール

AWS Batch ジョブを Datadog で監視するには、ECS Fargate と Datadog Agent を使った AWS Batch を参照してください。

IAM ポリシーの作成と修正

ECS Fargate のメトリクスを収集するには、次のアクセス許可を Datadog IAM ポリシーに追加します。詳細については、AWS ウェブサイト上の ECS ポリシーを参照してください。

AWS アクセス許可説明
ecs:ListClusters使用できるクラスターをリストします。
ecs:ListContainerInstancesクラスターのインスタンスをリストします。
ecs:DescribeContainerInstancesリソースおよび実行中のタスクに関するメトリクスを追加するためのインスタンスを記述します。

シークレットの使用

環境変数 DD_API_KEY に API キーをプレーンテキストで代入する代わりに、AWS Secrets Manager に格納されているプレーンテキストのシークレットの ARN を参照することもできます。タスクまたはジョブ定義ファイルの containerDefinitions.secrets セクションの下に DD_API_KEY 環境変数を配置します。タスクやジョブの実行ロールが AWS Secrets Manager からシークレットを取得するのに必要な権限を持っていることを確認します。

メトリクスの収集

上述のように Datadog Agent をセットアップすると、オートディスカバリーを有効にした状態で ecs_fargate チェックがメトリクスを収集します。その他のメトリクスを収集するには、同じタスク内の他のコンテナに Docker ラベルを追加します。

インテグレーションは Linux と Windows で動作しますが、一部のメトリクスは OS に依存します。Windows で実行したときに公開されるメトリクスは、すべて Linux でも公開されますが、Linux でしか利用できないメトリクスもあります。このインテグレーションで提供されるメトリクスの一覧は、データ収集を参照してください。このリストでは、どのメトリクスが Linux 専用であるかも指定されています。

インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。

DogStatsD

メトリクスは DogStatsD を使用して UDP ポート 8125 を介して収集されます。

その他の環境変数

Docker Agent コンテナと共に使用できる環境変数については、Docker Agent ページを参照してください。: 一部の変数は Fargate では使用できません。

環境変数説明
DD_DOCKER_LABELS_AS_TAGSdocker コンテナラベルを抽出します
DD_CHECKS_TAG_CARDINALITYタグをチェックメトリクスに追加します
DD_DOGSTATSD_TAG_CARDINALITYタグをカスタムメトリクスに追加します

グローバルなタグ付けには、DD_DOCKER_LABELS_AS_TAGS の使用をお勧めします。Agent は、この方法を使用して、コンテナラベルからタグを取得します。それには、他のコンテナに適切なラベルを追加する必要があります。ラベルは、タスク定義で直接追加できます。

Agent コンテナのフォーマット

{
  "name": "DD_DOCKER_LABELS_AS_TAGS",
  "value": "{\"<収集するラベル名>\":\"<DATADOG_用タグキー>\"}"
}

Agent コンテナの例

{
  "name": "DD_DOCKER_LABELS_AS_TAGS",
  "value": "{\"com.docker.compose.service\":\"service_name\"}"
}

CloudFormation 例 (YAML):

      ContainerDefinitions:
        - #(...)
          Environment:
            - Name: DD_DOCKER_LABELS_AS_TAGS
              Value: "{\"com.docker.compose.service\":\"service_name\"}"

: DD_HOSTNAME を使用しないでください。Fargate には、ユーザーに対するホストという概念がないからです。このタグを使用すると、タスクがインフラストラクチャーリストの APM ホストとして表示されるようになり、請求に影響が出る可能性があります。代わりに、従来からホストタグを割り当てるために DD_TAGS が使用されています。Datadog Agent バージョン 6.13.0 では、DD_TAGS 環境変数を使用してインテグレーションメトリクスにグローバルタグを設定することもできます。

クローラーベースのメトリクス

Datadog Agent によって収集されるメトリクスのほかに、Datadog には CloudWatch ベースの ECS インテグレーションがあります。このインテグレーションは、Amazon ECS CloudWatch メトリクスを収集します。

そこに記載されているように、Fargate タスクも次のようにメトリクスを報告します。

使用できるメトリクスは、クラスターまたはバッチジョブ内のタスクとサービスの起動タイプによって異なります。サービスに Fargate 起動タイプを使用している場合は、サービスの監視に役立つように、CPU とメモリの使用率メトリクスが提供されます。

この方法は Datadog Agent を使用しないため、インテグレーションタイルで ECS をチェックすることで、AWS インテグレーションを構成する必要があります。これで、自動的に Datadog が CloudWatch メトリクス (Datadog 内の aws.ecs.* ネームスペースを使用) を取得します。ドキュメントの収集データセクションを参照してください。

必要なメトリクスがこれだけの場合は、このインテグレーションに依存して CloudWatch メトリクスを使用して収集できます。: CloudWatch データは粒度が低く (有効にした監視の種類に応じて 1-5 分)、Datadog への報告にも遅延があります。これは、Agent を使用して Datadog にデータをプッシュするのではなく、AWS の API 制限の範囲内で CloudWatch からデータを収集する必要があるためです。

Datadog のデフォルトの CloudWatch クローラーは、10 分ごとにメトリクスをポーリングします。クローリングスケジュールを速くする必要がある場合は、それが可能かどうかを Datadog のサポートチームにお問い合わせください。: CloudWatch の API 呼び出しは課金対象なので、AWS 側のコストが増大します。

ログ収集

Fargate のログを監視するには、次のどちらかを使用します。

  • Datadog の Fluent Bit 出力プラグインで構築した AWS FireLens インテグレーションで、ログを Datadog に直接送信
  • ログドライバー awslogs を使って CloudWatch Log Group にログを保存し、Lambda 関数で Datadog にログをルーティング

Datadog では、Fargate のタスクで直接 Fluent Bit を構成できるため、AWS FireLens の利用を推奨しています。

: Fluent Bit と FireLens によるログ収集は、AWS Batch on ECS Fargate ではサポートされていません。

Fluent Bit と FireLens

Datadog の Fluent Bit アウトプットプラグインに組み込まれている AWS FireLens インテグレーションを構成して、監視している FireLens のログデータを Datadog ログと接続します。この構成の完全なタスク定義例はこちらにあります。

  1. 既存の Fargate タスクで Fluent Bit FireLens ログルーターコンテナを追加します。 FireLens の有効化については、専用の AWS Firelens ドキュメントを参照してください。Fargate コンテナの定義については、AWS コンテナ定義ドキュメントを参照してください。AWS では、リージョン別 Docker イメージの使用を推奨しています。下記に、Fluent Bit イメージが構成されたタスク定義の例を示します。

    {
      "essential": true,
      "image": "amazon/aws-for-fluent-bit:stable",
      "name": "log_router",
      "firelensConfiguration": {
        "type": "fluentbit",
        "options": { "enable-ecs-log-metadata": "true" }
      }
    }
    

    コンテナがシリアル化された JSON ログを stdout 上で公開している場合は、ログが Datadog 内で正しくパースされるよう、次の 追加 FireLens コンフィギュレーションを使用する必要があります。

    {
      "essential": true,
      "image": "amazon/aws-for-fluent-bit:stable",
      "name": "log_router",
      "firelensConfiguration": {
        "type": "fluentbit",
        "options": {
          "enable-ecs-log-metadata": "true",
          "config-file-type": "file",
          "config-file-value": "/fluent-bit/configs/parse-json.conf"
        }
      }
    }
    

    これにより、シリアル化された JSON が log: フィールドから上位レベルのフィールドに変換されます。詳細については、JSON がシリアル化されたコンテナの stdout ログをパースしている AWS サンプルを参照してください。

  2. 次に、同じ Fargate タスクで、ログを送信する目的のコンテナに対して、ログ構成を定義します。このログ構成は、AWS FireLens をログドライバーとし、Fluent Bit にデータを出力するものである必要があります。下記に、ログドライバーに FireLens が使用され、Fluent Bit にデータを出力しているタスク定義の例を示します。

{
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "datadog",
      "apikey": "<DATADOG_API_KEY>",
      "Host": "http-intake.logs.datadoghq.com",
      "dd_service": "firelens-test",
      "dd_source": "redis",
      "dd_message_key": "log",
      "dd_tags": "project:fluentbit",
      "TLS": "on",
      "provider": "ecs"
    }
  }
}

{
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "datadog",
      "apikey": "<DATADOG_API_KEY>",
      "Host": "http-intake.logs.us3.datadoghq.com",
      "dd_service": "firelens-test",
      "dd_source": "redis",
      "dd_message_key": "log",
      "dd_tags": "project:fluentbit",
      "TLS": "on",
      "provider": "ecs"
    }
  }
}

{
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "datadog",
      "apikey": "<DATADOG_API_KEY>",
      "Host": "http-intake.logs.us5.datadoghq.com",
      "dd_service": "firelens-test",
      "dd_source": "redis",
      "dd_message_key": "log",
      "dd_tags": "project:fluentbit",
      "TLS": "on",
      "provider": "ecs"
    }
  }
}

{
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "datadog",
      "apikey": "<DATADOG_API_KEY>",
      "Host": "http-intake.logs.datadoghq.eu",
      "dd_service": "firelens-test",
      "dd_source": "redis",
      "dd_message_key": "log",
      "dd_tags": "project:fluentbit",
      "TLS": "on",
      "provider": "ecs"
    }
  }
}

{
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "datadog",
      "apikey": "<DATADOG_API_KEY>",
      "Host": "http-intake.logs.ddog-gov.datadoghq.com",
      "dd_service": "firelens-test",
      "dd_source": "redis",
      "dd_message_key": "log",
      "dd_tags": "project:fluentbit",
      "TLS": "on",
      "provider": "ecs"
    }
  }
}

: apikeyHost は、それぞれのサイト http-intake.logs. から相対的に設定します。利用可能なパラメーターの完全なリストは、Datadog Fluent Bit ドキュメントに記載されています。

dd_servicedd_sourcedd_tags は、任意のタグに調整することができます。

  1. Fargate タスクの実行中は常に、Fargate タスクが管理するコンテナの情報を含むコンテナログが、Fluent Bit から Datadog に送信されるようになります。Log Explorer ページで生ログを確認したり、ログ用のモニターを作成Live Container ビューで確認したりすることが可能です。
Web UI

Fluent Bit コンテナを既存のタスク定義に追加するには、Log router integration の下にある Enable FireLens integration チェックボックスをオンにすると、自動的に log_router コンテナが作成されます。これは地域の画像を取り込みますが、latest の代わりに stable の画像タグを使用することをお勧めします。Apply をクリックすると、ベースとなるコンテナが作成されます。さらに firelensConfiguration をカスタマイズするには、下部にある Configure via JSON ボタンをクリックして、手動で編集します。

これを追加した後、タスク定義でログを送信するアプリケーションコンテナを編集し、Log driverawsfirelens に変更し、Log options に上記の例で示されたキーを記入します。

AWS CLI

既存の JSON タスク定義ファイルを編集して、前のセクションで説明したように、log_router コンテナとアプリケーションコンテナの更新した logConfiguration を含めます。これが終わったら、次のコマンドでタスク定義の新しいリビジョンを作成します。

aws ecs register-task-definition --cli-input-json file://<ファイルへのパス>/datadog-agent-ecs-fargate.json
AWS CloudFormation

AWS CloudFormation のテンプレートを使用するには、AWS::ECS::TaskDefinition リソースを使用し、Datadog オプションを設定して、ログ管理を構成する必要があります。

例えば、Fluent Bit が Datadog にログを送信するように構成する場合

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
          - FARGATE
      Cpu: 256
      Memory: 1GB
      ContainerDefinitions:
        - Name: tomcat-test
          Image: 'tomcat:jdk8-adoptopenjdk-openj9'
          LogConfiguration:
            LogDriver: awsfirelens
            Options:
              Name: datadog
              apikey: <DATADOG_API_KEY>
              Host: http-intake.logs.datadoghq.com
              dd_service: test-service
              dd_source: test-source
              TLS: 'on'
              provider: ecs
          MemoryReservation: 500
        - Name: log_router
          Image: 'amazon/aws-for-fluent-bit:stable'
          Essential: true
          FirelensConfiguration:
            Type: fluentbit
            Options:
              enable-ecs-log-metadata: true
          MemoryReservation: 50

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
          - FARGATE
      Cpu: 256
      Memory: 1GB
      ContainerDefinitions:
        - Name: tomcat-test
          Image: 'tomcat:jdk8-adoptopenjdk-openj9'
          LogConfiguration:
            LogDriver: awsfirelens
            Options:
              Name: datadog
              apikey: <DATADOG_API_KEY>
              Host: http-intake.logs.us3.datadoghq.com
              dd_service: test-service
              dd_source: test-source
              TLS: 'on'
              provider: ecs
          MemoryReservation: 500
        - Name: log_router
          Image: 'amazon/aws-for-fluent-bit:stable'
          Essential: true
          FirelensConfiguration:
            Type: fluentbit
            Options:
              enable-ecs-log-metadata: true
          MemoryReservation: 50

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
          - FARGATE
      Cpu: 256
      Memory: 1GB
      ContainerDefinitions:
        - Name: tomcat-test
          Image: 'tomcat:jdk8-adoptopenjdk-openj9'
          LogConfiguration:
            LogDriver: awsfirelens
            Options:
              Name: datadog
              apikey: <DATADOG_API_KEY>
              Host: http-intake.logs.us5.datadoghq.com
              dd_service: test-service
              dd_source: test-source
              TLS: 'on'
              provider: ecs
          MemoryReservation: 500
        - Name: log_router
          Image: 'amazon/aws-for-fluent-bit:stable'
          Essential: true
          FirelensConfiguration:
            Type: fluentbit
            Options:
              enable-ecs-log-metadata: true
          MemoryReservation: 50

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
          - FARGATE
      Cpu: 256
      Memory: 1GB
      ContainerDefinitions:
        - Name: tomcat-test
          Image: 'tomcat:jdk8-adoptopenjdk-openj9'
          LogConfiguration:
            LogDriver: awsfirelens
            Options:
              Name: datadog
              apikey: <DATADOG_API_KEY>
              Host: http-intake.logs.datadoghq.eu
              dd_service: test-service
              dd_source: test-source
              TLS: 'on'
              provider: ecs
          MemoryReservation: 500
        - Name: log_router
          Image: 'amazon/aws-for-fluent-bit:stable'
          Essential: true
          FirelensConfiguration:
            Type: fluentbit
            Options:
              enable-ecs-log-metadata: true
          MemoryReservation: 50

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      NetworkMode: awsvpc
      RequiresCompatibilities:
          - FARGATE
      Cpu: 256
      Memory: 1GB
      ContainerDefinitions:
        - Name: tomcat-test
          Image: 'tomcat:jdk8-adoptopenjdk-openj9'
          LogConfiguration:
            LogDriver: awsfirelens
            Options:
              Name: datadog
              apikey: <DATADOG_API_KEY>
              Host: http-intake.logs.ddog-gov.datadoghq.com
              dd_service: test-service
              dd_source: test-source
              TLS: 'on'
              provider: ecs
          MemoryReservation: 500
        - Name: log_router
          Image: 'amazon/aws-for-fluent-bit:stable'
          Essential: true
          FirelensConfiguration:
            Type: fluentbit
            Options:
              enable-ecs-log-metadata: true
          MemoryReservation: 50

CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation ドキュメントをご参照ください。

: プレーンテキストで apikey を公開しないようにするには、TaskDefinition シークレットを使用します。

AWS ログドライバー

awslogs ログドライバーと Lambda 関数を使用して Fargate ログを監視し、Datadog にルーティングします。

  1. ログを収集したいタスクまたはジョブのアプリケーションコンテナで、ログドライバーを awslogs として定義します。手順は、AWS Fargate デベロッパーガイドを参照してください。

  2. これは、Fargate タスクまたはジョブがログ情報を Amazon CloudWatch Logs に送信するように構成します。次は、awslogs ログドライバーを構成するためのタスク/ジョブ定義のスニペットです。

    {
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/fargate-task|job-definition",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
    

    タスクまたはジョブ定義で awslogs ログドライバーを使用して、コンテナログを CloudWatch Logs に送信する方法については、awslogs ログドライバーを使用するを参照してください。このドライバーは、コンテナが生成したログを収集し、CloudWatch に直接送信します。

  3. 最後に、Datadog Lambda Log Forwarder 関数を使用して CloudWatch からログを収集し、Datadog に送信します。

トレースの収集

  1. 上の手順に従ってタスクまたはジョブ定義に Datadog Agent コンテナを追加し、追加の環境変数 DD_APM_ENABLEDtrue に設定します。DD_SITE 変数を に設定します。設定しない場合、デフォルトで datadoghq.com になります。

  1. セットアップに基づいてアプリケーションをインスツルメントします。

    : Fargate APM のアプリケーションでは、DD_AGENT_HOST設定しないでください。デフォルトの localhost で動作します。

    言語
    Java
    Python
    Ruby
    Go
    Node.js
    PHP
    C++
    .NET Core
    .NET Framework

    Datadog へのトレースの送信の一般的な情報を参照してください。

  2. アプリケーションが Datadog Agent コンテナと同じタスクまたはジョブ定義内で実行されていることを確認します。

プロセスの収集

Datadog で ECS Fargate プロセスを表示できます。ECS Fargate コンテナとの関係を確認するには、Datadog Agent v7.50.0 以降を使用します。

Live Processes ページを使用することで、ECS Fargate のプロセスを Datadog で監視することができます。プロセス収集を有効にするには、タスク定義に PidMode パラメーターを追加し、以下のように task に設定します。

"pidMode": "task"

ECS でプロセスをフィルタリングするには、AWS Fargate コンテナファセットを使用するか、Live Processes ページの検索クエリに fargate:ecs と入力します。

すぐに使えるタグ

Agent は、タグを自動検出して、タスク全体またはこのタスクまたはジョブ内の個別のコンテナにより送信されたすべてのデータに関連付けます。自動的に関連付けられるタグのリストは、Agent のカーディナリティ構成に基づきます。

タグカーディナリティソース
container_nameECS API
container_idECS API
docker_imageECS API
image_nameECS API
short_imageECS API
image_tagECS API
ecs_cluster_nameECS API
ecs_container_nameECS API
task_arnオーケストレーターECS API
task_familyECS API
task_nameECS API
task_versionECS API
availability-zoneECS API
regionECS API

収集データ

メトリクス

ecs.fargate.cpu.limit
(gauge)
Soft limit (CPU Shares) in CPU Units.
ecs.fargate.cpu.percent
(gauge)
Percentage of CPU used per container (Linux only).
Shown as percent
ecs.fargate.cpu.system
(gauge)
System CPU time.
Shown as nanocore
ecs.fargate.cpu.task.limit
(gauge)
Task CPU Limit (shared by all containers).
Shown as nanocore
ecs.fargate.cpu.usage
(gauge)
Total CPU Usage.
Shown as nanocore
ecs.fargate.cpu.user
(gauge)
User CPU time.
Shown as nanocore
ecs.fargate.ephemeral_storage.reserved
(gauge)
The reserved ephemeral storage of this task. (Fargate 1.4.0+ required).
Shown as mebibyte
ecs.fargate.ephemeral_storage.utilized
(gauge)
The current ephemeral storage usage of this task. (Fargate 1.4.0+ required).
Shown as mebibyte
ecs.fargate.io.bytes.read
(gauge)
Number of bytes read on the disk.
Shown as byte
ecs.fargate.io.bytes.write
(gauge)
Number of bytes written to the disk.
Shown as byte
ecs.fargate.io.ops.read
(gauge)
Number of read operation on the disk.
ecs.fargate.io.ops.write
(gauge)
Number of write operations to the disk.
ecs.fargate.mem.active_anon
(gauge)
Number of bytes of anonymous and swap cache memory on active LRU list (Linux only).
Shown as byte
ecs.fargate.mem.active_file
(gauge)
Number of bytes of file-backed memory on active LRU list (Linux only).
Shown as byte
ecs.fargate.mem.cache
(gauge)
Number of bytes of page cache memory (Linux only).
Shown as byte
ecs.fargate.mem.hierarchical_memory_limit
(gauge)
Number of bytes of memory limit with regard to hierarchy under which the memory cgroup is (Linux only).
Shown as byte
ecs.fargate.mem.hierarchical_memsw_limit
(gauge)
Number of bytes of memory+swap limit with regard to hierarchy under which memory cgroup is (Linux only).
Shown as byte
ecs.fargate.mem.inactive_file
(gauge)
Number of bytes of file-backed memory on inactive LRU list (Linux only).
Shown as byte
ecs.fargate.mem.limit
(gauge)
Number of bytes memory limit (Linux only).
Shown as byte
ecs.fargate.mem.mapped_file
(gauge)
Number of bytes of mapped file (includes tmpfs/shmem) (Linux only).
Shown as byte
ecs.fargate.mem.max_usage
(gauge)
Show max memory usage recorded.
Shown as byte
ecs.fargate.mem.pgfault
(gauge)
Number of page faults per second (Linux only).
ecs.fargate.mem.pgmajfault
(gauge)
Number of major page faults per second (Linux only).
ecs.fargate.mem.pgpgin
(gauge)
Number of charging events to the memory cgroup. The charging event happens each time a page is accounted as either mapped anon page(RSS) or cache page(Page Cache) to the cgroup (Linux only).
ecs.fargate.mem.pgpgout
(gauge)
Number of uncharging events to the memory cgroup. The uncharging event happens each time a page is unaccounted from the cgroup (Linux only).
ecs.fargate.mem.rss
(gauge)
Number of bytes of anonymous and swap cache memory (includes transparent hugepages) (Linux only).
Shown as byte
ecs.fargate.mem.task.limit
(gauge)
Task Memory Limit (shared by all containers).
Shown as byte
ecs.fargate.mem.usage
(gauge)
Number of bytes of memory used.
Shown as byte
ecs.fargate.net.bytes_rcvd
(gauge)
Number of bytes received (Fargate 1.4.0+ required).
Shown as byte
ecs.fargate.net.bytes_sent
(gauge)
Number of bytes sent (Fargate 1.4.0+ required).
Shown as byte
ecs.fargate.net.packet.in_dropped
(gauge)
Number of ingoing packets dropped (Fargate 1.4.0+ required).
Shown as packet
ecs.fargate.net.packet.out_dropped
(gauge)
Number of outgoing packets dropped (Fargate 1.4.0+ required).
Shown as packet
ecs.fargate.net.rcvd_errors
(gauge)
Number of received errors (Fargate 1.4.0+ required).
Shown as error
ecs.fargate.net.sent_errors
(gauge)
Number of sent errors (Fargate 1.4.0+ required).
Shown as error

イベント

ECS Fargate チェックには、イベントは含まれません。

サービスチェック

fargate_check
Returns CRITICAL if the Agent is unable to connect to Fargate, otherwise returns OK.
Statuses: ok, critical

トラブルシューティング

ご不明な点は、Datadog のサポートチームまでお問合せください。

その他の参考資料