Help us understand the problem. What is going on with this article?

DatadogでECS Fargateのメトリクス収集・監視

概要

サービス公開にあたり、こちらの記事に続き、Datadog IntegrationsによるAWSのECS Fargateのメトリクス収集と監視方法についてまとめていきます。コンテナの作成などについてはAWSのCloudFormationを利用して説明します。

スクリーンショット 2019-11-03 14.32.49.png

参考
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

設定手順

  1. ECS Fargate Taskの作成
  2. IAM Policyの作成又は修正
  3. レプリカサービスとしてタスクを実行

なお、この設定による全機能を有効にするにはDatadog Agentのバージョンが6.1.1以上である必要があります。

1. ECS Fargate Taskの作成

CFNの定義に基づいて,CPU, Memoryのサイズを指定し、さらに次のセクションで説明するタスク実行用のRoleなどを指定します。

続けて、ContainerDefinitionsの設定でDatadog Agent用のコンテナの設定をします。

スクリーンショット 2019-11-03 14.49.00.png

上のように、Nameに datadog-agent, Imageにdatadog/agent:latestを指定します。
さらに Cpuで整数値10を指定します。
環境変数として DD_API_KEYをキーに、値にDatadogのアカウントのAPI KEYの値を指定します。もう一つ環境変数としてECS_FARGATEをキーにtrueを値として設定します。

さらに、監視対象のコンテナをContainerDefinitionsに定義します。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html

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を追加します。

スクリーンショット 2019-11-03 15.17.24.png

【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による方法又はawslogslog driverとLambda Functionを使ってログをDatadogに送ることでFargateのログをモニタリングすることができます。
Fluent Bitの設定をFargate Task内で直接できるため公式ではAWS Firelensを使った方法を推奨されています。

参考
https://docs.datadoghq.com/ja/integrations/ecs_fargate/#log-collection

Trace Collection

設定方法
1. Datadog Agent Containerに環境変数としてKeyを DD_APM_ENABLEDにValueをtrueにして追加します
2. setup方法に応じてアプリケーション側の設定を行います
3. アプリケーションのコンテナとDatadog Agentコンテナが同じタスク定義で起動していることを確認します

https://docs.datadoghq.com/tracing/

収集したメトリクスをDatadog上で確認

スクリーンショット 2019-11-03 19.10.28.png

Datadogのメニュー Infrastructure containersで対象のコンテナを指定して表示した結果になります。

まとめ

AWS ECS Fargate上で動かしているアプリケーションのDatadogでのメトリクやログ、Traceの収集のための設定に説明しました。簡単な設定でDatadogが自動で監視設定をしてくれるのでアプリケーションの開発に集中して取り組むことができます。継続的なサービスの運用を実現するために日々監視をよりよくしていくことが大事だと思いました。

goemp
落語(立川流)/さくらももこ/横尾忠則/Golang/Ruby/React/爆笑問題/鬼越トマホーク
dmmcom
総合エンタテイメントサイト「DMM.com」を運営。会員数は2,900万人を突破。動画配信、FX、英会話、ゲーム、太陽光発電、3Dプリンタなど40以上のサービスを展開。沖縄での水族館事業参入、ベルギーでのサッカークラブ経営など、様々な事業を手掛ける。また2018年より若手起業家の支援を強化、「DMM VENTURES」による出資や、M&Aなどを積極的に展開している。
https://dmm-corp.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away