

# Amazon EC2 でアプリケーションを有効にする
<a name="CloudWatch-Application-Signals-Enable-EC2Main"></a>

Amazon EC2 で CloudWatch Application Signals を有効にするには、このセクションに記載されているカスタムセットアップの手順を実行します。

アプリケーションを Amazon EC2 で実行する場合は、CloudWatch エージェントと AWS Distro for OpenTelemetry をインストールして設定します。カスタム Application Signals セットアップで有効になったこれらのアーキテクチャでは、サービス名や、サービスが稼働しているホスト名またはクラスター名が Application Signals によって自動検出されません。これらの名前をカスタムセットアップの際に指定する必要があります。ここで指定した名前が Application Signals ダッシュボードに表示されことになります。

このセクションの手順は、Java、Python、および .NET アプリケーションを対象としています。いずれのステップも Amazon EC2 インスタンスでテストしていますが、AWS Distro for OpenTelemetry をサポートする他のアーキテクチャにも適用できるはずです。

**要件**
+ Application Signals のサポートを受けるには、CloudWatch エージェントと AWS Distro for OpenTelemetry エージェントの両方で最新バージョンを使用する必要があります。
+ 対象のインスタンスには AWS CLI がインストールされている必要があります。AWS CLI バージョン 2 をお勧めしますが、バージョン 1 でも問題ありません。AWS CLI のインストールについては、「[AWS CLI の最新バージョンを使用してインストールまたは更新を行う](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」で詳しく確認できます。

**重要**  
Application Signals を有効にするアプリケーションで OpenTelemetry を使用している場合は、Application Signals を有効にする前に「[サポートされているシステム](CloudWatch-Application-Signals-supportmatrix.md)」を参照してください。

## ステップ 1: アカウントで Application Signals を有効にする
<a name="CloudWatch-Application-Signals-EC2-Grant"></a>

まず、アカウントで Application Signals を有効にする必要があります。まだ有効にしていない場合は、「[アカウントで Application Signals を有効にする](CloudWatch-Application-Signals-Enable.md)」を参照してください。

## ステップ 2: CloudWatch エージェントをダウンロードして起動する
<a name="CloudWatch-Application-Signals-Enable-Other-agent"></a>

**Amazon EC2 インスタンスまたはオンプレミスホストで Application Signals を有効にする手順の一環として CloudWatch エージェントをインストールするには**

1. 最新バージョンの CloudWatch エージェントをインスタンスにダウンロードします。インスタンスに CloudWatch エージェントを既にインストールしていても、更新が必要となる場合があります。2023 年 11 月 30 日以降にリリースされたエージェントのバージョンのみ、CloudWatch Application Signals に対応しています。

1. CloudWatch エージェントを起動する前に、その設定を行い、Application Signals を有効化できるようにします。次の例は、EC2 ホストのメトリクスとトレースの両方に対し Application Signals を有効にする CloudWatch エージェント設定を示しています。

   このファイルを Linux システムの `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json` に配置することをお勧めします。

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

1. IAM ポリシー **CloudWatchAgentServerPolicy** を Amazon EC2 インスタンスの IAM ロールにアタッチします。オンプレミスホストのアクセス許可については、「[オンプレミスサーバーのアクセス許可](#Enable-OnPremise-Permissions)」を参照してください。

   1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

   1. **[ロール]** を選択し、Amazon EC2 インスタンスに使用しているロールを検索します。次に、そのロール名を選択します。

   1. **[アクセス権限]** タブで、**[アクセス権限の追加]**、**[ポリシーのアタッチ]** の順に選択します。

   1. **CloudWatchAgentServerPolicy** を検索します。必要に応じて検索ボックスを使用してください。次に、そのポリシーのチェックボックスをオンにして、**[アクセス権限の追加]** を選択します。

1. 次のコマンドを入力して CloudWatch エージェントを起動します。*agent-config-file-path* は CloudWatch エージェント設定ファイルへのパス (`./amazon-cloudwatch-agent.json` など) に置き換えます。例に示すように、`file:` プレフィックスも記述する必要があります。

   ```
   export CONFIG_FILE_PATH=./amazon-cloudwatch-agent.json
   ```

   ```
   sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
   -a fetch-config \
   -m ec2 -s -c file:agent-config-file-path
   ```

### オンプレミスサーバーのアクセス許可
<a name="Enable-OnPremise-Permissions"></a>

オンプレミスホストの場合、お使いのデバイスに AWS 認可を提供する必要があります。

**オンプレミスホストのアクセス許可を設定するには**

1. オンプレミスホストにアクセス許可を付与するために使用する IAM ユーザーを作成します。

   1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

   1. **[ユーザー]**、**[ユーザーの作成]** の順に選択します。

   1. **[ユーザー詳細]** で、**[ユーザー名]** に新しい IAM ユーザーの名前を入力します。これは、ホストの認証に使用される AWS のサインイン名です。その後、**[Next]** (次へ) を選択します。

   1. **[アクセス許可の設定]** ページの **[権限オプション]** で、**[ポリシーを直接アタッチする]** を選択します。

   1. **[アクセス許可ポリシー]** リストから、**CloudWatchAgentServerPolicy** ポリシーを選択して、ユーザーに追加します。次に、**[次へ]** を選択します。

   1. **[確認と作成]** ページで、ユーザー名に問題がなく、**CloudWatchAgentServerPolicy** ポリシーが **[許可の概要]** に含まれていることを確認します。

   1. **ユーザーの作成** を選択します。

1. AWS アクセスキーとシークレットキーを作成して取得します。

   1. IAM コンソールのナビゲーションペインで、**[ユーザー]** を選択し、前のステップで作成したユーザーのユーザー名を選択します。

   1.  ユーザーのページで、**[セキュリティ認証情報]** タブを選択します。次に、**[アクセスキー]** セクションで、**[アクセスキーを作成]** を選択します。

   1. **[アクセスキーの作成ステップ 1]** で、**[コマンドラインインターフェイス (CLI)]** を選択します。

   1. **[アクセスキーの作成ステップ 2]** で、必要に応じてタグを入力して **[次へ]** を選択します。

   1. **[アクセスキーの作成ステップ 3]** で、**[.csv ファイルをダウンロード]** を選択し、.csv ファイルに IAM ユーザーのアクセスキーとシークレットアクセスキーを含めて保存します。この情報は、次のステップで必要になります。

   1. **[Done]** (完了) をクリックします。

1. 次のコマンドを入力して、オンプレミスホストで AWS 認証情報を設定します。*ACCESS\$1KEY\$1ID* と *SECRET\$1ACCESS\$1ID* を、前のステップでダウンロードした .csv ファイルに新しく生成したアクセスキーとシークレットアクセスキーに置き換えます。

   ```
   $ aws configure
   AWS Access Key ID [None]: ACCESS_KEY_ID
   AWS Secret Access Key [None]: SECRET_ACCESS_ID
   Default region name [None]: MY_REGION
   Default output format [None]: json
   ```

## ステップ 3: 計測を設定しアプリケーションを起動する
<a name="CloudWatch-Application-Signals-Enable-Other-instrument"></a>

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

------
#### [ Java ]

**Amazon EC2 インスタンスまたはオンプレミスホストで Application Signals を有効にする手順の一環として Java アプリケーションを計測可能にするには**

1. AWS Distro for OpenTelemetry Java 自動計測エージェントの最新バージョンをダウンロードします。[このリンク](https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar)を使用すると、最新バージョンをダウンロードできます。リリース済みバージョンをすべて確認するには、[aws-otel-java-instrumentation](https://github.com/aws-observability/aws-otel-java-instrumentation/releases) のリリースを参照してください。

1. Application Signals の利点を最適化するには、環境変数によって情報を追加した後にアプリケーションを起動します。この情報は、Application Signals のダッシュボードに表示されます。

   1. `OTEL_RESOURCE_ATTRIBUTES` 変数には、次の情報をキーと値のペアとして指定します。
     + (オプション) サービス名を設定するには、`service.name` を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、`UnknownService` (デフォルト値) が使用されます。
     + (オプション) アプリケーションの稼働環境を設定するには、`deployment.environment` を使用します。これは、アプリケーションの **[ホスト元]** 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、次のいずれかのデフォルトが使用されます。
       + これが Auto Scaling グループに含まれるインスタンスである場合は、`ec2:name-of-Auto-Scaling-group` に設定されます。
       + Auto Scaling グループに含まれていない Amazon EC2 インスタンスである場合は、`ec2:default` に設定されます。
       + これがオンプレミスホストである場合は、`generic:default` に設定されます。

       この環境変数は、Application Signals でのみ使用され、X-Ray トレースのアノテーションと CloudWatch メトリクスのディメンションに変換されます。
     + `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 変数には、トレースのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces` に設定する必要があります。
     + `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT` 変数には、メトリクスのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics` に設定する必要があります。
     + `JAVA_TOOL_OPTIONS` 変数には、AWS Distro for OpenTelemetry Java 自動計測エージェントが保存されているパスを指定します。

       ```
       export JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH"
       ```

       例えば、次のようになります。

       ```
       export AWS_ADOT_JAVA_INSTRUMENTATION_PATH=./aws-opentelemetry-agent.jar
       ```
     + `OTEL_METRICS_EXPORTER` 変数の値は `none` に設定することをお勧めします。これにより、他のメトリクスエクスポーターが無効になり、Application Signals エクスポーターのみ使用されるようになります。
     + `OTEL_AWS_APPLICATION_SIGNALS_ENABLED` を `true` に設定します。これにより、トレースから、Application Signals のメトリクスが生成されます。

1. 前のステップでリストアップした環境変数を使用して、アプリケーションを起動します。起動スクリプトの例を次に示します。
**注記**  
Java の場合、次の設定は AWS Distro for OpenTelemetry 自動計測エージェントのバージョン 1.32.2 以降のみをサポートしています。

   ```
   JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" \
   OTEL_METRICS_EXPORTER=none \
   OTEL_LOGS_EXPORTER=none \
   OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME" \
   java -jar $MY_JAVA_APP.jar
   ```

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

   次に例示したスクリプトを出発点として、ログ相関を容易に有効にできます。

   ```
   JAVA_TOOL_OPTIONS=" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" \
   OTEL_METRICS_EXPORTER=none \
   OTEL_LOGS_EXPORT=none \
   OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   OTEL_RESOURCE_ATTRIBUTES="aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$YOUR_SVC_NAME" \
   java -jar $MY_JAVA_APP.jar
   ```

------
#### [ Python ]

**注記**  
Python アプリケーションに WSGI サーバーを使用している場合は、このセクションの次のステップに加えて、「[WSGI サーバーを使用する Python アプリケーションに関する Application Signals データがない](CloudWatch-Application-Signals-Enable-Troubleshoot.md#Application-Signals-troubleshoot-Python-WSGI)」の情報を参照して Application Signals が正しく動作するようにしてください。

**Amazon EC2 インスタンスで Application Signals を有効にする手順内で、Python アプリケーションを計測可能にするには**

1. AWS Distro for OpenTelemetry Python 自動計測エージェントの最新バージョンをダウンロードします。次の コマンドを使用してインストールします。

   ```
   pip install aws-opentelemetry-distro
   ```

   リリース済みバージョンをすべて確認するには、「[AWS Distro for OpenTelemetry Python instrumentation](https://github.com/aws-observability/aws-otel-python-instrumentation/releases)」を使用します。

1. Application Signals の利点を最適化するには、環境変数によって情報を追加した後にアプリケーションを起動します。この情報は、Application Signals のダッシュボードに表示されます。

   1. `OTEL_RESOURCE_ATTRIBUTES` 変数には、次の情報をキーと値のペアとして指定します。
      + サービス名を設定するには、`service.name` を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、`UnknownService` (デフォルト値) が使用されます。
      + アプリケーションの稼働環境を設定するには、`deployment.environment` を使用します。これは、アプリケーションの **[ホスト元]** 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、次のいずれかのデフォルトが使用されます。
        + これが Auto Scaling グループに含まれるインスタンスである場合は、`ec2:name-of-Auto-Scaling-group` に設定されます。
        + Auto Scaling グループに含まれていない Amazon EC2 インスタンスである場合は、`ec2:default` に設定されます。
        + これがオンプレミスホストである場合は、`generic:default` に設定されます。

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

   1. `OTEL_EXPORTER_OTLP_PROTOCOL` 変数には、テレメトリデータを HTTP 経由で次のステップに記載されている CloudWatch エージェントエンドポイントにエクスポートする `http/protobuf` を指定します。

   1. `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 変数には、トレースのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が HTTP 経由の OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces` に設定する必要があります。

   1. `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT` 変数には、メトリクスのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が HTTP 経由の OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics` に設定する必要があります。

   1. `OTEL_METRICS_EXPORTER` 変数の値は `none` に設定することをお勧めします。これにより、他のメトリクスエクスポーターが無効になり、Application Signals エクスポーターのみ使用されるようになります。

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

1. 前のステップで説明した環境変数を使用してアプリケーションを起動します。起動スクリプトの例を次に示します。
   + `$SVC_NAME` をアプリケーションの名前に置き換えます。これは、Application Signals ダッシュボードにアプリケーション名として表示されます。
   + `$PYTHON_APP` をアプリケーションの場所と名前に置き換えます。

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_LOGS_EXPORTER=none \
   OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   OTEL_PYTHON_DISTRO=aws_distro \
   OTEL_PYTHON_CONFIGURATOR=aws_configurator \
   OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   OTEL_TRACES_SAMPLER=xray \
   OTEL_TRACES_SAMPLER_ARG="endpoint=http://localhost:2000" \
   OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   OTEL_RESOURCE_ATTRIBUTES="service.name=$SVC_NAME" \
   opentelemetry-instrument python $MY_PYTHON_APP.py
   ```

   Python アプリケーションの Application Signals を有効にする前に、以下の考慮事項に注意してください。
   + コンテナ化されたアプリケーションの一部は、`PYTHONPATH` 環境変数がないことが原因でアプリケーションが起動しなくなることがあります。これを解決するには、`PYTHONPATH` 環境変数をアプリケーションの作業ディレクトリの場所に設定します。これは OpenTelemetry の自動計測に関する既知の問題によるものです。この問題の詳細については、「[Python autoinstrumentation setting of PYTHONPATH is not compliant](https://github.com/open-telemetry/opentelemetry-operator/issues/2302)」を参照してください。
   + Django アプリケーションには、[OpenTelemetry Python ドキュメント](https://opentelemetry-python.readthedocs.io/en/latest/examples/django/README.html)で概説されている追加の必須設定があります。
     + `--noreload` フラグを使用すると、自動リロードを防ぐことができます。
     + Django アプリケーションの `settings.py` ファイルの場所に `DJANGO_SETTINGS_MODULE` 環境変数を設定します。これにより、OpenTelemetry がユーザーの Django 設定に正しくアクセスして統合できるようになります。

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

   次に例示したスクリプトを出発点として、ログ相関を容易に有効にできます。

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_LOGS_EXPORTER=none \
   OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   OTEL_PYTHON_DISTRO=aws_distro \
   OTEL_PYTHON_CONFIGURATOR=aws_configurator \
   OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   OTEL_TRACES_SAMPLER=xray \
   OTEL_TRACES_SAMPLER_ARG="endpoint=http://localhost:2000" \
   OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   OTEL_RESOURCE_ATTRIBUTES="aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$YOUR_SVC_NAME" \
   java -jar $MY_PYTHON_APP.jar
   ```

------
#### [ .NET ]

**Amazon EC2 インスタンスまたはオンプレミスホストで Application Signals を有効にする手順の一環として .NET アプリケーションを計装するには**

1. AWS Distro for OpenTelemetry .NET 自動計装パッケージの最新バージョンをダウンロードします。最新バージョンは、[aws-otel-dotnet-instrumentation Releases](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases) でダウンロードできます。

1. Application Signals を有効にするには、以下の環境変数を設定して追加情報を提供してから、アプリケーションを起動します。これらの変数は、.NET アプリケーションを起動する前に、.NET 計装の起動フックを設定する際に必要です。`OTEL_RESOURCE_ATTRIBUTES` 環境変数の `dotnet-service-name` を、選択したサービス名に置き換えます。
   + Linux の例を次に示します。

     ```
     export INSTALL_DIR=OpenTelemetryDistribution
     export CORECLR_ENABLE_PROFILING=1
     export CORECLR_PROFILER={918728DD-259F-4A6A-AC2B-B85E1B658318}
     export CORECLR_PROFILER_PATH=${INSTALL_DIR}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
     export DOTNET_ADDITIONAL_DEPS=${INSTALL_DIR}/AdditionalDeps
     export DOTNET_SHARED_STORE=${INSTALL_DIR}/store
     export DOTNET_STARTUP_HOOKS=${INSTALL_DIR}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
     export OTEL_DOTNET_AUTO_HOME=${INSTALL_DIR}
     
     export OTEL_DOTNET_AUTO_PLUGINS="AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
     
     export OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
     export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
     export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4316
     export OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://127.0.0.1:4316/v1/metrics
     export OTEL_METRICS_EXPORTER=none
     export OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true
     export OTEL_TRACES_SAMPLER=xray
     export OTEL_TRACES_SAMPLER_ARG=http://127.0.0.1:2000
     ```
   + 以下は Windows Server の場合の例です。

     ```
     $env:INSTALL_DIR = "OpenTelemetryDistribution"
     $env:CORECLR_ENABLE_PROFILING = 1
     $env:CORECLR_PROFILER = "{918728DD-259F-4A6A-AC2B-B85E1B658318}"
     $env:CORECLR_PROFILER_PATH = Join-Path $env:INSTALL_DIR "win-x64/OpenTelemetry.AutoInstrumentation.Native.dll"
     $env:DOTNET_ADDITIONAL_DEPS = Join-Path $env:INSTALL_DIR "AdditionalDeps"
     $env:DOTNET_SHARED_STORE = Join-Path $env:INSTALL_DIR "store"
     $env:DOTNET_STARTUP_HOOKS = Join-Path $env:INSTALL_DIR "net/OpenTelemetry.AutoInstrumentation.StartupHook.dll"
     $env:OTEL_DOTNET_AUTO_HOME = $env:INSTALL_DIR
     
     $env:OTEL_DOTNET_AUTO_PLUGINS = "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
     
     $env:OTEL_RESOURCE_ATTRIBUTES = "service.name=dotnet-service-name"
     $env:OTEL_EXPORTER_OTLP_PROTOCOL = "http/protobuf"
     $env:OTEL_EXPORTER_OTLP_ENDPOINT = "http://127.0.0.1:4316"
     $env:OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT = "http://127.0.0.1:4316/v1/metrics"
     $env:OTEL_METRICS_EXPORTER = "none"
     $env:OTEL_AWS_APPLICATION_SIGNALS_ENABLED = "true"
     $env:OTEL_TRACES_SAMPLER = "xray"
     $env:OTEL_TRACES_SAMPLER_ARG = "http://127.0.0.1:2000"
     ```

1. 前のステップでリストアップした環境変数を使用して、アプリケーションを起動します。

   （省略可) または、提供されているインストール スクリプトを使用して、AWS Distro for OpenTelemetry .NET 自動計測パッケージのインストールとセットアップに役立てることができます。

   Linux の場合は、GitHub リリース ページから Bash インストール スクリプトをダウンロードしてインストールします:

   ```
   # Download and Install
   curl -L -O https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/aws-otel-dotnet-install.sh
   chmod +x ./aws-otel-dotnet-install.sh
   ./aws-otel-dotnet-install.sh
   
   # Instrument
   . $HOME/.otel-dotnet-auto/instrument.sh
   export OTEL_RESOURCE_ATTRIBUTES=service.name=dotnet-service-name
   ```

   Windows Server の場合は、次のように、GitHub リリースページから PowerShell のインストールスクリプトをダウンロードしてインストールします。

   ```
   # Download and Install
   $module_url = "https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/AWS.Otel.DotNet.Auto.psm1"
   $download_path = Join-Path $env:temp "AWS.Otel.DotNet.Auto.psm1"
   Invoke-WebRequest -Uri $module_url -OutFile $download_path
   Import-Module $download_path
   Install-OpenTelemetryCore
   
   # Instrument
   Import-Module $download_path
   Register-OpenTelemetryForCurrentSession -OTelServiceName "dotnet-service-name"
   Register-OpenTelemetryForIIS
   ```

   AWS Distro for OpenTelemetry .NET 自動計測パッケージの NuGet パッケージは、[公式 NuGet リポジトリ](https://www.nuget.org/packages/AWS.Distro.OpenTelemetry.AutoInstrumentation) にあります。手順については、「[README ファイル](https://github.com/aws-observability/aws-otel-dotnet-instrumentation/blob/main/src/AWS.Distro.OpenTelemetry.AutoInstrumentation/nuget-readme.md)」を確認してください。

------
#### [ Node.js ]

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

**Amazon EC2 インスタンスで Application Signals を有効にする手順内で、Node.js アプリケーションを計測可能にするには**

1. Node.js 用の AWS Distro for OpenTelemetry JavaScript 自動計測エージェントの最新バージョンをダウンロードします。次の コマンドを使用してインストールします。

   ```
   npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
   ```

   リリース済みバージョンをすべて確認するには、「[AWS Distro for OpenTelemetry JavaScript instrumentation](https://github.com/aws-observability/aws-otel-js-instrumentation/releases)」を使用します。

1. Application Signals の利点を最適化するには、環境変数によって情報を追加した後にアプリケーションを起動します。この情報は、Application Signals のダッシュボードに表示されます。

   1. `OTEL_RESOURCE_ATTRIBUTES` 変数には、次の情報をキーと値のペアとして指定します。
      + サービス名を設定するには、`service.name` を使用します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。このキーの値を指定しない場合、`UnknownService` (デフォルト値) が使用されます。
      + アプリケーションの稼働環境を設定するには、`deployment.environment` を使用します。これは、アプリケーションの **[ホスト元]** 環境として Application Signals ダッシュボードに表示されます。これを指定しない場合、次のいずれかのデフォルトが使用されます。
        + これが Auto Scaling グループに含まれるインスタンスである場合は、`ec2:name-of-Auto-Scaling-group` に設定されます。
        + Auto Scaling グループに含まれていない Amazon EC2 インスタンスである場合は、`ec2:default` に設定されます。
        + これがオンプレミスホストである場合は、`generic:default` に設定されます。

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

   1. `OTEL_EXPORTER_OTLP_PROTOCOL` 変数には、テレメトリデータを HTTP 経由で次のステップに記載されている CloudWatch エージェントエンドポイントにエクスポートする `http/protobuf` を指定します。

   1. `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` 変数には、トレースのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が HTTP 経由の OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces` に設定する必要があります。

   1. `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT` 変数には、メトリクスのエクスポート先となるベースエンドポイント URL を指定します。CloudWatch エージェントでは、4316 が HTTP 経由の OTLP ポートとして公開されています。Amazon EC2 では、アプリケーションがローカル CloudWatch エージェントと通信するため、この値を `OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics` に設定する必要があります。

   1. `OTEL_METRICS_EXPORTER` 変数の値は `none` に設定することをお勧めします。これにより、他のメトリクスエクスポーターが無効になり、Application Signals エクスポーターのみ使用されるようになります。

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

1. 前のステップで説明した環境変数を使用してアプリケーションを起動します。起動スクリプトの例を次に示します。
   + `$SVC_NAME` をアプリケーションの名前に置き換えます。これは、Application Signals ダッシュボードにアプリケーション名として表示されます。

   ```
   OTEL_METRICS_EXPORTER=none \
   OTEL_LOGS_EXPORTER=none \
   OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   OTEL_TRACES_SAMPLER=xray \
   OTEL_TRACES_SAMPLER_ARG="endpoint=http://localhost:2000" \
   OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   OTEL_RESOURCE_ATTRIBUTES="service.name=$SVC_NAME" \
   node --require '@aws/aws-distro-opentelemetry-node-autoinstrumentation/register' your-application.js
   ```

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

   次に例示したスクリプトを出発点として、ログ相関を容易に有効にできます。

   ```
   export OTEL_METRICS_EXPORTER=none \
   export OTEL_LOGS_EXPORTER=none \
   export OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true \
   export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
   export OTEL_TRACES_SAMPLER=xray \
   export OTEL_TRACES_SAMPLER_ARG=endpoint=http://localhost:2000 \
   export OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics \
   export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces \
   export OTEL_RESOURCE_ATTRIBUTES="aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" \
   node --require '@aws/aws-distro-opentelemetry-node-autoinstrumentation/register' your-application.js
   ```<a name="EC2-NodeJs-ESM"></a>

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

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

ESM を使用する Node.js アプリケーションの Application Signals を有効にするには、前の手順のステップを変更する必要があります。

まず、Node.js アプリケーションの `@opentelemetry/instrumentation` をインストールします。

```
npm install @opentelemetry/instrumentation@0.54.0
```

次に、前の手順の3と4のステップで、Node.jsのオプションを、

```
--require '@aws/aws-distro-opentelemetry-node-autoinstrumentation/register'
```

から以下に変更してください。

```
--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs
```

------

## モデルコンテキストプロトコル (MCP) を使用して Amazon EC2 で Application Signals を有効にする
<a name="CloudWatch-Application-Signals-EC2-MCP"></a>

CloudWatch Application Signals モデルコンテキストプロトコル (MCP) サーバーを使用して、会話で AI とやり取りして Amazon EC2 インスタンスで Application Signals を有効にできます。これは、Application Signals モニタリングを設定するための自然言語インターフェイスになります。

MCP サーバーは、要件を理解し、適切な設定を生成することで、有効化プロセスを自動化します。設定手順を手動で実行する代わりに、有効にする内容を記述するだけで済みます。

### 前提条件
<a name="CloudWatch-Application-Signals-EC2-MCP-Prerequisites"></a>

MCP サーバーを使用して Application Signals を有効にする前に、以下を用意します。
+ MCP をサポートする開発環境 (Kiro、Claude Desktop、MCP 拡張機能付きの VSCode、その他の MCP 互換ツールなど)
+ IDE で設定された CloudWatch Application Signals MCP サーバー。詳細な設定手順については、[CloudWatch Application Signals MCP サーバーのドキュメント](https://awslabs.github.io/mcp/servers/cloudwatch-applicationsignals-mcp-server)を参照してください。

### MCP サーバーの使用
<a name="CloudWatch-Application-Signals-EC2-MCP-Usage"></a>

IDE で CloudWatch Application Signals MCP サーバーを設定したら、自然言語プロンプトを使用して有効化ガイダンスをリクエストできます。コーディングアシスタントはプロジェクト構造からコンテキストを推測できますが、プロンプトに具体的な詳細を入力すると、確実により正確で関連性が高いガイダンスにできます。アプリケーション言語、インスタンスの詳細、インフラストラクチャとアプリケーションコードへの絶対パスなどの情報を含めます。

**ベストプラクティスプロンプト (具体的で完全):**

```
"Enable Application Signals for my Python service running on EC2.
My app code is in /home/ec2-user/flask-api and IaC is in /home/ec2-user/flask-api/terraform"

"I want to add observability to my Java application on EC2.
The application code is at /opt/apps/checkout-service and
the infrastructure code is at /opt/apps/checkout-service/cloudformation"

"Help me instrument my Node.js application on EC2 with Application Signals.
Application directory: /home/ubuntu/payment-api
Terraform code: /home/ubuntu/payment-api/terraform"
```

**効果の低いプロンプト:**

```
"Enable monitoring for my app"
→ Missing: platform, language, paths

"Enable Application Signals. My code is in ./src and IaC is in ./infrastructure"
→ Problem: Relative paths instead of absolute paths

"Enable Application Signals for my EC2 service at /home/user/myapp"
→ Missing: programming language
```

**クイックテンプレート:**

```
"Enable Application Signals for my [LANGUAGE] service on EC2.
App code: [ABSOLUTE_PATH_TO_APP]
IaC code: [ABSOLUTE_PATH_TO_IAC]"
```

### MCP サーバーを使用する利点
<a name="CloudWatch-Application-Signals-EC2-MCP-Benefits"></a>

CloudWatch Application Signals MCP サーバーを使用すると、次のようないくつかの利点があります。
+ **自然言語インターフェイス:** コマンドや設定構文を覚えずに、有効にする内容を記述
+ **コンテキストに応じたガイダンス:** MCP サーバーは具体的な環境を理解し、カスタマイズされた推奨事項を提供
+ **エラーの削減:** 設定の自動生成により、手動入力エラーが最小限
+ **設定の高速化:** 意図から実装までの時間を短縮
+ **学習ツール:** 生成された設定を確認し、Application Signals の仕組みを理解

### その他のリソース
<a name="CloudWatch-Application-Signals-EC2-MCP-MoreInfo"></a>

CloudWatch Application Signals MCP サーバーの設定と使用の詳細については、[MCP サーバーのドキュメント](https://awslabs.github.io/mcp/servers/cloudwatch-applicationsignals-mcp-server)を参照してください。

## (オプション) アプリケーションの状態をモニタリングする
<a name="CloudWatch-Application-Signals-Monitor-EC2"></a>

Amazon EC2 でアプリケーションを有効にすると、アプリケーションの状態をモニタリングできます。詳細については、「[Application Signals を使用したアプリケーションの運用状態のモニタリング](Services.md)」を参照してください。