概要

Amazon ECS は、Docker コンテナに対応する、拡張性とパフォーマンスに優れたコンテナオーケストレーションサービスです。Datadog Agent を使用すると、クラスター内のすべての EC2 インスタンスの ECS コンテナおよびタスクを監視できます。

Fargate 上の ECS を監視したい場合は、AWS Fargate 上の Amazon ECSを参照してください。

セットアップ

ECS コンテナおよびタスクを監視するには、ECS クラスター内の各 EC2 インスタンスに一度、Datadog Agent をコンテナとしてデプロイします。これは、Datadog Agent コンテナ用のタスク定義を作成し、それをデーモンサービスとしてデプロイすることで実現します。各 Datadog Agent コンテナは、それぞれの EC2 インスタンス上の他のコンテナを監視します。

以下の説明は、EC2クラスターが構成済みであることを前提としています。クラスター作成に関する Amazon ECS のドキュメントを参照してください。

  1. ECS タスク定義の作成と追加
  2. Datadog Agent をデーモンサービスとしてスケジュール
  3. (オプション) Datadog Agent のその他の機能の設定

注: ECS および Docker を併用して Datadog のオートディスカバリーを実行すると、環境内で実行中のタスクを自動的に検出して監視できます。

ECS タスク定義の作成

この ECS タスク定義は、必要な構成で Datadog Agent コンテナを起動します。Agent の構成を変更する必要がある場合、このタスク定義を更新し、デーモンサービスを再デプロイします。このタスク定義は、AWS Management Console または AWS CLI を使用して構成することができます。

以下のサンプルは、コアインフラストラクチャーを監視するための最小限の構成です。しかし、様々な機能を有効にした追加のタスク定義のサンプルが Agent の追加機能の設定のセクションで提供されていますので、それらを代わりに使用することができます。

タスク定義ファイルの作成と管理

  1. Linux コンテナの場合、datadog-Agent-ecs.json をダウンロードします。

    These files provide minimal configuration for core infrastructure monitoring. For more sample task definition files with various features enabled, see the Set up additional Agent features section on this page.
  2. ベースとなるタスク定義ファイルを編集します。

  3. (オプション) ECS Anywhere クラスターにデプロイするには、ECS タスク定義に以下の行を追加します。

    "requiresCompatibilities": ["EXTERNAL"]
    
  4. (オプション) Agent ヘルスチェックを追加するには、ECS タスク定義に以下の行を追加します。

    "healthCheck": {
      "retries": 3,
      "command": ["CMD-SHELL","agent health"],
      "timeout": 5,
      "interval": 30,
      "startPeriod": 15
    }
    

タスク定義の登録

タスク定義ファイルを作成したら、以下のコマンドを実行して、ファイルを AWS に登録します。

aws ecs register-task-definition --cli-input-json file://<path to datadog-agent-ecs.json>

タスク定義ファイルを作成したら、AWS コンソールを使用してファイルを登録します。

  1. AWS コンソールにログインし、Elastic コンテナサービス セクションに移動します。
  2. ナビゲーションペインで Task Definitions を選択します。Create new task definition メニューで、Create new task definition with JSO を選択します。
  3. JSON エディターボックスに、タスク定義ファイルの内容を貼り付けます。
  4. Create を選択します。

Agent を Daemon サービスとして実行

各 EC2 インスタンスで 1 つの Datadog Agent コンテナを実行させるには、Datadog Agent タスク定義をデーモンサービスとして実行します。

Datadog の ECS タスクを使用して、AWS でDaemon サービスをスケジューリング

  1. AWS コンソールにログインし、ECS セクションに移動します。Clusters ページで Agent を実行するクラスターを選択します。
  2. クラスターの Services タブ で、Create を選択します。
  3. Deployment configurationService typeDaemon を選択します。
  4. 負荷分散やオートスケーリングの構成は不要です。
  5. ““Next Step**、Create Service の順にクリックします。

Agent のその他の機能の設定

上記セクションのタスク定義ファイルは最小限のものです。これらのファイルは、ECS クラスター内のコンテナに関するコアメトリクスを収集するための基本構成を持つ Agent コンテナをデプロイします。この Agent は、コンテナ上で発見された Docker ラベルに基づいて、Agent インテグレーションを実行することも可能です。

その他の機能について

APM

APM セットアップドキュメントとサンプル datadog-agent-ecs-apm.json を参照してください。

Log Management

ログ収集ドキュメントとサンプル datadog-agent-ecs-logs.json を参照してください。

DogStatsD

DogStatsD を使用している場合は、Datadog Agent のコンテナ定義を編集して、8125/udp 用のホストポートマッピングを追加し、環境変数 DD_DOGSTATSD_NON_LOCAL_TRAFFICtrue に設定します。

{
 "containerDefinitions": [
  {
   "name": "datadog-agent",
   (...)
   "portMappings": [
     {
      "hostPort": 8125,
      "protocol": "udp",
      "containerPort": 8125
     }
   ],
   "environment" : [
     {
       "name": "DD_API_KEY",
       "value": "<YOUR_DATADOG_API_KEY>"
     },
     {
       "name": "DD_SITE",
       "value": "datadoghq.com"
     },
     {
       "name": "DD_DOGSTATSD_NON_LOCAL_TRAFFIC",
       "value": "true"
     }
   ]
  }
 ],
 (...)
}

この設定により、DogStatsD のトラフィックは、アプリケーションコンテナからホストとホストポートを経由して、Datadog Agent コンテナにルーティングされるようになります。ただし、アプリケーションコンテナは、このトラフィックにホストのプライベート IP アドレスを使用する必要があります。これは、環境変数 DD_AGENT_HOST に EC2 インスタンスのプライベート IP アドレスを設定することで有効になり、アドレスはインスタンスメタデータサービス (IMDS) から取得することができます。また、初期化時にコードで設定することもできます。DogStatsD の実装は APM と同じで、Agent のエンドポイントの設定例については Trace Agent のエンドポイントを構成するを参照してください。

EC2 インスタンスのセキュリティグループ設定で、APM と DogStatsD のポートが公に公開されていないことを確認します。

プロセスの収集

すべてのコンテナのライブプロセス情報を収集し、Datadog に送信するには、DD_PROCESS_AGENT_ENABLED 環境変数を使用してタスク定義を更新します。

{
 "containerDefinitions": [
  {
   "name": "datadog-agent",
   (...)
   "environment" : [
     {
       "name": "DD_API_KEY",
       "value": "<YOUR_DATADOG_API_KEY>"
     },
     {
       "name": "DD_SITE",
       "value": "datadoghq.com"
     },
     {
       "name": "DD_PROCESS_AGENT_ENABLED",
       "value": "true"
     }
   ]
  }
 ],
 (...)
}

ネットワークパフォーマンス監視

この機能は Linux でのみ利用可能です。

サンプルの Datadog-Agent-sysprobe-ecs.json ファイルを参照してください。

Amazon Linux 1 (AL1、旧 Amazon Linux AMI) 使用している場合は、datadog-agent-sysprobe-ecs1.json を参照してください。

すでにタスク定義がある場合は、次の構成を追加してファイルを更新します。

{
  "containerDefinitions": [
    (...)
      "mountPoints": [
        (...)
        {
          "containerPath": "/sys/kernel/debug",
          "sourceVolume": "debug"
        },
        (...)
      ],
      "environment": [
        (...)
        {
          "name": "DD_SYSTEM_PROBE_NETWORK_ENABLED",
          "value": "true"
        }
      ],
      "linuxParameters": {
       "capabilities": {
         "add": [
           "SYS_ADMIN",
           "SYS_RESOURCE",
           "SYS_PTRACE",
           "NET_ADMIN",
           "NET_BROADCAST",
           "NET_RAW",
           "IPC_LOCK",
           "CHOWN"
         ]
       }
     },
  ],
  "requiresCompatibilities": [
   "EC2"
  ],
  "volumes": [
    (...)
    {
     "host": {
       "sourcePath": "/sys/kernel/debug"
     },
     "name": "debug"
    },
    (...)
  ],
  "family": "datadog-agent-task"
}

AWSVPC モード

Agent バージョン 6.10 以降は、ホストインスタンスのセキュリティグループが関連するポート上の適用可能なコンテナに到達できるよう、セキュリティグループが設定されている場合には、適用可能なコンテナに awsvpc モードが対応しています。

Agent を awsvpc モードで実行することは可能ですが、Datadog はこれを推奨していません。Agent に到達して DogStatsD メトリクスや APM トレースを取得するための ENI IP を取得することが難しい可能性があるからです。代わりに、Agent をブリッジモードでポートマッピングとともに実行すると、 メタデータサーバを介してホスト IP をより簡単に取得できます。

行政機関の環境向けの Datadog 用 FIPSプロキシ

この機能は Linux でのみ利用可能です。

行政機関のサイトで Datadog にデータを送信するには、fips-proxy サイドカーコンテナを追加し、コンテナ ポートを開いて、サポートされている機能が適切に通信を行えるようにします。

 {
   "containerDefinitions": [
     (...)
          {
            "name": "fips-proxy",
            "image": "datadog/fips-proxy:1.1.4",
            "portMappings": [
                {
                    "containerPort": 9803,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9804,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9805,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9806,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9807,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9808,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9809,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9810,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9811,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9812,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9813,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9814,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9815,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9816,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9817,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9818,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "DD_FIPS_PORT_RANGE_START",
                    "value": "9803"
                },
                {
                    "name": "DD_FIPS_LOCAL_ADDRESS",
                    "value": "127.0.0.1"
                }
            ]
        }
   ],
   "family": "datadog-agent-task"
}

また、Datadog Agent のコンテナの環境変数を更新して、FIPS プロキシを介したトラフィックの送信を可能にする必要があります。

{
    "containerDefinitions": [
        {
            "name": "datadog-agent",
            "image": "public.ecr.aws/datadog/agent:latest",
            (...)
            "environment": [
              (...)
                {
                    "name": "DD_FIPS_ENABLED",
                    "value": "true"
                },
                {
                    "name": "DD_FIPS_PORT_RANGE_START",
                    "value": "9803"
                },
                {
                    "name": "DD_FIPS_HTTPS",
                    "value": "false"
                },
             ],
        },
    ],
   "family": "datadog-agent-task"
}

トラブルシューティング

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

参考資料