コンテンツにスキップ

ECS Fargate上のコンテナのメトリクスをDatadogへ送信する

概要

Amazon Elastic Container Service(以下ECS)のFargate起動タイプで起動したコンテナは、ホストがマネージドになります。 このため、コンテナのホストにSSHで接続して直接メトリクスを収集するといったことができません。

このページでは、ECSのFargate起動タイプで起動しているコンテナのメトリクスをDatadogへ送信する方法について説明します。 なお、ここでのメトリクスは、CPU使用率やメモリ使用量などのシステムメトリクスを指しています。

このページの内容と、patternとの関連

このページで説明する手順は、AWS CodePipeline (以下CodePipeline)が読み込むタスク定義を修正する内容となっています。 このCodePipelineは、cd_pipeline_backend patternで構築されている前提となります。

また、本手順ではECS上で実行するコンテナを追加します。 このため、当該コンテナが利用するAmazon CloudWatch (以下CloudWatch)のロググループを追加する必要があります。 コンテナ用のロググループは、public_traffic_container_service patternで構築されている前提となります。

事前準備

以下の準備ができていることを前提とします。

  • Datadogユーザー登録が済んでいること

Fargate上のコンテナのメトリクスをDatadogに送信する方法について

Fargate起動タイプで動かしているコンテナのメトリクスを収集するため、DatadogはDatadog Agentのコンテナイメージを提供しています。 このコンテナイメージは、同じタスク内で動いている全てのコンテナのメトリクスを収集します。 そして、集めたメトリクスをDatadogに送信する機能を持っています。

Datadog Agentの仕組み

このページでは、CodePipelineが読み取るタスク定義にDatadog Agentのコンテナを追加する手順について説明しています。

Datadog Agentの仕組みの詳細については、Datadogのドキュメントを参照してください。 また、具体的にどのようなメトリクスが送信されるかについては、Datadogのドキュメントの収集データを参照してください。

Datadog API キーの設定

Datadog Agentを使ってメトリクスを送信するためには、DatadogでAPIキーを作成してDatadog Agentのコンテナに設定する必要があります。

Datadog AgentコンテナにDatadog APIキーを設定するには、環境変数を使用します。 ただし、Datadog APIキーは秘匿情報なので、環境変数としては設定しません。 代わりに、parameter_store patternを使い、 AWS Systems Managerのパラメータストアに保存して使用します。

ここでは、Datadog APIキーを作成する方法と、parameter_store patternの設定にDatadog APIキーを追加する方法について説明します。

Datadog API キーの作成

Datadog APIキーの作成は、Datadogの画面から行います。

詳しくは、DatadogのドキュメントのAPI キーとアプリケーションキーおよび、キーの追加を参照してください。

parameter_store pattern に Datadog API キーを追加する

まず、Datadog APIキーを入力変数ファイルで渡せるようにするため、下記のように変数の定義を追加します。

variable "datadog_api_key" {
  type = string
}

次に、Datadog APIキーの設定をparametersに追加します。

  parameters = [
    ...
    {
      name   = "/App/Config/datadog_api_key"
      value  = var.datadog_api_key
      type   = "SecureString"
      key_id = data.terraform_remote_state.staging_encryption_key.outputs.encryption_key.keys["alias/my-encryption-key"].key_alias_name
    }
  ]

そして、以下のようにDatadog APIキーを入力変数ファイルに追加します。

...
datadog_api_key = "[作成したDatadog APIキー]"

最後にparameter_store patternを適用すれば、パラメータストアにDatadog APIキーが追加されます。

Datadog Agentコンテナ用のロググループを追加する

Datadog Agentコンテナが出力するログをCloudWatchに出力するため、ロググループを追加します。 コンテナ用のロググループの作成はpublic_traffic_container_service patternで行うため、この設定を修正します。

詳しくは、public_traffic_container_service patternを参照してください。

なお、CloudWatchへのログ出力は、AWS FireLensを使用することをおすすめします。 詳しくは、Amazon ECS上のコンテナログを、AWS FireLensを使ってAmazon CloudWatch Logsに送信するを参照してください。

Datadog Agentのコンテナをタスクに追加する

ここでは、CodePipelineが読み込むタスク定義にDatadog Agentのコンテナを追加する方法について説明します。

Datadog Agentのコンテナは、下記のようにtaskdef.jsoncontainerDefinitionsに追加して設定します。

ℹ️ logConfigurationは、AWS FireLensを使う場合の設定となっています。

{
  "ipcMode": null,
  "taskRoleArn": "...",
  "executionRoleArn": "...",
  "containerDefinitions": [
    {
      # アプリケーションのコンテナ定義
    },
    {
      "name": "datadog-agent",
      "image": "datadog/agent:latest",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awsfirelens",
        "options": {
          "Name": "cloudwatch",
          "region": "ap-northeast-1",
          "log_group_name": "...",
          "auto_create_group": "false",
          "log_stream_prefix": "..."
        }
      },
      "memoryReservation": 256,
      "cpu": 10,
      "environment": [
        {
          "name": "ECS_FARGATE",
          "value": "true"
        }
      ],
      "secrets": [
        {
          "name": "DD_API_KEY",
          "valueFrom": "/App/Config/datadog_api_key"
        }
      ]
    }
  ],
  ...
}

image には、datadog/agentを使用します。

memoryReservationcpu に設定している値は、Datadogのドキュメントで下記のように指定されている値を設定しています。

10.Memory Limits に、ソフト制限として 256 を入力します。
11.Advanced container configuration セクションまでスクロールし、CPU units に 10 と入力します。

environmentでは、環境変数ECS_FARGATEを定義し値にtrueを設定しています。 この設定により、Datadog Agentのコンテナは自分が今ECSのFargate上で動いていることを認識し、メトリクスを収集するようになります。

secretsでは、環境変数DD_API_KEYを定義し、パラメータストアに格納したDatadog APIキーを設定しています。

以上の設定を、CodePipelineが読み込むS3のバケットにアップロードして、デプロイを実行してください。 Datadog Agentのコンテナが、アプリケーションと同じタスク内で起動するようになります。

Datadogに送信されたメトリクスを確認する

アプリケーションのコンテナと同じタスク内で起動したDatadog Agentのコンテナは、自動的にメトリクスの収集と送信を開始します。

送信されたメトリクスは、DatadogのMetrics Explorer(メニューのMetrics->Explorer)で次のように確認できます。

Metrics Explorerで見たメトリクスの様子

Datadog Agentが送信するメトリクスの名前は、全てecs.fargateで始まります。 したがって、この値で絞り込むと受信したメトリクスを探しやすくなります。


※ このドキュメントはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。

※ このドキュメントに記載されている会社名、製品名は、各社の登録商標または商標です。

© 2021 TIS Inc.