ECS Fargate上で動いているJavaアプリケーションにDatadogを導入する手順をまとめます。
本記事の環境 - Java 11 - Gradle 7.0.2 - Spring Boot 2.5.1 - Jib 3.3.1
大まかな流れ
- Gradleプロジェクトでアプリケーションを作る
- ECS Fargate環境を用意する
- ECS FargateにデプロイできるようにGitHub Actionsワークフローを用意する
- ECS Faragte上で動いているJavaアプリケーションにDatadogを導入する
本記事では4についてまとめます。JibのGradleプラグインを利用してDockerイメージを生成しています。
手順
1. Javaクライアントのインストール
Javaクライアントをインストールして、任意の場所に配置(この記事では .datadog/)します。
$ wget -O dd-java-agent.jar 'https://dtdg.co/latest-java-tracer' もしくは $ curl -L -o dd-java-agent.jar https://dtdg.co/latest-java-tracer
Java アプリケーションのトレースに「classpath に dd-java-agent を追加しないでください。予期せぬ挙動が生じる場合があります。」とあるので、classpathには追加しないようにしてください。
2. タスク定義にDatadog Agent用サイドカーコンテナを追加
タスク定義にDatadog Agent用サイドカーコンテナを追加します。
{ # ECS Fargate全体の設定は省略 "containerDefinitions": [ { # アプリケーション用コンテナの設定 }, { "name": "datadog-agent", "image": "public.ecr.aws/datadog/agent:latest", "cpu": 128, "memory": 512, "memoryReservation": 512, "portMappings": [ { "containerPort": 8126 } ], "essential": true, "environment": [ { "name": "ECS_FARGATE", "value": "true" }, # Trace Agentを有効に { "name": "DD_APM_ENABLED", "value": "true" }, # Datadog上での環境識別子 { "name": "DD_ENV", "value": "dev" } ], "secrets": [ # AWS Systems Manager Parameter Storeに格納したAPI Key { "name": "DD_API_KEY", "valueFrom": "/datadog/DD_API_KEY" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "app-datadog", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "/datadog" } } } ] }
3. dd-java-agentをDockerイメージに含めるように設定を追加
build.gradleに、dd-java-agentをDockerイメージに含めるように設定を追加してください。
jib {
from {
image = 'amazoncorretto:11-alpine-jdk'
}
to {
// 任意のコンテナイメージ名
image = 'app'
}
container {
// アプリケーション実行時にJVMに渡すJVMフラグ
jvmFlags = ['-javaagent:/opt/datadog/dd-java-agent.jar']
}
extraDirectories {
paths {
path {
// dd-java-agent.jarをプロジェクトディレクトリからDockerイメージに追加
from = file("${project.rootDir}/.datadog")
into = '/opt/datadog'
}
}
}
}
4. デプロイ
ECS Fargeteにデプロイし、Datadogダッシュボードで確認するとメトリクスが取れるようになります。