
ECS on EC2のDatadog監視設定の話
-
2022年6月23日
こんにちは、ココネのサービスインフラを担当している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.yamllogs_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”
}
}
]
}
- Json内容
- 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
ココネでは一緒に働く仲間を募集中です。
ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。