Amazon ECS on AWS Fargate
概要
このページでは、ECS Fargate インテグレーションについて説明します。EKS Fargate については、Datadog の
EKS Fargate インテグレーションに関するドキュメントをご覧ください。
ECS Fargate で実行されているすべてのコンテナからメトリクスを取得します。
- CPU/メモリ使用量および制限のメトリクス
- Datadog インテグレーションまたはカスタムメトリクスを使用して、Fargate で実行されているアプリケーションを監視
Datadog Agent は、ECS のタスクメタデータエンドポイントでタスク定義のコンテナのメトリクスを取得します。このエンドポイントに関する ECS のドキュメントには、以下のように記載されています。
- このエンドポイントは、タスクに関連付けられたすべてのコンテナの Docker 統計 JSON を返します。返される統計の詳細については、Docker API ドキュメント内の ContainerStats を参照してください。
タスクメタデータエンドポイントは、タスク定義自体の内部からのみ使用できます。このため、Datadog Agent を監視する各タスク定義内の追加コンテナとして実行する必要があります。
このメトリクスの収集を有効にするために必要な構成は、タスク定義内で環境変数 ECS_FARGATE
を "true"
にすることだけです。
注: Network Performance Monitoring (NPM) は、ECS Fargate ではサポートされていません。
セットアップ
以下の手順では、AWS ECS Fargate 内で Datadog Container Agent をセットアップします。注: Fargate インテグレーションを最大限活用するには、Datadog Agent バージョン 6.1.1 以降が必要です。
Datadog Agent を持たないタスクも Cloudwatch でメトリクスを報告しますが、Autodiscovery、詳細なコンテナメトリクス、トレーシングなどの機能には Agent が必要です。さらに、Cloudwatch メトリクスは粒度が低く、Datadog Agent を通じて直接発送されるメトリクスより報告のレイテンシーが高くなります。
インストール
Datadog で ECS Fargate タスクを監視するには、アプリケーションコンテナと同じタスク定義内のコンテナとして Agent を実行します。Datadog でメトリクスを収集するには、各タスク定義にアプリケーションコンテナのほかに Datadog Agent コンテナを含める必要があります。以下のセットアップ手順を実行します。
- ECS Fargate タスクの作成
- IAM ポリシーの作成と修正
- レプリカサービスとしてのタスクの実行
ECS Fargate タスクの作成
Fargate の主要な作業単位はタスクで、これはタスク定義内で設定されます。タスク定義は、Kubernetes のポッドに相当します。タスク定義には 1 つ以上のコンテナが含まれる必要があります。Datadog Agent を実行するには、アプリケーションコンテナおよび Datadog Agent コンテナを実行するためのタスク定義を作成します。
以下の手順は、Amazon Web Console、AWS CLI ツール、または AWS CloudFormation を使用したタスクの構成方法を示します。
Web UI タスク定義
- AWS Web Console にログインし、ECS セクションに移動します。
- 左メニューの Task Definitions をクリックし、Create new Task Definition ボタンをクリックするか、既存の Fargate タスク定義を選択します。
- 新しいタスク定義の場合
- 起動タイプとして Fargate を選択し、Next step ボタンをクリックします。
- Task Definition Name にタスク定義名を入力します (
my-app-and-datadog
など)。 - タスク実行 IAM ロールを選択します。下の IAM ポリシーの作成と修正セクションで、権限の要件を確認します。
- ニーズに合わせて Task memory と Task CPU を選択します。
- Datadog Agent コンテナの追加を開始するには、Add container ボタンをクリックします。
- Container name に
datadog-agent
と入力します。 - Image に
public.ecr.aws/datadog/agent:latest
と入力します。 - Env Variables には、Key
DD_API_KEY
を追加し、値として Datadog API キーを入力します。 - キー
ECS_FARGATE
と値 true
を使用して、もう 1 つ環境変数を追加します。Add をクリックしてコンテナを追加します。 - Key
DD_SITE
と値
を使用して、別の環境変数を追加します。設定しない場合、これはデフォルトで datadoghq.com
になります。 - (Windows のみ) 作業ディレクトリとして
C:\
を選択します。
- タスク定義に他のアプリケーションコンテナを追加します。インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。
- Create をクリックしてタスク定義を作成します。
AWS CLI タスク定義
- datadog-agent-ecs-fargate.json をダウンロードします。注: Internet Explorer をお使いの場合は、以下に記載の JSON ファイルを含む gzip ファイルとしてダウンロードされる場合があります。
- JSON を
TASK_NAME
、Datadog API キー、および適切な DD_SITE
(
) で更新します。注: 環境変数 ECS_FARGATE
はすでに "true"
に設定されています。
タスク定義に他のアプリケーションコンテナを追加します。インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。
オプション - Agent 健全性チェックを追加します。
ECS タスク定義に次を追加して、Agent 健全性チェックを作成します。
"healthCheck": {
"retries": 3,
"command": ["CMD-SHELL","agent health"],
"timeout": 5,
"interval": 30,
"startPeriod": 15
}
次のコマンドを実行して ECS タスク定義を登録します。
aws ecs register-task-definition --cli-input-json file://<ファイルへのパス>/datadog-agent-ecs-fargate.json
AWS CloudFormation テンプレートを使用して Fargate コンテナを構成することができます。CloudFormation テンプレート内で AWS::ECS::TaskDefinition
リソースを使用して Amazon ECS タスクを設定し、そのタスクで必要な起動タイプとして FARGATE
を指定します。
下記の CloudFormation テンプレートに Datadog API キーを入れて更新します。また、必要に応じて適切な DD_SITE
(
) 環境変数も設定します。設定しない場合、デフォルトは datadoghq.com
になります。
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 512
ContainerDefinitions:
- Name: datadog-agent
Image: 'public.ecr.aws/datadog/agent:latest'
Environment:
- Name: DD_API_KEY
Value: <DATADOG_API_KEY>
- Name: ECS_FARGATE
Value: true
最後に、他のアプリケーションコンテナを ContainerDefinitions
内に含め、CloudFormation を通してデプロイします。
CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation タスク定義のドキュメントをご参照ください。
レプリカサービスとしてのタスクの実行
ECS Fargate では、タスクを Replica サービスとして実行する唯一のオプションがあります。Datadog Agent は、アプリケーションやインテグレーションコンテナと同じタスク定義内で実行されます。
Web UI レプリカサービス
- AWS Web Console にログインし、ECS セクションに移動します。必要に応じて、Networking only クラスターテンプレートを使用してクラスターを作成します。
- Datadog Agent を実行するクラスターを選択します。
- Services タブで、Create ボタンをクリックします。
- Launch type で、FARGATE を選択します。
- Task Definition で、先ほど作成したタスクを選択します。
- Service name に入力します。
- Number of tasks に
1
と入力し、Next step ボタンをクリックします。 - Cluster VPC、Subnets、および Security Groups を選択します。
- Load balancing と Service discovery をオプションで設定します。
- Next step ボタンをクリックします。
- Auto Scaling は、オプションで設定します。
- Next step ボタンをクリックし、Create service ボタンをクリックします。
AWS CLI レプリカサービス
AWS CLI ツールを使用して次のコマンドを実行します。
注: Fargate バージョン 1.1.0 以降が必要です。したがって、以下のコマンドでは、プラットフォームバージョンを指定します。
必要に応じてクラスターを作成します。
aws ecs create-cluster --cluster-name "<クラスター名>"
クラスターのサービスとしてタスクを実行します。
aws ecs run-task --cluster <CLUSTER_NAME> \
--network-configuration "awsvpcConfiguration={subnets=["<PRIVATE_SUBNET>"],securityGroups=["<SECURITY_GROUP>"]}" \
--task-definition arn:aws:ecs:us-east-1:<AWS_ACCOUNT_NUMBER>:task-definition/<TASK_NAME>:1 \
--region <AWS_REGION> --launch-type FARGATE --platform-version 1.4.0
CloudFormation テンプレートでは、前の例で作成した ECSTaskDefinition
リソースを、作成する AWS::ECS::Service
リソースに参照させることができます。この後、レプリカサービスに Cluster
や DesiredCount
など、アプリケーションに必要なパラメーターを指定します。
Resources:
ECSTaskDefinition:
#(...)
ECSService:
Type: 'AWS::ECS::Service'
Properties:
Cluster: <CLUSTER_NAME>
TaskDefinition:
Ref: "ECSTaskDefinition"
DesiredCount: 1
#(...)
CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation ECS サービスのドキュメントをご参照ください。
Datadog API キーをシークレットとして提供するには、 シークレットの使用を参照してください。
AWS Batch のインストール
AWS Batch ジョブを Datadog で監視するには、ECS Fargate と Datadog Agent を使った AWS Batch を参照してください。
IAM ポリシーの作成と修正
ECS Fargate のメトリクスを収集するには、次のアクセス許可を Datadog IAM ポリシーに追加します。詳細については、AWS ウェブサイト上の ECS ポリシーを参照してください。
AWS アクセス許可 | 説明 |
---|
ecs:ListClusters | 使用できるクラスターをリストします。 |
ecs:ListContainerInstances | クラスターのインスタンスをリストします。 |
ecs:DescribeContainerInstances | リソースおよび実行中のタスクに関するメトリクスを追加するためのインスタンスを記述します。 |
シークレットの使用
環境変数 DD_API_KEY
に API キーをプレーンテキストで代入する代わりに、AWS Secrets Manager に格納されているプレーンテキストのシークレットの ARN を参照することもできます。タスクまたはジョブ定義ファイルの containerDefinitions.secrets
セクションの下に DD_API_KEY
環境変数を配置します。タスクやジョブの実行ロールが AWS Secrets Manager からシークレットを取得するのに必要な権限を持っていることを確認します。
メトリクスの収集
上述のように Datadog Agent をセットアップすると、オートディスカバリーを有効にした状態で ecs_fargate チェックがメトリクスを収集します。その他のメトリクスを収集するには、同じタスク内の他のコンテナに Docker ラベルを追加します。
インテグレーションは Linux と Windows で動作しますが、一部のメトリクスは OS に依存します。Windows で実行したときに公開されるメトリクスは、すべて Linux でも公開されますが、Linux でしか利用できないメトリクスもあります。このインテグレーションで提供されるメトリクスの一覧は、データ収集を参照してください。このリストでは、どのメトリクスが Linux 専用であるかも指定されています。
インテグレーションメトリクスの収集の詳細については、ECS Fargate のインテグレーションセットアップを参照してください。
DogStatsD
メトリクスは DogStatsD を使用して UDP ポート 8125 を介して収集されます。
その他の環境変数
Docker Agent コンテナと共に使用できる環境変数については、Docker Agent ページを参照してください。注: 一部の変数は Fargate では使用できません。
環境変数 | 説明 |
---|
DD_DOCKER_LABELS_AS_TAGS | docker コンテナラベルを抽出します |
DD_CHECKS_TAG_CARDINALITY | タグをチェックメトリクスに追加します |
DD_DOGSTATSD_TAG_CARDINALITY | タグをカスタムメトリクスに追加します |
グローバルなタグ付けには、DD_DOCKER_LABELS_AS_TAGS
の使用をお勧めします。Agent は、この方法を使用して、コンテナラベルからタグを取得します。それには、他のコンテナに適切なラベルを追加する必要があります。ラベルは、タスク定義で直接追加できます。
Agent コンテナのフォーマット
{
"name": "DD_DOCKER_LABELS_AS_TAGS",
"value": "{\"<収集するラベル名>\":\"<DATADOG_用タグキー>\"}"
}
Agent コンテナの例
{
"name": "DD_DOCKER_LABELS_AS_TAGS",
"value": "{\"com.docker.compose.service\":\"service_name\"}"
}
CloudFormation 例 (YAML):
ContainerDefinitions:
- #(...)
Environment:
- Name: DD_DOCKER_LABELS_AS_TAGS
Value: "{\"com.docker.compose.service\":\"service_name\"}"
注: DD_HOSTNAME
を使用しないでください。Fargate には、ユーザーに対するホストという概念がないからです。このタグを使用すると、タスクがインフラストラクチャーリストの APM ホストとして表示されるようになり、請求に影響が出る可能性があります。代わりに、従来からホストタグを割り当てるために DD_TAGS
が使用されています。Datadog Agent バージョン 6.13.0 では、DD_TAGS
環境変数を使用してインテグレーションメトリクスにグローバルタグを設定することもできます。
クローラーベースのメトリクス
Datadog Agent によって収集されるメトリクスのほかに、Datadog には CloudWatch ベースの ECS インテグレーションがあります。このインテグレーションは、Amazon ECS CloudWatch メトリクスを収集します。
そこに記載されているように、Fargate タスクも次のようにメトリクスを報告します。
使用できるメトリクスは、クラスターまたはバッチジョブ内のタスクとサービスの起動タイプによって異なります。サービスに Fargate 起動タイプを使用している場合は、サービスの監視に役立つように、CPU とメモリの使用率メトリクスが提供されます。
この方法は Datadog Agent を使用しないため、インテグレーションタイルで ECS をチェックすることで、AWS インテグレーションを構成する必要があります。これで、自動的に Datadog が CloudWatch メトリクス (Datadog 内の aws.ecs.*
ネームスペースを使用) を取得します。ドキュメントの収集データセクションを参照してください。
必要なメトリクスがこれだけの場合は、このインテグレーションに依存して CloudWatch メトリクスを使用して収集できます。注: CloudWatch データは粒度が低く (有効にした監視の種類に応じて 1-5 分)、Datadog への報告にも遅延があります。これは、Agent を使用して Datadog にデータをプッシュするのではなく、AWS の API 制限の範囲内で CloudWatch からデータを収集する必要があるためです。
Datadog のデフォルトの CloudWatch クローラーは、10 分ごとにメトリクスをポーリングします。クローリングスケジュールを速くする必要がある場合は、それが可能かどうかを Datadog のサポートチームにお問い合わせください。注: CloudWatch の API 呼び出しは課金対象なので、AWS 側のコストが増大します。
ログ収集
Fargate のログを監視するには、次のどちらかを使用します。
- Datadog の Fluent Bit 出力プラグインで構築した AWS FireLens インテグレーションで、ログを Datadog に直接送信
- ログドライバー
awslogs
を使って CloudWatch Log Group にログを保存し、Lambda 関数で Datadog にログをルーティング
Datadog では、Fargate のタスクで直接 Fluent Bit を構成できるため、AWS FireLens の利用を推奨しています。
注: Fluent Bit と FireLens によるログ収集は、AWS Batch on ECS Fargate ではサポートされていません。
Fluent Bit と FireLens
Datadog の Fluent Bit アウトプットプラグインに組み込まれている AWS FireLens インテグレーションを構成して、監視している FireLens のログデータを Datadog ログと接続します。この構成の完全なタスク定義例はこちらにあります。
既存の Fargate タスクで Fluent Bit FireLens ログルーターコンテナを追加します。 FireLens の有効化については、専用の AWS Firelens ドキュメントを参照してください。Fargate コンテナの定義については、AWS コンテナ定義ドキュメントを参照してください。AWS では、リージョン別 Docker イメージの使用を推奨しています。下記に、Fluent Bit イメージが構成されたタスク定義の例を示します。
{
"essential": true,
"image": "amazon/aws-for-fluent-bit:stable",
"name": "log_router",
"firelensConfiguration": {
"type": "fluentbit",
"options": { "enable-ecs-log-metadata": "true" }
}
}
コンテナがシリアル化された JSON ログを stdout 上で公開している場合は、ログが Datadog 内で正しくパースされるよう、次の 追加 FireLens コンフィギュレーションを使用する必要があります。
{
"essential": true,
"image": "amazon/aws-for-fluent-bit:stable",
"name": "log_router",
"firelensConfiguration": {
"type": "fluentbit",
"options": {
"enable-ecs-log-metadata": "true",
"config-file-type": "file",
"config-file-value": "/fluent-bit/configs/parse-json.conf"
}
}
}
これにより、シリアル化された JSON が log:
フィールドから上位レベルのフィールドに変換されます。詳細については、JSON がシリアル化されたコンテナの stdout ログをパースしている AWS サンプルを参照してください。
次に、同じ Fargate タスクで、ログを送信する目的のコンテナに対して、ログ構成を定義します。このログ構成は、AWS FireLens をログドライバーとし、Fluent Bit にデータを出力するものである必要があります。下記に、ログドライバーに FireLens が使用され、Fluent Bit にデータを出力しているタスク定義の例を示します。
{
"logConfiguration": {
"logDriver": "awsfirelens",
"options": {
"Name": "datadog",
"apikey": "<DATADOG_API_KEY>",
"Host": "http-intake.logs.datadoghq.com",
"dd_service": "firelens-test",
"dd_source": "redis",
"dd_message_key": "log",
"dd_tags": "project:fluentbit",
"TLS": "on",
"provider": "ecs"
}
}
}
{
"logConfiguration": {
"logDriver": "awsfirelens",
"options": {
"Name": "datadog",
"apikey": "<DATADOG_API_KEY>",
"Host": "http-intake.logs.us3.datadoghq.com",
"dd_service": "firelens-test",
"dd_source": "redis",
"dd_message_key": "log",
"dd_tags": "project:fluentbit",
"TLS": "on",
"provider": "ecs"
}
}
}
{
"logConfiguration": {
"logDriver": "awsfirelens",
"options": {
"Name": "datadog",
"apikey": "<DATADOG_API_KEY>",
"Host": "http-intake.logs.us5.datadoghq.com",
"dd_service": "firelens-test",
"dd_source": "redis",
"dd_message_key": "log",
"dd_tags": "project:fluentbit",
"TLS": "on",
"provider": "ecs"
}
}
}
{
"logConfiguration": {
"logDriver": "awsfirelens",
"options": {
"Name": "datadog",
"apikey": "<DATADOG_API_KEY>",
"Host": "http-intake.logs.datadoghq.eu",
"dd_service": "firelens-test",
"dd_source": "redis",
"dd_message_key": "log",
"dd_tags": "project:fluentbit",
"TLS": "on",
"provider": "ecs"
}
}
}
{
"logConfiguration": {
"logDriver": "awsfirelens",
"options": {
"Name": "datadog",
"apikey": "<DATADOG_API_KEY>",
"Host": "http-intake.logs.ddog-gov.datadoghq.com",
"dd_service": "firelens-test",
"dd_source": "redis",
"dd_message_key": "log",
"dd_tags": "project:fluentbit",
"TLS": "on",
"provider": "ecs"
}
}
}
dd_service
、dd_source
、dd_tags
は、任意のタグに調整することができます。
- Fargate タスクの実行中は常に、Fargate タスクが管理するコンテナの情報を含むコンテナログが、Fluent Bit から Datadog に送信されるようになります。Log Explorer ページで生ログを確認したり、ログ用のモニターを作成し Live Container ビューで確認したりすることが可能です。
Web UI
Fluent Bit コンテナを既存のタスク定義に追加するには、Log router integration の下にある Enable FireLens integration チェックボックスをオンにすると、自動的に log_router
コンテナが作成されます。これは地域の画像を取り込みますが、latest
の代わりに stable
の画像タグを使用することをお勧めします。Apply をクリックすると、ベースとなるコンテナが作成されます。さらに firelensConfiguration
をカスタマイズするには、下部にある Configure via JSON ボタンをクリックして、手動で編集します。
これを追加した後、タスク定義でログを送信するアプリケーションコンテナを編集し、Log driver を awsfirelens
に変更し、Log options に上記の例で示されたキーを記入します。
AWS CLI
既存の JSON タスク定義ファイルを編集して、前のセクションで説明したように、log_router
コンテナとアプリケーションコンテナの更新した logConfiguration
を含めます。これが終わったら、次のコマンドでタスク定義の新しいリビジョンを作成します。
aws ecs register-task-definition --cli-input-json file://<ファイルへのパス>/datadog-agent-ecs-fargate.json
AWS CloudFormation のテンプレートを使用するには、AWS::ECS::TaskDefinition
リソースを使用し、Datadog
オプションを設定して、ログ管理を構成する必要があります。
例えば、Fluent Bit が Datadog にログを送信するように構成する場合
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 1GB
ContainerDefinitions:
- Name: tomcat-test
Image: 'tomcat:jdk8-adoptopenjdk-openj9'
LogConfiguration:
LogDriver: awsfirelens
Options:
Name: datadog
apikey: <DATADOG_API_KEY>
Host: http-intake.logs.datadoghq.com
dd_service: test-service
dd_source: test-source
TLS: 'on'
provider: ecs
MemoryReservation: 500
- Name: log_router
Image: 'amazon/aws-for-fluent-bit:stable'
Essential: true
FirelensConfiguration:
Type: fluentbit
Options:
enable-ecs-log-metadata: true
MemoryReservation: 50
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 1GB
ContainerDefinitions:
- Name: tomcat-test
Image: 'tomcat:jdk8-adoptopenjdk-openj9'
LogConfiguration:
LogDriver: awsfirelens
Options:
Name: datadog
apikey: <DATADOG_API_KEY>
Host: http-intake.logs.us3.datadoghq.com
dd_service: test-service
dd_source: test-source
TLS: 'on'
provider: ecs
MemoryReservation: 500
- Name: log_router
Image: 'amazon/aws-for-fluent-bit:stable'
Essential: true
FirelensConfiguration:
Type: fluentbit
Options:
enable-ecs-log-metadata: true
MemoryReservation: 50
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 1GB
ContainerDefinitions:
- Name: tomcat-test
Image: 'tomcat:jdk8-adoptopenjdk-openj9'
LogConfiguration:
LogDriver: awsfirelens
Options:
Name: datadog
apikey: <DATADOG_API_KEY>
Host: http-intake.logs.us5.datadoghq.com
dd_service: test-service
dd_source: test-source
TLS: 'on'
provider: ecs
MemoryReservation: 500
- Name: log_router
Image: 'amazon/aws-for-fluent-bit:stable'
Essential: true
FirelensConfiguration:
Type: fluentbit
Options:
enable-ecs-log-metadata: true
MemoryReservation: 50
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 1GB
ContainerDefinitions:
- Name: tomcat-test
Image: 'tomcat:jdk8-adoptopenjdk-openj9'
LogConfiguration:
LogDriver: awsfirelens
Options:
Name: datadog
apikey: <DATADOG_API_KEY>
Host: http-intake.logs.datadoghq.eu
dd_service: test-service
dd_source: test-source
TLS: 'on'
provider: ecs
MemoryReservation: 500
- Name: log_router
Image: 'amazon/aws-for-fluent-bit:stable'
Essential: true
FirelensConfiguration:
Type: fluentbit
Options:
enable-ecs-log-metadata: true
MemoryReservation: 50
Resources:
ECSTaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 256
Memory: 1GB
ContainerDefinitions:
- Name: tomcat-test
Image: 'tomcat:jdk8-adoptopenjdk-openj9'
LogConfiguration:
LogDriver: awsfirelens
Options:
Name: datadog
apikey: <DATADOG_API_KEY>
Host: http-intake.logs.ddog-gov.datadoghq.com
dd_service: test-service
dd_source: test-source
TLS: 'on'
provider: ecs
MemoryReservation: 500
- Name: log_router
Image: 'amazon/aws-for-fluent-bit:stable'
Essential: true
FirelensConfiguration:
Type: fluentbit
Options:
enable-ecs-log-metadata: true
MemoryReservation: 50
CloudFormation のテンプレートと統語法に関する詳細は、AWS CloudFormation ドキュメントをご参照ください。
注: プレーンテキストで apikey
を公開しないようにするには、TaskDefinition シークレットを使用します。
AWS ログドライバー
awslogs
ログドライバーと Lambda 関数を使用して Fargate ログを監視し、Datadog にルーティングします。
ログを収集したいタスクまたはジョブのアプリケーションコンテナで、ログドライバーを awslogs
として定義します。手順は、AWS Fargate デベロッパーガイドを参照してください。
これは、Fargate タスクまたはジョブがログ情報を Amazon CloudWatch Logs に送信するように構成します。次は、awslogs ログドライバーを構成するためのタスク/ジョブ定義のスニペットです。
{
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/fargate-task|job-definition",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
}
}
タスクまたはジョブ定義で awslogs
ログドライバーを使用して、コンテナログを CloudWatch Logs に送信する方法については、awslogs ログドライバーを使用するを参照してください。このドライバーは、コンテナが生成したログを収集し、CloudWatch に直接送信します。
最後に、Datadog Lambda Log Forwarder 関数を使用して CloudWatch からログを収集し、Datadog に送信します。
トレースの収集
- 上の手順に従ってタスクまたはジョブ定義に Datadog Agent コンテナを追加し、追加の環境変数
DD_APM_ENABLED
を true
に設定します。DD_SITE
変数を
に設定します。設定しない場合、デフォルトで datadoghq.com
になります。
セットアップに基づいてアプリケーションをインスツルメントします。
注: Fargate APM のアプリケーションでは、DD_AGENT_HOST
を設定しないでください。デフォルトの localhost
で動作します。
Datadog へのトレースの送信の一般的な情報を参照してください。
アプリケーションが Datadog Agent コンテナと同じタスクまたはジョブ定義内で実行されていることを確認します。
プロセスの収集
Datadog で ECS Fargate プロセスを表示できます。ECS Fargate コンテナとの関係を確認するには、Datadog Agent v7.50.0 以降を使用します。
Live Processes ページを使用することで、ECS Fargate のプロセスを Datadog で監視することができます。プロセス収集を有効にするには、タスク定義に PidMode
パラメーターを追加し、以下のように task
に設定します。
ECS でプロセスをフィルタリングするには、AWS Fargate
コンテナファセットを使用するか、Live Processes ページの検索クエリに fargate:ecs
と入力します。
すぐに使えるタグ
Agent は、タグを自動検出して、タスク全体またはこのタスクまたはジョブ内の個別のコンテナにより送信されたすべてのデータに関連付けます。自動的に関連付けられるタグのリストは、Agent のカーディナリティ構成に基づきます。
タグ | カーディナリティ | ソース |
---|
container_name | 大 | ECS API |
container_id | 大 | ECS API |
docker_image | 小 | ECS API |
image_name | 小 | ECS API |
short_image | 小 | ECS API |
image_tag | 小 | ECS API |
ecs_cluster_name | 小 | ECS API |
ecs_container_name | 小 | ECS API |
task_arn | オーケストレーター | ECS API |
task_family | 小 | ECS API |
task_name | 小 | ECS API |
task_version | 小 | ECS API |
availability-zone | 小 | ECS API |
region | 小 | ECS API |
収集データ
メトリクス
ecs.fargate.cpu.limit (gauge) | Soft limit (CPU Shares) in CPU Units. |
ecs.fargate.cpu.percent (gauge) | Percentage of CPU used per container (Linux only). Shown as percent |
ecs.fargate.cpu.system (gauge) | System CPU time. Shown as nanocore |
ecs.fargate.cpu.task.limit (gauge) | Task CPU Limit (shared by all containers). Shown as nanocore |
ecs.fargate.cpu.usage (gauge) | Total CPU Usage. Shown as nanocore |
ecs.fargate.cpu.user (gauge) | User CPU time. Shown as nanocore |
ecs.fargate.ephemeral_storage.reserved (gauge) | The reserved ephemeral storage of this task. (Fargate 1.4.0+ required). Shown as mebibyte |
ecs.fargate.ephemeral_storage.utilized (gauge) | The current ephemeral storage usage of this task. (Fargate 1.4.0+ required). Shown as mebibyte |
ecs.fargate.io.bytes.read (gauge) | Number of bytes read on the disk. Shown as byte |
ecs.fargate.io.bytes.write (gauge) | Number of bytes written to the disk. Shown as byte |
ecs.fargate.io.ops.read (gauge) | Number of read operation on the disk. |
ecs.fargate.io.ops.write (gauge) | Number of write operations to the disk. |
ecs.fargate.mem.active_anon (gauge) | Number of bytes of anonymous and swap cache memory on active LRU list (Linux only). Shown as byte |
ecs.fargate.mem.active_file (gauge) | Number of bytes of file-backed memory on active LRU list (Linux only). Shown as byte |
ecs.fargate.mem.cache (gauge) | Number of bytes of page cache memory (Linux only). Shown as byte |
ecs.fargate.mem.hierarchical_memory_limit (gauge) | Number of bytes of memory limit with regard to hierarchy under which the memory cgroup is (Linux only). Shown as byte |
ecs.fargate.mem.hierarchical_memsw_limit (gauge) | Number of bytes of memory+swap limit with regard to hierarchy under which memory cgroup is (Linux only). Shown as byte |
ecs.fargate.mem.inactive_file (gauge) | Number of bytes of file-backed memory on inactive LRU list (Linux only). Shown as byte |
ecs.fargate.mem.limit (gauge) | Number of bytes memory limit (Linux only). Shown as byte |
ecs.fargate.mem.mapped_file (gauge) | Number of bytes of mapped file (includes tmpfs/shmem) (Linux only). Shown as byte |
ecs.fargate.mem.max_usage (gauge) | Show max memory usage recorded. Shown as byte |
ecs.fargate.mem.pgfault (gauge) | Number of page faults per second (Linux only). |
ecs.fargate.mem.pgmajfault (gauge) | Number of major page faults per second (Linux only). |
ecs.fargate.mem.pgpgin (gauge) | Number of charging events to the memory cgroup. The charging event happens each time a page is accounted as either mapped anon page(RSS) or cache page(Page Cache) to the cgroup (Linux only). |
ecs.fargate.mem.pgpgout (gauge) | Number of uncharging events to the memory cgroup. The uncharging event happens each time a page is unaccounted from the cgroup (Linux only). |
ecs.fargate.mem.rss (gauge) | Number of bytes of anonymous and swap cache memory (includes transparent hugepages) (Linux only). Shown as byte |
ecs.fargate.mem.task.limit (gauge) | Task Memory Limit (shared by all containers). Shown as byte |
ecs.fargate.mem.usage (gauge) | Number of bytes of memory used. Shown as byte |
ecs.fargate.net.bytes_rcvd (gauge) | Number of bytes received (Fargate 1.4.0+ required). Shown as byte |
ecs.fargate.net.bytes_sent (gauge) | Number of bytes sent (Fargate 1.4.0+ required). Shown as byte |
ecs.fargate.net.packet.in_dropped (gauge) | Number of ingoing packets dropped (Fargate 1.4.0+ required). Shown as packet |
ecs.fargate.net.packet.out_dropped (gauge) | Number of outgoing packets dropped (Fargate 1.4.0+ required). Shown as packet |
ecs.fargate.net.rcvd_errors (gauge) | Number of received errors (Fargate 1.4.0+ required). Shown as error |
ecs.fargate.net.sent_errors (gauge) | Number of sent errors (Fargate 1.4.0+ required). Shown as error |
イベント
ECS Fargate チェックには、イベントは含まれません。
サービスチェック
fargate_check
Returns CRITICAL
if the Agent is unable to connect to Fargate, otherwise returns OK
.
Statuses: ok, critical
トラブルシューティング
ご不明な点は、Datadog のサポートチームまでお問合せください。
その他の参考資料