デーモン戦略を使用してデプロイする - Amazon CloudWatch

デーモン戦略を使用してデプロイする

ステップ 1: アカウントで Application Signals を有効にする

このアカウントで Application Signals をまだ有効にしていない場合は、サービスの検出に必要なアクセス権限を Application Signals に付与する必要があります。このためには、次の操作を行います。この操作はアカウントごとに 1 回のみ必要です。

特定のアプリケーション向けに Application Signals を有効にするには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで [Services (サービス)] を選択します。

  3. [サービスの検出を開始] を選択します。

  4. チェックボックスを選択し、[サービスの検出を開始] を選択します。

    このステップをアカウントで初めて完了すると、[AWSServiceRoleForCloudWatchApplicationSignals] サービスリンクロールが作成されます。このロールによって、Application Signals に次のアクセス権限が付与されます。

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    このロールの詳細については、「CloudWatch Application Signals のサービスリンクロールのアクセス許可」を参照してください。

ステップ 2: IAM ロールを作成する

IAM ロールを作成する必要があります。このロールが作成済みであっても、アクセス権限の追加が必要となる場合があります。

  • ECS タスクロール – コンテナは、このロールを使用して実行します。アクセス権限では、アプリケーションに必要な権限の他に、CloudWatchAgentServerPolicy を指定する必要があります。

IAM ロールの作成についての詳細は、「IAM ロールの作成」を参照してください。

ステップ 3: CloudWatch エージェント設定を準備する

最初に、Application Signals を有効にしてエージェント設定を準備します。これを行うには、/tmp/ecs-cwagent.json という名前のローカルファイルを作成します。

{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }

次に、この設定を SSM Parameter Store にアップロードします。これを行うには、次のコマンドを入力します。ファイル内の $REGION を実際のリージョン名に置き換えます。

aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "$REGION"

ステップ 4: CloudWatch エージェントデーモンサービスをデプロイする

次のタスク定義を作成し、アプリケーションクラスターにデプロイします。$REGION は実際のリージョン名に置き換えてください。$TASK_ROLE_ARN$EXECUTION_ROLE_ARN を、ステップ 2: IAM ロールを作成する で準備した IAM ロールに置き換えます。また、$IMAGE を Amazon Elastic Container Registry にある最新の CloudWatch コンテナイメージへのパスに置き換えます。詳細については、Amazon ECR で「cloudwatch-agent」を参照してください。

注記

デーモンサービスはホスト上の 2 つのポートを公開します。4316 はメトリクスとトレースを受信するためのエンドポイントとして使用され、2000 は CloudWatch トレースサンプラーエンドポイントとして使用されます。この設定により、エージェントはホストで実行されているすべてのアプリケーションタスクからテレメトリデータを収集して送信できます。競合を避けるために、これらのポートがホスト上の他のサービスで使用されていないことを確認してください。

{ "family": "ecs-cwagent-daemon", "taskRoleArn": "$TASK_ROLE_ARN", "executionRoleArn": "$EXECUTION_ROLE_ARN", "networkMode": "bridge", "containerDefinitions": [ { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "portMappings": [ { "containerPort": 4316, "hostPort": 4316 }, { "containerPort": 2000, "hostPort": 2000 } ], "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "128", "memory": "64" }

ステップ 5: アプリケーションを計測する

次のステップは、Application Signals のアプリケーションを計測することです。

Java
CloudWatch エージェントを使用して Amazon ECS で稼働するアプリケーションを計測するには
  1. 最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. アプリケーションのタスク定義に新規コンテナ init を追加します。$IMAGE は、AWS Distro for OpenTelemetry Amazon ECR イメージリポジトリにある最新イメージに置き換えてください。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "/javaagent.jar", "/otel-auto-instrumentation/javaagent.jar" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
  3. 次の環境変数をアプリケーションコンテナに追加します。Java の場合、AWS Distro for OpenTelemetry 自動計装エージェントのバージョン 1.32.2 以降を使用している必要があります。

    環境変数 Application Signals を有効にする設定

    OTEL_RESOURCE_ATTRIBUTES

    次の情報をキーと値のペアとして指定します。

    • サービス名を設定するには、service.name を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService (デフォルト値) が使用されます。

    • アプリケーションの稼働環境を設定するには、deployment.environment を使用します。これは、アプリケーションの [ホスト元] 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、デフォルト値の generic:default が使用されます。

    この属性キーは Application Signals にのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。

    (オプション) Application Signals のログ相関を有効にするには、追加で環境変数 aws.log.group.names にアプリケーションログのロググループ名を設定します。これにより、アプリケーションが生成したトレースとメトリクスをこのロググループ内の該当するログエントリと関連付けることができます。この変数では、$YOUR_APPLICATION_LOG_GROUP をアプリケーションのロググループ名に置き換えます。複数のロググループがある場合は、アンパサンド (&) を使用して、次の例のようにそれらを分離できます: aws.log.group.names=log-group-1&log-group-2。ログ相関のメトリクスを有効にするには、この現在の環境変数を設定するだけで十分です。詳細については、「ログ相関のメトリクスを有効にする」を参照してください。ログ相関のトレースを有効にするには、アプリケーションのログ記録設定も変更する必要があります。詳細については、「ログ相関のトレースを有効にする」を参照してください。

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    true に設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。

    OTEL_METRICS_EXPORTER

    他のメトリクスエクスポーターを無効にするには none に設定します。

    OTEL_LOGS_EXPORTER

    他のログエクスポーターを無効にするには none に設定します。

    OTEL_EXPORTER_OTLP_PROTOCOL

    http/protobuf に設定すると、HTTP を使用してメトリクスとトレースを Application Signals に送信できます。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    CloudWatch デーモンコンテナにメトリクスを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/metrics に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/metrics に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    CloudWatch デーモンコンテナにトレースを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/traces に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/traces に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_TRACES_SAMPLER

    xray に設定すると、X-Ray をトレースの見本として設定できます。

    OTEL_PROPAGATORS

    xray をプロパゲーターの 1 つとして設定します。

    JAVA_TOOL_OPTIONS

    " -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" に設定すると、AWS_ADOT_JAVA_INSTRUMENTATION_PATH を AWS Distro for OpenTelemetry Java 自動計測エージェントが保存されているパスに置き換えることができます。例えば、/otel-auto-instrumentation/javaagent.jar

  4. この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation をマウントします。メトリクスやトレースとのログ相関を有効にする必要がない場合は、Java アプリケーションに次の例を使用します。ログ相関を有効にする場合は、代わりに次のステップを参照してください。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "JAVA_TOOL_OPTIONS", "value": " -javaagent:/otel-auto-instrumentation/javaagent.jar" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
Python

Python アプリケーションの Application Signals を有効にする前に、以下の考慮事項に注意してください。

  • コンテナ化されたアプリケーションの一部は、PYTHONPATH 環境変数がないことが原因でアプリケーションが起動しなくなることがあります。これを解決するには、PYTHONPATH 環境変数をアプリケーションの作業ディレクトリの場所に設定します。これは OpenTelemetry の自動計測に関する既知の問題によるものです。この問題の詳細については、「Python autoinstrumentation setting of PYTHONPATH is not compliant」を参照してください。

  • Django アプリケーションには、OpenTelemetry Python ドキュメントで概説されている追加の必須設定があります。

    • --noreload フラグを使用すると、自動リロードを防ぐことができます。

    • Django アプリケーションの settings.py ファイルの場所に DJANGO_SETTINGS_MODULE 環境変数を設定します。これにより、OpenTelemetry がユーザーの Django 設定に正しくアクセスして統合できるようになります。

  • Python アプリケーションに WSGI サーバーを使用している場合は、このセクションの次のステップに加えて、「WSGI サーバーを使用する Python アプリケーションに関する Application Signals データがない」の情報を参照して Application Signals が正しく動作するようにしてください。

CloudWatch エージェントを使用して Amazon ECS で稼働する Python アプリケーションを計測するには
  1. 最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
  2. アプリケーションのタスク定義に新規コンテナ init を追加します。$IMAGE は、AWS Distro for OpenTelemetry Amazon ECR イメージリポジトリにある最新イメージに置き換えてください。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-python" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  3. 次の環境変数をアプリケーションコンテナに追加します。

    環境変数 Application Signals を有効にする設定

    OTEL_RESOURCE_ATTRIBUTES

    次の情報をキーと値のペアとして指定します。

    • サービス名を設定するには、service.name を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService (デフォルト値) が使用されます。

    • アプリケーションの稼働環境を設定するには、deployment.environment を使用します。これは、アプリケーションの [ホスト元] 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、デフォルト値の generic:default が使用されます。

    この属性キーは Application Signals にのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。

    (オプション) Application Signals のログ相関を有効にするには、追加で環境変数 aws.log.group.names にアプリケーションログのロググループ名を設定します。これにより、アプリケーションが生成したトレースとメトリクスをこのロググループ内の該当するログエントリと関連付けることができます。この変数では、$YOUR_APPLICATION_LOG_GROUP をアプリケーションのロググループ名に置き換えます。複数のロググループがある場合は、アンパサンド (&) を使用して、次の例のようにそれらを分離できます: aws.log.group.names=log-group-1&log-group-2。ログ相関のメトリクスを有効にするには、この現在の環境変数を設定するだけで十分です。詳細については、「ログ相関のメトリクスを有効にする」を参照してください。ログ相関のトレースを有効にするには、アプリケーションのログ記録設定も変更する必要があります。詳細については、「ログ相関のトレースを有効にする」を参照してください。

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    true に設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。

    OTEL_METRICS_EXPORTER

    他のメトリクスエクスポーターを無効にするには none に設定します。

    OTEL_EXPORTER_OTLP_PROTOCOL

    HTTP を使用して CloudWatch にメトリクスとトレースを送信するには、http/protobuf に設定します。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    CloudWatch デーモンコンテナにメトリクスを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/metrics に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/metrics に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    CloudWatch デーモンコンテナにトレースを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/traces に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/traces に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_TRACES_SAMPLER

    xray に設定すると、X-Ray をトレースの見本として設定できます。

    OTEL_TRACES_SAMPLER_ARG

    トレースサンプラーエンドポイントを設定します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:2000 に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:2000 に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_PROPAGATORS

    プロパゲーターの 1 つとして xray を追加します。

    OTEL_PYTHON_DISTRO

    ADOT Python 計測を使用するには、aws_distro に設定します。

    OTEL_PYTHON_CONFIGURATOR

    ADOT Python コンフィギュレーションを使用するには、aws_configuration に設定します。

    PYTHONPATH

    $APP_PATH をコンテナ内のアプリケーションの作業ディレクトリの場所に置き換えます。これは Python インタープリターがアプリケーションモジュールを見つけるために必要です。

    DJANGO_SETTINGS_MODULE

    Django アプリケーションでのみ必要です。これは Django アプリケーションの settings.py ファイルの場所に設定してください。$PATH_TO_SETTINGS を置換します。

  4. この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation-python をマウントします。メトリクスやトレースとのログ相関を有効にする必要がない場合は、Python アプリケーションに次の例を使用します。ログ相関を有効にする場合は、代わりに次のステップを参照してください。

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  5. (オプション) ログ相関を有効にするには、ボリュームをマウントする前に次の手順を実行します。OTEL_RESOURCE_ATTRIBUTES で、アプリケーションのロググループに追加の環境変数 aws.log.group.names を設定します。これにより、アプリケーションが生成したトレースとメトリクスをこれらのロググループ内の該当するログエントリと関連付けることができます。この変数では、$YOUR_APPLICATION_LOG_GROUP をアプリケーションのロググループ名に置き換えます。複数のロググループがある場合は、アンパサンド (&) を使用して、次の例のようにそれらを分離できます: aws.log.group.names=log-group-1&log-group-2。ログ相関のメトリクスを有効にするには、この現在の環境変数を設定するだけで十分です。詳細については、「ログ相関のメトリクスを有効にする」を参照してください。ログ相関のトレースを有効にするには、アプリケーションのログ記録設定も変更する必要があります。詳細については、「ログ相関のトレースを有効にする」を参照してください。

    次に例を示します。ログ相関を有効にするには、この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation-python をマウントするときに、この例を使用します。

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
.NET
CloudWatch エージェントを使用して Amazon ECS で稼働するアプリケーションを計測するには
  1. 最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. アプリケーションのタスク定義に新規コンテナ init を追加します。$IMAGE は、AWS Distro for OpenTelemetry Amazon ECR イメージリポジトリにある最新イメージに置き換えてください。

    Linux コンテナインスタンスの場合は、以下を使用します。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }

    Windows Server コンテナインスタンスの場合は、以下を使用します。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "CMD", "/c", "xcopy", "/e", "C:\\autoinstrumentation\\*", "C:\\otel-auto-instrumentation", "&&", "icacls", "C:\\otel-auto-instrumentation", "/grant", "*S-1-1-0:R", "/T" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ] }
  3. アプリケーションコンテナが起動する前にコンテナが必ず終了するよう、init コンテナに依存関係を追加します。

    "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
  4. 次の環境変数をアプリケーションコンテナに追加します。.NET の場合、AWS Distro for OpenTelemetry 自動計装エージェントのバージョン 1.1.0 以降を使用している必要があります。

    環境変数 Application Signals を有効にする設定

    OTEL_RESOURCE_ATTRIBUTES

    次の情報をキーと値のペアとして指定します。

    • サービス名を設定するには、service.name を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService (デフォルト値) が使用されます。

    • アプリケーションの稼働環境を設定するには、deployment.environment を使用します。これは、アプリケーションの [ホスト元] 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、デフォルト値の generic:default が使用されます。

    この属性キーは Application Signals にのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    true に設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。

    OTEL_METRICS_EXPORTER

    他のメトリクスエクスポーターを無効にするには none に設定します。

    OTEL_LOGS_EXPORTER

    他のログエクスポーターを無効にするには none に設定します。

    OTEL_EXPORTER_OTLP_PROTOCOL

    http/protobuf に設定すると、HTTP を使用してメトリクスとトレースを Application Signals に送信できます。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    CloudWatch デーモンコンテナにメトリクスを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/metrics に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/metrics に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_EXPORTER_OTLP_ENDPOINT

    CloudWatch デーモンコンテナにトレースを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316 に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316 に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    CloudWatch デーモンコンテナにトレースを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/traces に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/traces に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_TRACES_SAMPLER_ARG

    トレースサンプラーエンドポイントを設定します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:2000 に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:2000 に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_DOTNET_AUTO_HOME

    ADOT .NET 自動計装のインストール場所に設定します。

    OTEL_DOTNET_AUTO_PLUGINS

    Application Signals プラグインを有効にするには、AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation に設定します。

    CORECLR_ENABLE_PROFILING

    プロファイラーを有効にするには、1 に設定します。

    CORECLR_PROFILER

    プロファイラーの CLSID を {918728DD-259F-4A6A-AC2B-B85E1B658318} に設定します。

    CORECLR_PROFILER_PATH

    これをプロファイラーのパスに設定します。

    Linux では、${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so に設定します。

    Windows Server では、${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll に設定します。

    DOTNET_ADDITIONAL_DEPS

    これを ${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps のフォルダパスに設定します。

    DOTNET_SHARED_STORE

    これを ${OTEL_DOTNET_AUTO_HOME}/store のフォルダパスに設定します。

    DOTNET_STARTUP_HOOKS

    これをマネージドアセンブリ ${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll のパスに設定し、メインアプリケーションのエントリポイントの前に実行します。

  5. この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation をマウントします。Linux の場合は、以下を使用します。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "/otel-auto-instrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "/otel-auto-instrumentation/AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "/otel-auto-instrumentation/store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "/otel-auto-instrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "/otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

    Windows Server の場合は、以下を使用します。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "C:\\otel-auto-instrumentation\\win-x64\\OpenTelemetry.AutoInstrumentation.Native.dll" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "C:\\otel-auto-instrumentation\\AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "C:\\otel-auto-instrumentation\\store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "C:\\otel-auto-instrumentation\\net\\OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "C:\\otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
Node.js
注記

ESM を使用する Node.js アプリケーションの Application Signals を有効にする場合は、以下の手順を開始する前に、「Setting up a Node.js application with the ESM module format」を参照してください。

CloudWatch エージェントを使用して Amazon ECS で稼働するアプリケーションを計測するには
  1. 最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
  2. アプリケーションのタスク定義に新規コンテナ init を追加します。$IMAGE は、AWS Distro for OpenTelemetry Amazon ECR イメージリポジトリにある最新イメージに置き換えてください。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-node" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], }
  3. 次の環境変数をアプリケーションコンテナに追加します。

    環境変数 Application Signals を有効にする設定

    OTEL_RESOURCE_ATTRIBUTES

    次の情報をキーと値のペアとして指定します。

    • サービス名を設定するには、service.name を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService (デフォルト値) が使用されます。

    • アプリケーションの稼働環境を設定するには、deployment.environment を使用します。これは、アプリケーションの [ホスト元] 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、デフォルト値の generic:default が使用されます。

    この属性キーは Application Signals にのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。

    (オプション) Application Signals のログ相関を有効にするには、追加で環境変数 aws.log.group.names にアプリケーションログのロググループ名を設定します。これにより、アプリケーションが生成したトレースとメトリクスをこのロググループ内の該当するログエントリと関連付けることができます。この変数では、$YOUR_APPLICATION_LOG_GROUP をアプリケーションのロググループ名に置き換えます。複数のロググループがある場合は、アンパサンド (&) を使用して、次の例のようにそれらを分離できます: aws.log.group.names=log-group-1&log-group-2。ログ相関のメトリクスを有効にするには、この現在の環境変数を設定するだけで十分です。詳細については、「ログ相関のメトリクスを有効にする」を参照してください。ログ相関のトレースを有効にするには、アプリケーションのログ記録設定も変更する必要があります。詳細については、「ログ相関のトレースを有効にする」を参照してください。

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    true に設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。

    OTEL_METRICS_EXPORTER

    他のメトリクスエクスポーターを無効にするには none に設定します。

    OTEL_LOGS_EXPORTER

    他のログエクスポーターを無効にするには none に設定します。

    OTEL_EXPORTER_OTLP_PROTOCOL

    http/protobuf に設定すると、OTLP/HTTP および protobuf を使用してメトリクスとトレースを Application Signals に送信できます。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    CloudWatch デーモンコンテナにメトリクスを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/metrics に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/metrics に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    CloudWatch デーモンコンテナにトレースを送信します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:4316/v1/traces に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:4316/v1/traces に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_TRACES_SAMPLER

    xray に設定すると、X-Ray をトレースの見本として設定できます。

    OTEL_TRACES_SAMPLER_ARG

    トレースサンプラーエンドポイントを設定します。

    • host モードで実行されているアプリケーションの場合は、これを http://localhost:2000 に設定します。

    • bridge モードまたは awsvpc モードで実行されているアプリケーションの場合、これを http://CW_CONTAINER_IP:2000 に設定します。CW_CONTAINER_IP は EC2 コンテナインスタンスのプライベート IP アドレスです。このアドレスは、インスタンスメタデータサービス (IMDS) から取得できます。

    OTEL_PROPAGATORS

    xray をプロパゲーターの 1 つとして設定します。

    NODE_OPTIONS

    --require AWS_ADOT_NODE_INSTRUMENTATION_PATH に設定します。AWS_ADOT_NODE_INSTRUMENTATION_PATH を AWS Distro for OpenTelemetry Node.js 自動計測が保存されているパスに置き換えます。例えば、/otel-auto-instrumentation-node/autoinstrumentation.js

  4. この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation-node をマウントします。メトリクスやトレースとのログ相関を有効にする必要がない場合は、Node.js アプリケーションに次の例を使用します。ログ相関を有効にする場合は、代わりに次のステップを参照してください。

    アプリケーションコンテナの場合、アプリケーションコンテナが起動する前にコンテナが必ず終了するよう、init コンテナに依存関係を追加します。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
  5. (オプション) ログ相関を有効にするには、ボリュームをマウントする前に次の手順を実行します。OTEL_RESOURCE_ATTRIBUTES で、アプリケーションのロググループに追加の環境変数 aws.log.group.names を設定します。これにより、アプリケーションが生成したトレースとメトリクスをこれらのロググループ内の該当するログエントリと関連付けることができます。この変数では、$YOUR_APPLICATION_LOG_GROUP をアプリケーションのロググループ名に置き換えます。複数のロググループがある場合は、アンパサンド (&) を使用して、次の例のようにそれらを分離できます: aws.log.group.names=log-group-1&log-group-2。ログ相関のメトリクスを有効にするには、この現在の環境変数を設定するだけで十分です。詳細については、「ログ相関のメトリクスを有効にする」を参照してください。ログ相関のトレースを有効にするには、アプリケーションのログ記録設定も変更する必要があります。詳細については、「ログ相関のトレースを有効にする」を参照してください。

    次に例を示します。この手順のステップ 1 で定義したボリューム opentelemetry-auto-instrumentation をマウントするときにログ相関を有効にするには、この例を使用します。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

ESM モジュール形式を使用する Node.js アプリケーションをセットアップする

ESM モジュール形式を使用する Node.js アプリケーションには限定的なサポートが提供されます。詳細については、「EMS を使用する ENode.js における既知の制限事項」を参照してください。

ESM モジュール形式の場合、init コンテナを使用して Node.js インストルメンテーション SDK を挿入することは適用されません。ESM を使用する Node.js の Application Signals を有効にするには、前の手順のステップ 1 とステップ 2 をスキップし、代わりに次の手順を実行します。

ESM を使用する Node.js アプリケーションの Application Signals を有効にするには
  1. 自動計測のために、関連する依存関係を Node.js アプリケーションにインストールします。

    npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
  2. 前の手順のステップ 4 とステップ 5 で、ボリューム opentelemetry-auto-instrumentation-node のマウントを削除します。

    "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ]

    ノードのオプションを次のものに置き換えます。

    { "name": "NODE_OPTIONS", "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs" }

ステップ 6: アプリケーションをデプロイする

タスク定義のリビジョンを新規作成し、アプリケーションクラスターにデプロイします。新規作成したタスクに次の 2 つのコンテナが表示されます。

  • init- Application Signals を初期化するために必要なコンテナ

  • my-app– これは、ドキュメントのアプリケーションコンテナの例です。実際のワークロードでは、この特定のコンテナが存在しないか、独自のサービスコンテナに置き換えられる可能性があります。