Application Signals によって収集されるメトリクス - Amazon CloudWatch

Application Signals によって収集されるメトリクス

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

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

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

収集される標準アプリケーションメトリクス

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

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

メトリクス 説明

Latency

リクエストの発生からデータ転送が開始されるまでの時間的な差。

単位: ミリ秒

Fault

サーバー側の障害 (HTTP 5XX) と、OpenTelemetry のスパンステータスエラーを合わせた件数。

単位: なし

Error

クライアントによるエラー (HTTP 4XX) の件数。これらは、サービス側での問題ではなく、リクエスト上のエラーとされるため、Application Signals ダッシュボードに表示される Availability メトリクスでは、こうしたエラーはサービス障害とは見なされません。

単位: なし

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

収集されるディメンションと、ディメンションの組み合わせ

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

収集されるディメンションは、サービスメトリクスと依存関係メトリクスごとに異なります。例えば、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]]

ランタイムメトリクス

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 の料金」をご覧ください。

注記

既知の問題

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 ランタイムメトリクス

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 ランタイムメトリクス

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 ランタイムメトリクス

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

ランタイムメトリクスのコレクションの無効化

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

Amazon EKS

アプリケーションレベルで 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

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

EC2

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

Kubernetes

アプリケーションレベルで 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