サイドカー戦略を使用してデプロイする
ステップ 1: アカウントで Application Signals を有効にする
まず、アカウントで Application Signals を有効にする必要があります。まだ有効にしていない場合は、「アカウントで 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 エージェントを使用してアプリケーションを計測する
次のステップは、CloudWatch Application Signals のアプリケーションを計測することです。
- Java
-
CloudWatch エージェントを使用して Amazon ECS で稼働するアプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]CloudWatch エージェントのサイドカー定義を追加します。これを行うには、
ecs-cwagentという新規コンテナをアプリケーションのタスク定義に追加します。$REGIONは実際のリージョン名に置き換えてください。また、$IMAGEを Amazon Elastic Container Registry にある最新の CloudWatch コンテナイメージへのパスに置き換えます。詳細については、Amazon ECR で「cloudwatch-agent」を参照してください。 代わりにデーモン戦略で CloudWatch エージェントを有効にする場合は、「デーモン戦略を使用してデプロイする」の手順を参照してください。
{ "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "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" } } }アプリケーションのタスク定義に新規コンテナ
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 } ] }initコンテナに依存関係を追加して、アプリケーションコンテナが起動する前にこのコンテナが必ず終了するようにします。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]次の環境変数をアプリケーションコンテナに追加します。Java の場合、AWS Distro for OpenTelemetry 自動計装エージェント
のバージョン 1.32.2 以降を使用している必要があります。 環境変数 Application Signals を有効にする設定 OTEL_RESOURCE_ATTRIBUTES次の情報をキーと値のペアとして指定します。
サービス名を設定するには、
service.nameを使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService(デフォルト値) が使用されます。deployment.environmentパラメータは、アプリケーションのランタイム環境を定義し、CloudWatch の Amazon ECS アプリケーションメトリクスのEnvironmentディメンションを制御します。指定しない場合、CloudWatch エージェントは自動的に Amazon ECS クラスター名を使用します。
この属性キーは 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_ENABLEDtrueに設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。OTEL_METRICS_EXPORTER他のメトリクスエクスポーターを無効にするには
noneに設定します。OTEL_LOGS_EXPORTER他のログエクスポーターを無効にするには
noneに設定します。OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobufに設定すると、HTTP を使用してメトリクスとトレースを Application Signals に送信できます。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTCloudWatch サイドカーにメトリクスを送信するには、
http://localhost:4316/v1/metricsに設定します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINTトレースを CloudWatch サイドカーに送信するには、
http://localhost:4316/v1/tracesに設定します。OTEL_TRACES_SAMPLERxrayに設定すると、X-Ray をトレースの見本として設定できます。OTEL_PROPAGATORSxrayをプロパゲーターの 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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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 アプリケーションに Gunicorn、uWSGI、Uvicorn などのプリフォークサーバー (WSGI または ASGI) を使用している場合は、このセクションの以下の手順に加え、「プリフォークサーバー (WSGI または ASGI) を使用する Python アプリケーションに関する Application Signals データがない」の情報を参照して Application Signals が正しく動作するようにしてください。
CloudWatch エージェントを使用して Amazon ECS で稼働する Python アプリケーションを計測するには
最初に、バインドマウントを指定します。次のステップでは、このボリュームを使用してコンテナ間でファイルを共有します。このバインドマウントは、そのステップの後半で使用します。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]CloudWatch エージェントのサイドカー定義を追加します。これを行うには、
ecs-cwagentという新規コンテナをアプリケーションのタスク定義に追加します。$REGIONは実際のリージョン名に置き換えてください。また、$IMAGEを Amazon Elastic Container Registry にある最新の CloudWatch コンテナイメージへのパスに置き換えます。詳細については、Amazon ECR で「cloudwatch-agent」を参照してください。 代わりにデーモン戦略で CloudWatch エージェントを有効にする場合は、「デーモン戦略を使用してデプロイする」の手順を参照してください。
{ "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "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" } } }アプリケーションのタスク定義に新規コンテナ
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 } ] }initコンテナに依存関係を追加して、アプリケーションコンテナが起動する前にこのコンテナが必ず終了するようにします。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]次の環境変数をアプリケーションコンテナに追加します。
環境変数 Application Signals を有効にする設定 OTEL_RESOURCE_ATTRIBUTES次の情報をキーと値のペアとして指定します。
サービス名を設定するには、
service.nameを使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService(デフォルト値) が使用されます。deployment.environmentパラメータは、アプリケーションのランタイム環境を定義し、CloudWatch の Amazon ECS アプリケーションメトリクスのEnvironmentディメンションを制御します。指定しない場合、CloudWatch エージェントは自動的に Amazon ECS クラスター名を使用します。
この属性キーは 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_ENABLEDtrueに設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。OTEL_METRICS_EXPORTER他のメトリクスエクスポーターを無効にするには
noneに設定します。OTEL_EXPORTER_OTLP_PROTOCOLHTTP を使用して CloudWatch にメトリクスとトレースを送信するには、
http/protobufに設定します。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTCloudWatch サイドカーにメトリクスを送信するには、
http://127.0.0.1:4316/v1/metricsに設定します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINTトレースを CloudWatch サイドカーに送信するには、
http://127.0.0.1:4316/v1/tracesに設定します。OTEL_TRACES_SAMPLERxrayに設定すると、X-Ray をトレースの見本として設定できます。OTEL_PROPAGATORSプロパゲーターの 1 つとして
xrayを追加します。OTEL_PYTHON_DISTROADOT Python 計測を使用するには、
aws_distroに設定します。OTEL_PYTHON_CONFIGURATORADOT Python コンフィギュレーションを使用するには、
aws_configuratorに設定します。PYTHONPATH$APP_PATHをコンテナ内のアプリケーションの作業ディレクトリの場所に置き換えます。これは Python インタープリターがアプリケーションモジュールを見つけるために必要です。DJANGO_SETTINGS_MODULEDjango アプリケーションでのみ必要です。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://localhost: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://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost: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://localhost: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://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost: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" } ]CloudWatch エージェントのサイドカー定義を追加します。これを行うには、
ecs-cwagentという新規コンテナをアプリケーションのタスク定義に追加します。$REGIONは実際のリージョン名に置き換えてください。また、$IMAGEを Amazon Elastic Container Registry にある最新の CloudWatch コンテナイメージへのパスに置き換えます。詳細については、Amazon ECR で「cloudwatch-agent」を参照してください。 代わりにデーモン戦略で CloudWatch エージェントを有効にする場合は、「デーモン戦略を使用してデプロイする」の手順を参照してください。
{ "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "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" } } }アプリケーションのタスク定義に新規コンテナ
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パラメータは、アプリケーションのランタイム環境を定義し、CloudWatch の Amazon ECS アプリケーションメトリクスのEnvironmentディメンションを制御します。指定しない場合、CloudWatch エージェントは自動的に Amazon ECS クラスター名を使用します。
この属性キーは Application Signals にのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。
OTEL_AWS_APPLICATION_SIGNALS_ENABLEDtrueに設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。OTEL_METRICS_EXPORTER他のメトリクスエクスポーターを無効にするには
noneに設定します。OTEL_LOGS_EXPORTER他のログエクスポーターを無効にするには
noneに設定します。OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobufに設定すると、HTTP を使用してメトリクスとトレースを Application Signals に送信できます。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTCloudWatch サイドカーにメトリクスを送信するには、
http://localhost:4316/v1/metricsに設定します。OTEL_EXPORTER_OTLP_ENDPOINTトレースを CloudWatch サイドカーに送信するには、
http://localhost:4316/に設定します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINTトレースを CloudWatch サイドカーに送信するには、
http://localhost:4316/v1/tracesに設定します。OTEL_DOTNET_AUTO_HOMEADOT .NET 自動計装のインストール場所に設定します。
OTEL_DOTNET_AUTO_PLUGINSApplication 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-dotnet-service-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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }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=dotnet-service-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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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" } ]CloudWatch エージェントのサイドカー定義を追加します。これを行うには、
ecs-cwagentという新規コンテナをアプリケーションのタスク定義に追加します。$REGIONは実際のリージョン名に置き換えてください。また、$IMAGEを Amazon Elastic Container Registry にある最新の CloudWatch コンテナイメージへのパスに置き換えます。詳細については、Amazon ECR で「cloudwatch-agent」を参照してください。 代わりにデーモン戦略で CloudWatch エージェントを有効にする場合は、「デーモン戦略を使用してデプロイする」の手順を参照してください。
{ "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "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" } } }アプリケーションのタスク定義に新規コンテナ
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 } ], }initコンテナに依存関係を追加して、アプリケーションコンテナが起動する前にこのコンテナが必ず終了するようにします。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]次の環境変数をアプリケーションコンテナに追加します。
環境変数 Application Signals を有効にする設定 OTEL_RESOURCE_ATTRIBUTES次の情報をキーと値のペアとして指定します。
サービス名を設定するには、
service.nameを使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、UnknownService(デフォルト値) が使用されます。deployment.environmentパラメータは、アプリケーションのランタイム環境を定義し、CloudWatch の Amazon ECS アプリケーションメトリクスのEnvironmentディメンションを制御します。指定しない場合、CloudWatch エージェントは自動的に Amazon ECS クラスター名を使用します。
この属性キーは 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_ENABLEDtrueに設定すると、コンテナが X-Ray トレースと CloudWatch メトリクスを Application Signals に送信し始めます。OTEL_METRICS_EXPORTER他のメトリクスエクスポーターを無効にするには
noneに設定します。OTEL_LOGS_EXPORTER他のログエクスポーターを無効にするには
noneに設定します。OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobufに設定すると、OTLP/HTTP および protobuf を使用してメトリクスとトレースを Application Signals に送信できます。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTCloudWatch サイドカーにメトリクスを送信するには、
http://localhost:4316/v1/metricsに設定します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINTトレースを CloudWatch サイドカーに送信するには、
http://localhost:4316/v1/tracesに設定します。OTEL_TRACES_SAMPLERxrayに設定すると、X-Ray をトレースの見本として設定できます。OTEL_PROPAGATORSxrayをプロパゲーターの 1 つとして設定します。NODE_OPTIONS--requireに設定します。AWS_ADOT_NODE_INSTRUMENTATION_PATHAWS_ADOT_NODE_INSTRUMENTATION_PATHを AWS Distro for OpenTelemetry Node.js 自動計測が保存されているパスに置き換えます。例:/otel-auto-instrumentation-node/autoinstrumentation.jsこの手順のステップ 1 で定義したボリューム
opentelemetry-auto-instrumentationをマウントします。メトリクスやトレースとのログ相関を有効にする必要がない場合は、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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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 とステップ 3 をスキップし、代わりに次の手順を実行します。ESM を使用する Node.js アプリケーションの Application Signals を有効にするには
自動計測のために、関連する依存関係を Node.js アプリケーションにインストールします。
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0前の手順のステップ 5 とステップ 6 で、ボリューム
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" }
ステップ 5: アプリケーションをデプロイする
タスク定義のリビジョンを新規作成し、アプリケーションクラスターにデプロイします。新規作成したタスクに次の 3 つのコンテナが表示されます。
init- Application Signals を初期化するために必要なコンテナ。ecs-cwagent– CloudWatch エージェントを実行するコンテナ– これは、ドキュメントのアプリケーションコンテナの例です。実際のワークロードでは、この特定のコンテナが存在しないか、独自のサービスコンテナに置き換えられる可能性があります。my-app
(オプション) ステップ 6: アプリケーションの状態をモニタリングする
Amazon ECS でアプリケーションを有効にすると、アプリケーションの状態をモニタリングできます。詳細については、「Application Signals を使用したアプリケーションの運用状態のモニタリング」を参照してください。