Docs » Splunk Distribution of the OpenTelemetry Collector の利用開始 » Other Collector deployment tools and options: ECS/EC2, Fargate, Nomad, PCF » シナリオ:ECS FargateのOpenTelemetryでJavaサービスを監視する

シナリオ:ECS FargateのOpenTelemetryでJavaサービスを監視する 🔗

注釈

AWS ECS Fargate環境にCollectorをデプロイする方法については、Amazon ECS Fargate でCollectorをデプロイする を参照してください。

ECS Fargateで動作するJavaサービスをOpenTelemetryでインストルメンテーションするには、以下のいずれかの方法でsplunk-otel-javaagent.jarファイルをアプリケーションコンテナ上で利用可能にします:

  1. アプリケーションコンテナの Dockerfile を更新して、splunk-otel-javaagent.jar ファイルを明示的にダウンロードし、そのコンテナイメージに組み込むようにします。オプション 1: splunk-otel-javaagent.jar をアプリケーションイメージに組み込む を参照してください。

  2. 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"
  }
  ],

This page was last updated on 2023年12月15日.