

# Application Signals によって収集されるメトリクス
<a name="AppSignals-MetricsCollected"></a>

Application Signals は [標準のアプリケーションメトリクス](#AppSignals-StandardMetrics)および[ランタイムメトリクス](#AppSignals-StandardMetrics)の両方を、有効にしたアプリケーションから収集します。

標準アプリケーションメトリクスはサービスパフォーマンス、レイテンシー、可用性の最も重要な部分に関連しています。

ランタイムメトリクスは、メモリ使用率、CPU 使用率、ガベージコレクションを含め、アプリケーションメトリクスを経時的に追跡します。Application Signals は、Application Signals に対して有効にしたサービスのコンテキストでランタイムメトリクスを表示します。運用上の問題が発生したとき、ランタイムメトリクスを観察すると、問題の根本原因を見つけるために役たちます。例えば、サービスのレイテンシーの急増がランタイムメトリクスの急増に関連しているかどうかを確認できます。

**Topics**
+ [収集される標準アプリケーションメトリクス](#AppSignals-StandardMetrics)
+ [ランタイムメトリクス](#AppSignals-RuntimeMetrics)
+ [ランタイムメトリクスのコレクションの無効化](#AppSignals-RuntimeMetrics-Disable)

## 収集される標準アプリケーションメトリクス
<a name="AppSignals-StandardMetrics"></a>

Application Signals では、検出したサービスから標準アプリケーションメトリクスを収集します。こうしたメトリクスからは、サービスのパフォーマンスに最も影響を与える要因、例えば、レイテンシー、障害、エラーに関する情報を得られます。これにより、問題の特定、パフォーマンス傾向のモニタリング、リソースの最適化を行い、全体的なユーザーエクスペリエンスを向上させることができます。

次の表に、Application Signals によって収集されるメトリクスを示します。こうしたメトリクスは `ApplicationSignals` 名前空間の CloudWatch に送信されます。


| メトリクス | 説明 | 
| --- | --- | 
|  `Latency`  |  リクエストの発生からデータ転送が開始されるまでの時間的な差。 単位: ミリ秒 | 
|  `Fault`  |  サーバー側の障害 (HTTP 5XX) と、OpenTelemetry のスパンステータスエラーを合わせた件数。 単位: なし | 
|  `Error`  |  クライアントによるエラー (HTTP 4XX) の件数。これらは、サービス側での問題ではなく、リクエスト上のエラーとされるため、Application Signals ダッシュボードに表示される `Availability` メトリクスでは、こうしたエラーはサービス障害とは見なされません。 単位: なし | 

Application Signals のダッシュボードに表示される `Availability` メトリクスは、**(1 - `Faults`/Total)\$1100** という計算式によって求めます。レスポンスの合計にはすべてのレスポンスが含まれ、`SampleCount(Latency)` から導出されます。Successful の応答数とは、`5XX` エラーのない応答の総件数を意味し、`4XX` 応答は、`Availability` の計算時に Successful の応答として処理されます。

### 収集されるディメンションと、ディメンションの組み合わせ
<a name="AppSignals-StandardMetrics-Dimensions"></a>

各標準アプリケーションメトリクスには、次のディメンションが定義されています。ディメンションの詳細については、「[ディメンション](cloudwatch_concepts.md#Dimension)」を参照してください。

収集されるディメンションは、サービスメトリクスと依存関係メトリクスごとに異なります。例えば、Application Signals によって検出されたサービス内で、マイクロサービス A がマイクロサービス B を呼び出し、マイクロサービス B がそのリクエストを処理するとします。この場合、マイクロサービス A が依存関係メトリクスを出力し、マイクロサービス B がサービスメトリクスを出力します。クライアントがマイクロサービス A を呼び出す場合は、マイクロサービス A がそのリクエストを処理し、サービスメトリクスを生成します。

**サービスメトリクスのディメンション**

次のディメンションがサービスメトリクスとして収集されます。


| ディメンション | 説明 | 
| --- | --- | 
|  `Service`  |  サービスの名前。 最大値は 255 文字です。  | 
|  `Operation`  |  API オペレーションなどの操作名。 最大値は 1,024 文字です。オペレーションに対してサービスレベル目標を設定できるのは、オペレーション名が 194 文字以下の場合だけです。  | 
| `Environment` | サービスが稼働している環境の名前。サービスが Amazon EKS で稼働していない場合は、`OTEL_ATTRIBUTE_RESOURCES` パラメータで `deployment.environment` にオプションのカスタム値を指定できます。 最大値は 259 文字です。 | 

CloudWatch コンソールにこれらのメトリクスを表示する場合、次のようなディメンションを組み合わせて表示することもできます。
+ `[Environment, Service, Operation, [Latency, Error, Fault]]`
+ `[Environment, Service, [Latency, Error, Fault]]`

**依存関係メトリクスのディメンション**

次のディメンションが依存関係メトリクスとして収集されます。


| ディメンション | 説明 | 
| --- | --- | 
|  `Service`  |  サービスの名前。 最大値は 255 文字です。  | 
|  `Operation`  |  API オペレーションまたはその他のオペレーションの名前。 最大値は 1,024 文字です。  | 
|  `RemoteService`  |  呼び出されるリモートサービスの名前。 最大値は 255 文字です。  | 
|  `RemoteOperation`  |  呼び出される API オペレーションの名前。 最大値は 1,024 文字です。  | 
|  `Environment`  | サービスが稼働している環境の名前。サービスが Amazon EKS で稼働していない場合は、`OTEL_ATTRIBUTE_RESOURCES` パラメータで `deployment.environment` にオプションのカスタム値を指定できます。 最大値は 259 文字です。 | 
|  `RemoteEnvironment`  |  依存関係サービスが稼働している環境の名前。サービスが依存関係を呼び出し、そのどちらも同じクラスターで実行されている場合、`RemoteEnvironment` パラメータが自動的に生成されます。それ以外の場合、`RemoteEnvironment` はサービス依存関係のメトリクスで生成されることはなく、レポートされることもありません。現在、Amazon EKS および K8S プラットフォームでのみ使用できます。 最大値は 259 文字です。  | 
|  `RemoteResourceIdentifier`  |  リモート呼び出しによって呼び出されるリソースの名前。サービスがリモート AWS サービスを呼び出した場合、`RemoteResourceIdentifier` パラメータが自動的に生成されます。それ以外の場合、`RemoteResourceIdentifier` はサービス依存関係のメトリクスで生成されることはなく、レポートされることもありません。 最大値は 1,024 文字です。  | 
|  `RemoteResourceType`  |  リモート呼び出しによって呼び出されるリソースのタイプ。`RemoteResourceIdentifier` が定義されている場合にのみ必要です。 最大値は 1,024 文字です。  | 

CloudWatch コンソールにこれらのメトリクスを表示する場合、次のようなディメンションを組み合わせて表示することもできます。

**Amazon EKS クラスターで実行可能**
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteEnvironment, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteEnvironment, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, [Latency, Error, Fault]]`
+ `[RemoteService [Latency, Error, Fault]]` 
+ `[RemoteService, RemoteResourceIdentifier, RemoteResourceType [Latency, Error, Fault]]`

## ランタイムメトリクス
<a name="AppSignals-RuntimeMetrics"></a>

Application Signals は AWS Distro for OpenTelemetry SDK を使用し、Java および Python アプリケーションから OpenTelemetry 互換メトリクスを自動的に収集します。ランタイムメトリクスを収集するには、次の前提条件を満たす必要があります。
+ CloudWatch エージェントは、バージョン `1.300049.1` 以降である必要があります。
+ Amazon CloudWatch Observability EKS アドオンを使用した場合、バージョン `2.30-eksbuild.1` 以降である必要があります。アドオンを更新した場合、アプリケーションを再起動する必要があります。
+ Java アプリケーションの場合、AWS Distro for OpenTelemetry SDK for Java の `1.32.5` 以降を実行している必要があります。
+ Python アプリケーションの場合、AWS Distro for OpenTelemetry SDK for Python の `0.7.0` 以降を実行している必要があります。
+ .Net アプリケーションの場合、AWS Distro for OpenTelemetry SDK for .Net の `1.6.0` 以降を実行している必要があります。

ランタイムメトリクスは、Node.js アプリケーションでは収集されません。

ランタイムメトリクスは、Application Signals の費用の一部として課金されます。CloudWatch の料金の詳細については、「[Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing)」をご覧ください。

**注記**  
**既知の問題**  
Java SDK リリース v1.32.5 のランタイムメトリクスコレクションは、JBoss Wildfly を使用するアプリケーションで動作しないことが知られています。この問題は Amazon CloudWatch Observability EKS アドオンに及び、`2.3.0-eksbuild.1` から `2.6.0-eksbuild.1` までのバージョンに影響します。この問題は、Java SDK リリース `v1.32.6` と Amazon CloudWatch Observability EKS アドオンバージョン `v3.0.0-eksbuild.1` で修正されています。  
影響を受けた場合、Java SDK のバージョンをアップグレードするか、アプリケーションに `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false` 環境変数を追加してランタイムメトリクス収集を無効にします。

### Java ランタイムメトリクス
<a name="AppSignals-RuntimeMetrics-JVM"></a>

Application Signals は、Application Signals で有効にする Java アプリケーションから次の JVM メトリクスを収集します。すべてのランタイムメトリクスは、`ApplicationSignals` 名前空間で CloudWatch に送信され、`Service` および `Environment` ディメンションセットで収集されます。


| メトリクス名 | 説明 | 有意義な統計 | 
| --- | --- | --- | 
|  `JVMGCDuration` |  JVM ガベージコレクションアクションの期間中における集計メトリクス。 単位: ミリ秒  | Sum、Average、Minimum、Maximum | 
|  `JVMGCOldGenDuration` |  旧世代の JVM ガベージコレクションアクションの期間中における集計メトリクス。G1 でのみ利用できます。 単位: ミリ秒  | Sum、Average、Minimum、Maximum | 
|  `JVMGCYoungGenDuration` |  新世代の JVM ガベージコレクションアクションの期間中における集計メトリクス。G1 でのみ利用できます。 単位: ミリ秒  | Sum、Average、Minimum、Maximum | 
|  `JVMGCCount` |  JVM ガベージコレクションアクションの数における集計メトリクス。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `JVMGCOldGenCount` |  旧世代の JVM ガベージコレクションアクションの数における集計メトリクス。G1 でのみ利用できます。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `JVMGCYoungGenCount` |  新世代の JVM ガベージコレクションアクションの数における集計メトリクス。G1 でのみ利用できます。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `JVMMemoryHeapUsed` |  使用されるメモリヒープの量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMMemoryUsedAfterLastGC` |  このプールの最新ガベージコレクションイベントの後に測定される使用されたメモリの量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMMemoryOldGenUsed` |  旧世代が使用するメモリの量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMMemorySurvivorSpaceUsed` |  サバイバー領域によって使用されるメモリヒープの量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMMemoryEdenSpaceUsed` |  eden スペースによって使用されるメモリの量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMMemoryNonHeapUsed` |  ヒープ以外のメモリ使用量。 単位: バイト  | Average、Minimum、Maximum | 
|  `JVMThreadCount` |  デーモンスレッドとデーモン以外のスレッドの両方を含む、実行中のスレッドの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `JVMClassLoaded` |  ロードされたクラスの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `JVMCpuTime` |  JVM によって報告された、プロセスによって使用される CPU 時間。 単位: なし (ナノ秒)  | Sum、Average、Minimum、Maximum | 
|  `JVMCpuRecentUtilization` |  プロセスが最近使用した CPU 使用量 (JVM から報告された値) 単位: なし  | Average、Minimum、Maximum | 

### Python ランタイムメトリクス
<a name="AppSignals-RuntimeMetrics-Python"></a>

Application Signals により、Application Signals で有効にする Python アプリケーションから次のメトリクスが収集されます。すべてのランタイムメトリクスは、`ApplicationSignals` 名前空間で CloudWatch に送信され、`Service` および `Environment` ディメンションセットで収集されます。


| メトリクス名 | 説明 | 有意義な統計 | 
| --- | --- | --- | 
|  `PythonProcessGCCount` |  現在追跡中のオブジェクトの合計数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessGCGen0Count` |  世代 0 で現在追跡中のオブジェクトの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessGCGen1Count` |  世代 1 で現在追跡中のオブジェクトの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessGCGen2Count` |  世代 2 で現在追跡中のオブジェクトの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessVMSMemoryUsed` |  プロセスで使用されている仮想メモリの合計量。 単位: バイト  | Average、Minimum、Maximum | 
|  `PythonProcessRSSMemoryUsed` |  プロセスで使用されるスワップされていない物理メモリの合計量。 単位: バイト  | Average、Minimum、Maximum | 
|  `PythonProcessThreadCount` |  プロセスで現在使用中のスレッドの数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessCpuTime` |  プロセスで使用される CPU 時間。 単位: 秒  | Sum、Average、Minimum、Maximum | 
|  `PythonProcessCpuUtilization` |  プロセスの CPU 使用率。 単位: なし  | Average、Minimum、Maximum | 

### .Net ランタイムメトリクス
<a name="AppSignals-RuntimeMetrics-Python"></a>

Application Signals により、Application Signals で有効にする .Net アプリケーションから次のメトリクスが収集されます。すべてのランタイムメトリクスは、`ApplicationSignals` 名前空間で CloudWatch に送信され、`Service` および `Environment` ディメンションセットで収集されます。


| メトリクス名 | 説明 | 有意義な統計 | 
| --- | --- | --- | 
|  `DotNetGCGen0Count` |  プロセスの開始以降に世代 0 で追跡されたガベージコレクションのメトリクスの総数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `DotNetGCGen1Count` |  プロセスの開始以降に世代 1 で追跡されたガベージコレクションのメトリクスの総数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `DotNetGCGen2Count` |  プロセスの開始以降に世代 2 で追跡されたガベージコレクションのメトリクスの総数。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `DotNetGCDuration` |  プロセスが開始されてからガベージコレクションで一時停止した合計時間。 単位: なし  | Sum、Average、Minimum、Maximum | 
|  `DotNetGCGen0HeapSize` |  最新のガベージコレクション中に観測された世代 0 のヒープサイズ (断片化を含む）。 このメトリクスは、最初のガベージコレクションが完了した後にのみ使用できます。 単位: バイト  | Average、Minimum、Maximum | 
|  `DotNetGCGen1HeapSize` |  最新のガベージコレクション中に観測された世代 1 のヒープサイズ (断片化を含む）。 このメトリクスは、最初のガベージコレクションが完了した後にのみ使用できます。 単位: バイト  | Average、Minimum、Maximum | 
|  `DotNetGCGen2HeapSize` |  最新のガベージコレクション中に観測された世代 2 のヒープサイズ (断片化を含む）。 このメトリクスは、最初のガベージコレクションが完了した後にのみ使用できます。 単位: バイト  | Average、Minimum、Maximum | 
|  `DotNetGCLOHHeapSize` |  最新のガベージコレクション中に観測された大きなオブジェクトのヒープサイズ (フラグメント化を含む）。 このメトリクスは、最初のガベージコレクションが完了した後にのみ使用できます。 単位: バイト  | Average、Minimum、Maximum | 
|  `DotNetGCPOHHeapSize` |  最新のガベージコレクション中に観測されたピン留めオブジェクトのヒープサイズ (フラグメント化を含む）。 このメトリクスは、最初のガベージコレクションが完了した後にのみ使用できます。 単位: バイト  | Average、Minimum、Maximum | 
|  `DotNetThreadCount` |  現在存在するスレッドプールのスレッドの数。 単位: なし  | Average、Minimum、Maximum | 
|  `DotNetThreadQueueLength` |  スレッドプールによって処理されるために現在キューに入っている作業項目の数。 単位: なし  | Average、Minimum、Maximum | 

## ランタイムメトリクスのコレクションの無効化
<a name="AppSignals-RuntimeMetrics-Disable"></a>

Application Signals で有効になっている Java および Python アプリケーションに対して、ランタイムメトリクスがデフォルトで収集されます。これらのメトリクスの収集を無効にする場合、このセクションでお使いの環境に関するの手順に従ってください。

### Amazon EKS
<a name="AppSignals-RuntimeMetrics-Disable-EKS"></a>

アプリケーションレベルで Amazon EKS アプリケーションのランタイムメトリクスを無効にするには、ワークロード仕様に次の環境変数を追加します。

```
env:
    - name: OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED 
      value: "false"
```

クラスターレベルで Amazon EKS アプリケーションのランタイムメトリクスを無効にするには、Amazon CloudWatch Observability EKS アドオンの高度な設定に対し、設定を適用します。

```
{
  "agent": {
    "config": {
      "traces": {
        "traces_collected": {
          "application_signals": {
            
          }
        }
      },
      "logs": {
        "metrics_collected": {
          "application_signals": {
            
          }
        }
      }
    },
    "manager": {
      "autoInstrumentationConfiguration": {
        "java": {
          "runtime_metrics": {
            "enabled": false
          }
        },
        "python": {
          "runtime_metrics": {
            "enabled": false
          }
        },
        "dotnet": {
          "runtime_metrics": {
            "enabled": false
          }
        }
      }
    }
  }
}
```

### Amazon ECS
<a name="AppSignals-RuntimeMetrics-Disable-ECS"></a>

Amazon ECS アプリケーションでランタイムメトリクスを無効にするには、新しいタスク定義リビジョンに `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false` の環境変数を追加し、アプリケーションを再デプロイします。

### EC2
<a name="AppSignals-RuntimeMetrics-Disable-EC2"></a>

Amazon EC2 アプリケーションでランタイムメトリクスを無効にするには、アプリケーションの起動前に `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false` の環境変数を追加します。

### Kubernetes
<a name="AppSignals-RuntimeMetrics-Disable-Kubernetes"></a>

アプリケーションレベルで Kubernetes アプリケーションのランタイムメトリクスを無効にするには、ワークロード仕様に次の環境変数を追加します。

```
env:
    - name: OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED 
      value: "false"
```

クラスターレベルで Kubernetes アプリケーションのランタイムメトリクスを無効にするには、次の内容を使用します。

```
helm upgrade ... \
--set-string manager.autoInstrumentationConfiguration.java.runtime_metrics.enabled=false \
--set-string manager.autoInstrumentationConfiguration.python.runtime_metrics.enabled=false \
-\-set-string manager.autoInstrumentationConfiguration.dotnet.runtime_metrics.enabled=false
```