デーモン戦略を使用してデプロイする
ステップ 1: アカウントで Application Signals を有効にする
このアカウントで Application Signals をまだ有効にしていない場合は、サービスの検出に必要なアクセス権限を Application Signals に付与する必要があります。このためには、次の操作を行います。この操作はアカウントごとに 1 回のみ必要です。
特定のアプリケーション向けに Application Signals を有効にするには
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 ナビゲーションペインで [Services (サービス)] を選択します。
[サービスの検出を開始] を選択します。
チェックボックスを選択し、[サービスの検出を開始] を選択します。
このステップをアカウントで初めて完了すると、[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 で稼働するアプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
アプリケーションのタスク定義に新規コンテナ
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 } ] }次の環境変数をアプリケーションコンテナに追加します。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
この手順のステップ 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 アプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
アプリケーションのタスク定義に新規コンテナ
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 } ] }
次の環境変数をアプリケーションコンテナに追加します。
環境変数 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
:2000CW_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
を置換します。この手順のステップ 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 } ] }(オプション) ログ相関を有効にするには、ボリュームをマウントする前に次の手順を実行します。
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 で稼働するアプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
アプリケーションのタスク定義に新規コンテナ
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 } ] }アプリケーションコンテナが起動する前にコンテナが必ず終了するよう、
init
コンテナに依存関係を追加します。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
次の環境変数をアプリケーションコンテナに追加します。.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
:2000CW_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
のパスに設定し、メインアプリケーションのエントリポイントの前に実行します。この手順のステップ 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 で稼働するアプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
アプリケーションのタスク定義に新規コンテナ
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 } ], }次の環境変数をアプリケーションコンテナに追加します。
環境変数 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
:2000CW_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
この手順のステップ 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" } ] }(オプション) ログ相関を有効にするには、ボリュームをマウントする前に次の手順を実行します。
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 を有効にするには
自動計測のために、関連する依存関係を Node.js アプリケーションにインストールします。
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
前の手順のステップ 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