Amazon ECS
Incident Management が一般に使用できるようになりました。 Incident Management が広範に使用できるようになりました。

Amazon ECS

概要

Amazon ECS on EC2 は、EC2 インスタンスで実行される Docker コンテナ用の拡張性とパフォーマンスに優れたコンテナ管理サービスです。

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

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

セットアップ

ECS コンテナおよびタスクを Datadog でモニタリングするには、ECS クラスターの各 EC2 インスタンスでエージェントをコンテナとして実行します。以下にセットアップ方法を説明します。

  1. ECS タスクを追加
  2. IAM ポリシーの作成と修正
  3. Datadog エージェントをDaeson サービスとしてスケジュール

稼働中の EC2 Container Service クラスターが構成されていない場合は、ECS ドキュメント内の Getting Started セクションを参照してください。

メトリクスの収集

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 健全性チェックを追加します。
  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>
Agent 健全性チェック

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

"healthCheck": {
  "retries": 3,
  "command": ["CMD-SHELL","agent health"],
  "timeout": 5,
  "interval": 30,
  "startPeriod": 15
}
  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 と入力します。
  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 をデーモンサービスとして実行

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

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

実行中のサービスを動的に検出しモニタリング

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

AWSVPC モード

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

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

プロセスの収集

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

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

トラブルシューティング

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

その他の参考資料