シナリオ:ECS FargateのOpenTelemetryでJavaサービスを監視する 🔗
注釈
AWS ECS Fargate環境にCollectorをデプロイする方法については、Amazon ECS Fargate でCollectorをデプロイする を参照してください。
ECS Fargateで動作するJavaサービスをOpenTelemetryでインストルメンテーションするには、以下のいずれかの方法でsplunk-otel-javaagent.jarファイルをアプリケーションコンテナ上で利用可能にします:
アプリケーションコンテナの Dockerfile を更新して、splunk-otel-javaagent.jar ファイルを明示的にダウンロードし、そのコンテナイメージに組み込むようにします。オプション 1: splunk-otel-javaagent.jar をアプリケーションイメージに組み込む を参照してください。
splunk-otel-javaagent.jar ファイルをダウンロードする別のコンテナイメージをビルドし、アプリケーションコンテナのサイドカー ECS コンテナとして利用できるようにします。オプション2:別のコンテナイメージを構築する を参照してください。
オプション 1: splunk-otel-javaagent.jar をアプリケーションイメージに組み込む 🔗
以下の手順に従って、splunk-otel-javaagent.jar をアプリケーションイメージにベイクしてください:
1.アプリケーションのDockerfileを更新する 🔗
このオプションでは、まずアプリケーションコンテナの構築に使用する Dockerfile を更新し、splunk-otel-javaagent.jar ファイルをダウンロードして、ホスト上で利用できるようにします。この例では、アプリケーションコンテナが Alpine Linux 上で動作する Tomcat 9 をベースにしていると仮定しています。
Dockerfileを更新するには、以下を実行します:
FROM tomcat:9.0-jre8-alpine
RUN apk add curl
# Create a work directory to copy the agent artifacts
RUN mkdir -p /opt/splunk
# Download and extract agent artifacts to the work directory
RUN curl -L0 https://github.com/signalfx/splunk-otel-java/releases/latest/download/splunk-otel-javaagent.jar \
-o /opt/splunk/splunk-otel-javaagent.jar
WORKDIR /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
2.イメージをリポジトリにプッシュします。 🔗
次に、イメージをビルドしてリポジトリにプッシュします。username
はご使用のDocker Hubユーザー名に置き換えてください:
docker build --platform="linux/amd64" -t tomcat-with-splunk-java-agent:latest --no-cache .
docker tag tomcat-with-splunk-java-agent:latest username/tomcat-with-splunk-java-agent:latest
docker push username/tomcat-with-splunk-java-agent:latest
3.ECSタスク定義の更新 🔗
Dockerfile を更新してプッシュしたら、ECS タスク定義を更新して splunk-otel-javaagent.jar ファイルを使うようにします。このファイルは、/opt/Splunkディレクトリのアプリケーションコンテナの一部になります。
{
"family": "agent-baked-in-example",
"containerDefinitions": [
{
"name": "tomcat",
"image": "username/tomcat-with-splunk-java-agent:latest",
"cpu": 0,
"portMappings": [
{
"name": "tomcat-8080-tcp",
"containerPort": 8080,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [
{
"name": "OTEL_SERVICE_NAME",
"value": "myservice"
},
{
"name": "OTEL_RESOURCE_ATTRIBUTES",
"value": "deployment.environment=test,service.version=1.0"
},
{
"name": "JAVA_TOOL_OPTIONS",
"value": "-javaagent:/opt/splunk/splunk-otel-javaagent.jar"
}
],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"dependsOn": [],
"ulimits": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/agent-baked-in-example",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
}
},
{
"name": "splunk-otel-collector",
"image": "quay.io/signalfx/splunk-otel-collector:latest",
"cpu": 0,
"portMappings": [],
"essential": true,
"environment": [
{
"name": "SPLUNK_CONFIG",
"value": "/etc/otel/collector/fargate_config.yaml"
},
{
"name": "SPLUNK_REALM",
"value": "<Realm - us0, us1, etc>"
},
{
"name": "SPLUNK_ACCESS_TOKEN",
"value": "<Access Token>"
},
{
"name": "ECS_METADATA_EXCLUDED_IMAGES",
"value": "[\"quay.io/signalfx/splunk-otel-collector:latest\"]"
}
],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/agent-baked-in-example",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
}
}
],
"executionRoleArn": "arn:aws:iam::539254608140:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "3072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
}
}
オプション2:別のコンテナイメージを構築する 🔗
別のコンテナイメージを使用するには、以下の手順に従ってください:
1.Splunk Java エージェント用の Dockerfile を作成します。 🔗
まず、Dockerfile を作成して splunk-otel-javaagent.jar ファイルをダウンロードし、ボリュームとして利用できるようにします:
FROM alpine:latest
RUN apk add --no-cache curl
# Create a directory for the agent artifacts
RUN mkdir -p /opt/splunk
WORKDIR /opt/splunk
# Download the Splunk Java agent
RUN curl -L0 https://github.com/signalfx/splunk-otel-java/releases/latest/download/splunk-otel-javaagent.jar \
-o splunk-otel-javaagent.jar
# Expose the /opt/splunk directory as a shared volume
VOLUME ["/opt/splunk"]
CMD tail -f /dev/null
2.イメージをリポジトリにプッシュします。 🔗
次に、イメージをビルドしてリポジトリにプッシュします。username
はご使用のDocker Hubユーザー名に置き換えてください:
docker build --platform="linux/amd64" -t splunk-java-agent:latest --no-cache .
docker tag splunk-java-agent:latest username/splunk-java-agent:latest
docker push username/splunk-java-agent:latest
3.ECSタスク定義の更新 🔗
Tomcat などのアプリケーションコンテナで splunk-otel-javaagent.jar ファイルを利用できるようにするには、ECS タスク定義でこのコンテナイメージを使用します:
{
"family": "agent-init-container-example",
"containerDefinitions": [
{
"name": "tomcat",
"image": "tomcat:9.0",
"cpu": 0,
"portMappings": [
{
"name": "tomcat-8080-tcp",
"containerPort": 8080,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [
{
"name": "OTEL_SERVICE_NAME",
"value": "myservice"
},
{
"name": "OTEL_RESOURCE_ATTRIBUTES",
"value": "deployment.environment=test,service.version=1.0"
},
{
"name": "JAVA_TOOL_OPTIONS",
"value": "-javaagent:/opt/splunk/splunk-otel-javaagent.jar"
}
],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [
{
"sourceContainer": "splunk-java-agent",
"readOnly": false
}
],
"dependsOn": [
{
"containerName": "splunk-java-agent",
"condition": "START"
}
],
"ulimits": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/agent-init-container-example",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
}
},
{
"name": "splunk-otel-collector",
"image": "quay.io/signalfx/splunk-otel-collector:latest",
"cpu": 0,
"portMappings": [],
"essential": true,
"environment": [
{
"name": "SPLUNK_CONFIG",
"value": "/etc/otel/collector/fargate_config.yaml"
},
{
"name": "SPLUNK_REALM",
"value": "<Realm - us0, us1, etc>"
},
{
"name": "SPLUNK_ACCESS_TOKEN",
"value": "<Access Token>"
},
{
"name": "ECS_METADATA_EXCLUDED_IMAGES",
"value": "[\"quay.io/signalfx/splunk-otel-collector:latest\"]"
}
],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/agent-init-container-example",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
}
},
{
"name": "splunk-java-agent",
"image": "username/splunk-java-agent:latest",
"cpu": 0,
"portMappings": [],
"essential": false,
"environment": [],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": []
}
],
"executionRoleArn": "arn:aws:iam::539254608140:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "3072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
}
}
アプリケーションコンテナが Java OpenTelemetry 測定に必要な環境変数を持っていることを確認します:
"environment": [
{
"name": "OTEL_SERVICE_NAME",
"value": "myservice"
},
{
"name": "OTEL_RESOURCE_ATTRIBUTES",
"value": "deployment.environment=test,service.version=1.0"
},
{
"name": "JAVA_TOOL_OPTIONS",
"value": "-javaagent:/opt/splunk/splunk-otel-javaagent.jar"
}
],
次に、アプリケーションコンテナに対して、 splunk-java-agent
コンテナからボリュームを取得するよう指示します。また、アプリケーションが起動時に jar ファイルにアクセスできるように、アプリケーションコンテナが splunk-java-agent
コンテナに依存するように指定します:
"volumesFrom": [
{
"sourceContainer": "splunk-java-agent",
"readOnly": false
}
],
"dependsOn": [
{
"containerName": "splunk-java-agent",
"condition": "START"
}
],