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ダッシュボードで確認するとメトリクスが取れるようになります。