Amazon ECS

Amazon ECS

概要

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

このページは Datadog コンテナ Agent v6 を使用した Amazon ECS のセットアップについて説明します。他のセットアップについては、以下を参照してください。

: Fargate で ECS を設定する場合は、代わりにこのドキュメントに従ってください。

セットアップ

セットアップを開始するには、ECS クラスター内のすべての EC2 インスタンスで Datadog Agent を実行します。稼働中の EC2 Container Service クラスターが構成されていない場合は、ECS ドキュメント内の Getting Started セクションを参照してクラスターを設定、構成します。構成したら、下記のセットアップ手順に従います。

  1. ECS タスクの作成と追加
  2. IAM ポリシーの作成と修正
  3. Datadog エージェントをDaeson サービスとしてスケジュール
  4. オプション: プロセスの収集を設定
  5. オプション: ネットワークパフォーマンスモニタリングの収集を設定

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

ECS タスクの作成

このタスクにより Datadog コンテナが起動します。コンフィギュレーションを変更するには、このタスクの定義を更新します(方法はこのガイドで後述)。

APMDogStatsD、またはログ管理を使用している場合は、タスク定義で適当なフラグを設定します。

  • APM を使用している場合は、ダウンストリーム コンテナがトレースを Agent サービスに渡せるように portMappings を設定します。APM はポート 8126TCP を使用してトレースを受け取るため、これをタスクの定義で hostPort として設定します。

: 他のコンテナからのトレース収集を有効にするには、DD_APM_NON_LOCAL_TRAFFIC 環境変数を true に設定する必要があります。APM とコンテナの詳細はこちらをご確認ください。

  • DogStatsD を使用している場合、タスクの定義でポート 8125hostPortUDP と設定します。

: 他のコンテナからの DogStatsD メトリクス収集を有効にするには、DD_DOGSTATSD_NON_LOCAL_TRAFFIC 環境変数を true に設定する必要があります。

  • ログ管理を使用している場合は、このトピックのログの収集セクションを参照してください。

EC2 インスタンスでセキュリティグループ設定を再度チェックします。これらのポートが非公開であること確認してください。Datadog では、プライベート IP アドレスを使用してトレースをコンテナからエージェントへ渡します。

タスクの構成は AWS CLI ツールや Amazon Web コンソールでも行えます。

  1. Linux コンテナで datadog-agent-ecs.json (オリジナルの Amazon Linux 1 AMI を使用している場合は datadog-agent-ecs1.json) をダウンロードします。Windows の場合は datadog-agent-ecs-win.json をダウンロードします。

  2. datadog-agent-ecs.json を編集し、アカウントの Datadog API キーを使用して <YOUR_DATADOG_API_KEY> を設定します。

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

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

    "healthCheck": {
      "retries": 3,
      "command": ["CMD-SHELL","agent health"],
      "timeout": 5,
      "interval": 30,
      "startPeriod": 15
    }
    
  4. オプション - Datadog EU サイトをご利用の場合は、datadog-agent-ecs.json を編集して DD_SITEDD_SITE:datadoghq.eu に設定します。

  5. オプション - ログの収集を有効にするには、ログの収集を参照してください。

  6. オプション - プロセスの収集を有効にするには、プロセスの収集を参照してください。

  7. オプション - トレースの収集を有効にするには、トレースの収集 (APM) を参照してください。

  8. オプション - ネットワークの収集を有効にするには、ネットワークパフォーマンスモニタリング (NPM) を参照してください

  9. 次のコマンドを実行します。

aws ecs register-task-definition --cli-input-json <path to datadog-agent-ecs.json>
  1. AWS コンソールにログインし、EC2 コンテナサービス セクションに移動します。
  2. Datadog を追加するクラスターをクリックします。
  3. 左側の Task Definitions をクリックし、Create new Task Definition ボタンをクリックします。
  4. Task Definition Name に入力します(例: datadog-agent-task)。
  5. Add volume リンクをクリックします。
  6. Namedocker_sock と入力します。Source Path に、Linux の場合は /var/run/docker.sock、Windows の場合は \\.\pipe\docker_engine と入力し、Add をクリックします。
  7. Linux に限り、ボリュームをもう 1 つ追加して、名前を proc、ソースパスを /proc/ に設定します。
  8. Linux の場合のみ、ボリュームをもう 1 つ追加して、名前を cgroup、ソースパスを /sys/fs/cgroup/ (オリジナルの Amazon Linux 1 AMI を使用している場合は /cgroup/) に設定します。
  9. Add container ボタンをクリックします。
  10. Container namedatadog-agent と入力します。
  11. Imagegcr.io/datadoghq/agent:latest と入力します。
  12. Maximum memory256 と入力します。: 多くのリソースを使用する場合は、メモリの上限を上げる必要があります。
  13. Advanced container configuration セクションまでスクロールし、CPU units10 と入力します。 : Windows の場合は、Timeout while starting the service のエラーが発生しないよう CPU units512 以上を入力します。
  14. Env Variables に、Key DD_API_KEY を追加し、値に Datadog API キーを入力します。こうした守秘性の高い情報を S3 に保管したい場合は、ECS の構成ガイドを参照してください。*
  15. DD_TAGS キーを使用して、追加するタグに別の環境変数を追加します。
  16. Storage and Logging セクションまで下へスクロールします。
  17. Mount pointsdocker_sock ソースボリュームを選択し、コンテナのパスに Linux の場合は /var/run/docker.sock、Windows の場合は \\.\pipe\docker_engine と入力します。Read only のチェックボックスをオンにします。
  18. Linux に限り、proc 用に別のマウントポイントを追加し、コンテナのパスに /host/proc/ と入力します。Read only チェックボックスをオンにします。
  19. Linux の場合のみ、3 つ目のマウント ポイントを追加して cgroup を選択し、コンテナのパスに /host/sys/fs/cgroup と入力します。Read only チェックボックスをオンにします。

: Datadog タスク定義で CPU を 10 台使用するように設定すると、service:datadog-agentaws.ecs.cpuutilization が 1000% と表示されることがあります。これは AWS が CPU 使用率を表示する際の独特な現象です。CPU の台数を増やすことで、グラフの歪曲を回避できます。

IAM ポリシーの作成と修正

Amazon ECS のメトリクスを収集するために、次のアクセス許可を Datadog IAM ポリシーに追加します。ECS ポリシーの詳細については、AWS Web サイトのガイドを参照してください。

AWS アクセス許可説明
ecs:ListClusters既存のクラスターのリストを返します。
ecs:ListContainerInstances指定されたクラスター内のコンテナインスタンスのリストを返します。
ecs:ListServices指定したクラスターで実行されているサービスを一覧表示します。
ecs:DescribeContainerInstancesAmazon ECS コンテナインスタンスについて説明します。

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

Datadog Agent は、各 EC2 インスタンス上の 1 つのコンテナーで実行するのが理想的です。最も簡単なのは、Datadog Agent をデーモン サービスとして実行する方法です。

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

  1. AWS コンソールにログインし、ECS クラスターページに移動します。Agent を実行するクラスターをクリックします。
  2. 新しいサービスを作成するには、「サービス」で Create ボタンをクリックします。
  3. 起動タイプに EC2 を選択し、先に作成したタスク定義を選択します。
  4. サービスタイプに DAEMON を選択し、サービス名を入力したら Next をクリックします。
  5. サービスは各インスタンスで 1 度しか実行されないため、ロードバランサーは不要です。選択せずに Next をクリックします。
  6. デーモンサービスはオートスケーリングを必要としないので、Next Step の後に Create Service をクリックします。

プロセスの収集

以下の方法で、コンテナの処理情報を収集し Datadog に送信します。

  1. 前述の手順に従い Datadog Agent をインストールします。
  2. 次の構成で datadog-agent-ecs.json ファイル (オリジナルの Amazon Linux AMI を使用している場合は datadog-agent-ecs1.json) を更新します。
{
  "containerDefinitions": [
   {
      (...)
      "mountPoints": [
        {
          (...)
        },
        {
          "containerPath": "/var/run/docker.sock",
          "sourceVolume": "docker_sock",
          "readOnly": true
        },
        {
        (...)
        }
      ],
      "environment": [
        (...)
        {
          "name": "DD_API_KEY",
          "value": "<YOUR_DATADOG_API_KEY>"
        }
      ]
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": "/var/run/docker.sock"
      },
      "name": "docker_sock"
    },
    (...)
  ],
  "family": "datadog-agent-task"
}
  1. 前述の手順に従い Datadog Agent をインストールします。
  2. 次の構成を使用して datadog-agent-ecs-win.json ファイルを更新します。
{
  "containerDefinitions": [
    (...)
      "environment": [
        (...)
        {
          "name": "DD_PROCESS_AGENT_ENABLED",
          "value": "true"
        }
      ]
    }
  ],
  "family": "datadog-agent-task"
}

ネットワークパフォーマンスのモニタリングの収集

この機能は、Linux でのみ使用可能です

  1. 前述の手順に従い Datadog Agent をインストールします。
  • 初めてインストールする場合は datadog-agent-ecs.json ファイル、datadog-agent-sysprobe-ecs.json (オリジナルの Amazon Linux AMI を使用している場合は datadog-agent-sysprobe-ecs1.json) を使用できます。使用方法については、上記の手順に従ってください。AWS UI では linuxParameters を追加できないため、初回の NPM セットアップでは CLI が必要です。
  1. タスク定義がすでに存在する場合は、次のコンフィギュレーションで datadog-agent-ecs.json ファイル (オリジナルの Amazon Linux AMI を使用している場合は datadog-agent-ecs1.json) を更新します。
{
  "containerDefinitions": [
    (...)
      "mountPoints": [
        (...)
        {
          "containerPath": "/sys/kernel/debug",
          "sourceVolume": "debug"
        },
        (...)
      ],
      "environment": [
        (...)
        {
          "name": "DD_SYSTEM_PROBE_ENABLED",
          "value": "true"
        }
      ],
      "linuxParameters": {
       "capabilities": {
         "add": [
           "SYS_ADMIN",
           "SYS_RESOURCE",
           "SYS_PTRACE",
           "NET_ADMIN"
         ]
       }
     },
  ],
  "requiresCompatibilities": [
   "EC2"
  ],
  "volumes": [
    (...)
    {
     "host": {
       "sourcePath": "/sys/kernel/debug"
     },
     "name": "debug"
    },
    (...)
  ],
  "family": "datadog-agent-task"
}

AWSVPC モード

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

Agent を awsvpc モードで実行することは可能ですが、これは推奨されるセットアップではありません。Agent を DogStatsD メトリクスや APM トレースに到達させるための ENI IP を取得することが難しい可能性があるからです。

代わりに、ブリッジモードで Agent をポートマッピングとともに実行すると、メタデータサーバを介するホスト IP を簡単に取得できます。

トラブルシューティング

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

その他の参考資料