概要
サービス公開にあたり、こちらの記事に続き、Datadog IntegrationsによるAWSのECS Fargateのメトリクス収集と監視方法についてまとめていきます。コンテナの作成などについてはAWSのCloudFormationを利用して説明します。
参考
https://docs.datadoghq.com/ja/integrations/ecs_fargate/
Datadog ECS Fargate Integrationsの機能
- CPU/Memoryの使用量と限界のメトリクスの収集
- Datadog Integrations又はカスタムメトリクスによるFargate上で起動しているアプリケーションの監視
なおメトリクスはECS Taskのメタデータエンドポイントによって収集されます。
このメタデータのエンドポイントはタスク定義内でのみ利用可能なため、タスク定義内に追加でDatadog Agent用のコンテナを一つ作成する必要があります。
参考
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html
https://docs.docker.com/engine/api/v1.30/#operation/ContainerStats
設定手順
- ECS Fargate Taskの作成
- IAM Policyの作成又は修正
- レプリカサービスとしてタスクを実行
なお、この設定による全機能を有効にするにはDatadog Agentのバージョンが6.1.1以上である必要があります。
1. ECS Fargate Taskの作成
CFNの定義に基づいて,CPU, Memoryのサイズを指定し、さらに次のセクションで説明するタスク実行用のRoleなどを指定します。
続けて、ContainerDefinitionsの設定でDatadog Agent用のコンテナの設定をします。
上のように、Nameに datadog-agent
, Imageにdatadog/agent:latest
を指定します。
さらに Cpuで整数値10
を指定します。
環境変数として DD_API_KEY
をキーに、値にDatadogのアカウントのAPI KEYの値を指定します。もう一つ環境変数としてECS_FARGATE
をキーにtrue
を値として設定します。
さらに、監視対象のコンテナをContainerDefinitionsに定義します。
2. IAM Policyの作成又は修正
ECS Fargateのメトリクス収集の権限を与えるために以下の権限をDatadog IAM Policyに追加します。
AWS Permission | 内容 |
---|---|
ecs:ListClusters | List available clusters. |
ecs:ListContainerInstances | List instances of a cluster. |
ecs:DescribeContainerInstances | Describe instances to add metrics on resources and tasks running. |
参考
https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html
3. レプリカサービスとしてタスクを実行
サービススケジューラとしてレプリカ型としてサービスを作成、タスクを起動します。
参考
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_services.html
メトリクス収集
上の設定手順完了後、ecs_fargae_checkがメトリクスを収集します。追加のメトリクスを収集するためにメトリクス収集対象のアプリ側のコンテナにDocke Labelを追加します。
【Docker Label設定例】
参考
https://docs.datadoghq.com/ja/integrations/faq/integration-setup-ecs-fargate/?tab=rediswebui
DOGSTATSD
DogStatsDによってUDPポート番号8125でメトリクスが収集されます。
DogStatsDパケットによってカスタムメトリクスを収集するためにはDatadog Agentコンテナの環境変数としてキーDD_DOGSTATSD_NON_LOCAL_TRAFFIC
が値がtrue
を設定します。
LIVE PROCESS MONITORING
Datadog Agentコンテナの環境変数にDD_PROCESS_AGENT_ENABLED
を値をtrueにしてセットすることでDatadogのProcess Agentを有効にします。
そのほか環境変数
こちらを参考にしてください。
ただし一部Fargateタイプでは利用できないものもあります。
グローバルなタギングのために、DD_DOCKER_LABELS_AS_TAGS
を設定することが推奨されています。このメソッドにより、AgentはDocker container labelsからタグを取得します。
クローラに基づいたメトリクス
Datadog Agentによるメトリクスの収集に加えて、 ECSのCloudWatch Metricsによるメトリクスの収集も行うことができます。Fargateを使っている場合はCPUとMemoryの使用率のメトリクスがこの方法によって収集されます。
この方法による収集を行うためには、 ECSのAWS integrationの設定を行う必要があります。
ただし、 データ取得の間隔が多くなり、かつDatadogへのレポートに遅延します。
参考
https://docs.datadoghq.com/integrations/amazon_ecs/?tab=python#data-collected
ログ収集
AWS Firelens integrationによる方法又はawslogs
log driverとLambda Functionを使ってログをDatadogに送ることでFargateのログをモニタリングすることができます。
Fluent Bitの設定をFargate Task内で直接できるため公式ではAWS Firelensを使った方法を推奨されています。
参考
https://docs.datadoghq.com/ja/integrations/ecs_fargate/#log-collection
Trace Collection
設定方法
- Datadog Agent Containerに環境変数としてKeyを
DD_APM_ENABLED
にValueをtrue
にして追加します - setup方法に応じてアプリケーション側の設定を行います
- アプリケーションのコンテナとDatadog Agentコンテナが同じタスク定義で起動していることを確認します
収集したメトリクスをDatadog上で確認
Datadogのメニュー Infrastructure containersで対象のコンテナを指定して表示した結果になります。
まとめ
AWS ECS Fargate上で動かしているアプリケーションのDatadogでのメトリクやログ、Traceの収集のための設定に説明しました。簡単な設定でDatadogが自動で監視設定をしてくれるのでアプリケーションの開発に集中して取り組むことができます。継続的なサービスの運用を実現するために日々監視をよりよくしていくことが大事だと思いました。