ECS on EC2のDatadog監視設定の話

こんにちは、ココネのサービスインフラを担当しているSです。

今回は新プロジェクトのECSクラスターで動かしているコンテナを、Datadogで監視する設定方法をご紹介できればと思います。

(DatadogはクラウドSaaS型運用監視サービスで、インフラ・APM・ログを一元管理・監視できる特徴があります。)

ホストにDatadogAgentをインストール・設定する方法

最初Alpha環境のECSはEC2インスタンスを一台のみ起動してますので、直接ホストサーバにDatadogAgentをインストールし、コンテナを監視しました。

構成

設定

  • Agentインストール

    # DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=<管理者から貰う> DD_SITE=”datadoghq.com” bash -c “$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)
  • プロセス監視設定
    /etc/datadog-agent/datadog.yaml

    process_config:

        enabled: ‘true’

  • Dockerコンテナ監視設定

    # usermod -a -G docker dd-agent
  • ログ監視有効
    /etc/datadog-agent/datadog.yaml

    logs_enabled: true
  • コンテナログ収集設定
    /etc/datadog-agent/datadog.yaml

    listeners:

    – name: docker

    config_providers:

    – name: docker

    polling: true

    logs_config:

    container_collect_all: true

    Agentはデフォルトでコンテナのstdout/stderrへと出力されるログを収集します。

     

上記はEC2ホストにDatadogAgentをインストールして、監視情報を収集する設定方法です。

しかしECSクラスタをAutoScaling Groupと連携し、複数EC2を起動する場合は、ホストにAgentをインストールするとAMIの管理が必要になり、設定更新をする時に手間がかかります。

このことからDatadogAgentをコンテナ化する方法を選択しました。

コンテナ化された Datadog Agent を ECS クラスターにデプロイする方法

ECSクラスターにDaemonサービスでコンテナ化されたDatadogAgentを起動し、他のサービスコンテナを監視します。

構成

設定

  • ECSタスク定義の作成
    「EC2」→「JSONによる設定」を利用して新しいタスク定義を作成します。

    • Json内容
      datadog-agent-task

      {

          “containerDefinitions”: [

              {

                  “portMappings”: [

                      {

                          “hostPort”: 8126,

                          “protocol”: “tcp”,

                          “containerPort”: 8126

                      }

                  ],

                  “environment”: [

                      {

                          “name”: “DD_APM_NON_LOCAL_TRAFFIC”,

                          “value”: “true”

                      },

                      {

                          “name”: “DD_API_KEY”,

                          “value”: “******”

                      },

                      {

                          “name”: “DD_LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE”,

                          “value”: “true”

                      },

                      {

                          “name”: “DD_SITE”,

                          “value”: “datadoghq.com”

                      },

                      {

                          “name”: “DD_PROCESS_AGENT_ENABLED”,

                          “value”: “true”

                      },

                      {

                          “name”: “DD_APM_ENABLED”,

                          “value”: “true”

                      },

                      {

                          “name”: “DD_LOGS_ENABLED”,

                          “value”: “true”

                      },

                      {

                          “name”: “DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL”,

                          “value”: “true”

                      }

                  ],

                  “mountPoints”: [

                      {

                          “readOnly”: true,

                          “containerPath”: “/var/run/docker.sock”,

                          “sourceVolume”: “docker_sock”

                      },

                      {

                          “readOnly”: null,

                          “containerPath”: “/host/sys/fs/cgroup”,

                          “sourceVolume”: “cgroup”

                      },

                      {

                          “readOnly”: null,

                          “containerPath”: “/host/proc”,

                          “sourceVolume”: “proc”

                      },

                      {

                          “readOnly”: false,

                          “containerPath”: “/opt/datadog-agent/run”,

                          “sourceVolume”: “pointdir”

                      },

                      {

                          “readOnly”: true,

                          “containerPath”: “/var/lib/docker/containers”,

                          “sourceVolume”: “containers_root”

                      },

                      {

                          “readOnly”: true,

                          “containerPath”: “/etc/passwd”,

                          “sourceVolume”: “passwd”

                      }

                  ],

                  “image”: “public.ecr.aws/datadog/agent:latest”,

                  “essential”: true,

                  “name”: “datadog-agent”

              }

          ],

          “memory”: “256”,

          “family”: “datadog-agent-task”,

          “requiresCompatibilities”: [

              “EC2”

          ],

          “cpu”: “256”,

          “volumes”: [

              {

                  “name”: “cgroup”,

                  “host”: {

                      “sourcePath”: “/sys/fs/cgroup/”

                  }

              },

              {

                  “name”: “pointdir”,

                  “host”: {

                      “sourcePath”: “/opt/datadog-agent/run”

                  }

              },

              {

                  “name”: “containers_root”,

                  “host”: {

                      “sourcePath”: “/var/lib/docker/containers/”

                  }

              },

              {

                  “name”: “proc”,

                  “host”: {

                      “sourcePath”: “/proc/”

                  }

              },

              {

                  “name”: “docker_sock”,

                  “host”: {

                      “sourcePath”: “/var/run/docker.sock”

                  }

              },

              {

                  “name”: “passwd”,

                  “host”: {

                      “sourcePath”: “/etc/passwd”

                  }

              }

          ]

      }

  • ApplicatonのECSクラスターにDatadogAgent用サービスを一個追加します
    サービスタイプ:DAEMON

    ロードバランシングとAutoScalingを設定せず、サービスを作成します。

 

  • コンソールからDatadogAgentタスクの起動を確認

 

  • EC2インスタンス中にdockerコマンドでDatadogAgentのコンテナプロセスを確認

    タスクが正常に動いてることを確認できました。 

監視情報の確認

Datadog管理画面でECSの関連監視情報が送信されたかどうかを確認します。

  • ホストサーバのリソース監視情報を確認

 

  • ホストサーバのプロセス負荷監視情報を確認

 

  • コンテナ監視情報を確認

 

  • コンテナログ収集状況を確認

    ECSの関連監視情報が正常に送信されたことを確認できました。

最後に

実は、Amazon ECS Datadog インテグレーションを利用すると、CloudWatch から ECS メトリクスを自動的に収集できますが、別の料金がかかりますし、DatadogAgentのみでクラスター内のすべての EC2 インスタンスの ECS コンテナおよびタスクを監視できますので、今回はECSインテグレーションを設定していないです。

また、Datadogは大量なメトリクス情報(サーバやコンテナなど)を収集しているので、自由にいろいろなグラフやダッシュボードを作成できますし、簡単にアラート通知設定も出来ます(Slackやメールと連携できます)。

コンテナ化のDatadogAgentでECSを監視できるのはすごく楽でした!

この記事がどこかでお役に立てれば幸いです。

参考資料

https://docs.datadoghq.com/ja/agent/amazon_ecs/?tab=awscli

https://docs.datadoghq.com/ja/infrastructure/process/?tab=docker

 


 

ココネでは一緒に働く仲間を募集中です。

ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。

https://www.cocone.co.jp/recruit/contents/

Category

Tag