Application Signals 收集的指标 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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/总数)*100。回复总数包括所有回复,并源自 SampleCount(Latency)。成功响应是指没有 5XX 错误的所有响应。当 Application Signals 计算 Availability 时,4XX 响应会被视为成功响应。

收集的维度和维度组合

为每个标准应用程序指标定义了以下维度。有关维度的更多信息,请参阅 Dimensions

服务指标依赖项指标收集不同的维度。在 Application Signals 发现的服务中,当微服务 A 调用微服务 B 时,微服务 B 正在处理请求。在这种情况下,微服务 A 发出依赖项指标,微服务 B 发出服务指标。当客户端调用微服务 A 时,微服务 A 正在处理请求并发出服务指标。

服务指标的维度

为服务指标收集以下维度。

维度 描述

Service

服务的名称。

最大值为 255 个字符。

Operation

API 操作或其他活动的名称。

最大值为 1024 个字符。当前,仅当操作名称不超过 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 操作或其他操作的名称。

最大值为 1024 个字符。

RemoteService

所调用远程服务的名称。

最大值为 255 个字符。

RemoteOperation

所调用 API 操作的名称。

最大值为 1024 个字符。

Environment

运行服务的环境的名称。如果服务未在 Amazon EKS 上运行,则可以在 OTEL_ATTRIBUTE_RESOURCES 参数中为 deployment.environment 指定可选的自定义值。

最大值为 259 个字符。

RemoteEnvironment

运行依赖项服务的环境的名称。当服务调用依赖项并且它们都在同一集群中运行时,会自动生成 RemoteEnvironment 参数。否则,不会生成 RemoteEnvironment,也不会在服务依赖项的指标中报告该参数。目前仅在 Amazon EKS 和 K8S 平台上可用。

最大值为 259 个字符。

RemoteResourceIdentifier

远程调用所调用资源的名称。如果服务调用远程 Amazon 服务,则会自动生成 RemoteResourceIdentifier 参数。否则,不会生成 RemoteResourceIdentifier,也不会在服务依赖项的指标中报告该参数。

最大值为 1024 个字符。

RemoteResourceType

远程调用所调用资源的类型。仅在定义 RemoteResourceIdentifier 时需要。

最大值为 1024 个字符。

当您在 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 使用 Amazon Distro for OpenTelemetry SDK 从 Java 和 Python 应用程序中自动收集与 OpenTelemetry 兼容的指标。要收集运行时指标,必须满足以下先决条件:

  • CloudWatch 代理必须是版本 1.300049.1 或更高版本。

  • 如果使用 Amazon CloudWatch 可观测性 EKS 附加组件,其必须是版本 2.30-eksbuild.1 或更高版本。如果更新附加组件,则必须重新启动应用程序。

  • 对于 Java 应用程序,必须运行适用于 Java 的 Amazon Distro for OpenTelemetry SDK 1.32.5 版本或更高版本。

  • 对于 Python 应用程序,必须运行适用于 Python 的 Amazon Distro for OpenTelemetry SDK 0.7.0 版本或更高版本。

  • 对于 .Net 应用程序,必须运行适用于 .Net 的 Amazon Distro for OpenTelemetry SDK 1.6.0 版本或更高版本。

不收集 Node.js 应用程序的运行时指标。

运行时间指标作为 Application Signals 费用的一部分收费。有关 CloudWatch 定价的信息,请参阅 Amazon CloudWatch 定价

注意

已知问题

众所周知,Java SDK 版本 v1.32.5 中的运行时指标收集不适用于使用 JBoss Wildfly 的应用程序。此问题扩展到 Amazon CloudWatch 可观测性 EKS 附加组件,影响版本 2.3.0-eksbuild.12.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 的 Java 应用程序,Application Signals 从其中收集以下 JVM 指标。所有运行时指标都将发送到 ApplicationSignals 命名空间中的 CloudWatch,并使用 ServiceEnvironment 维度集进行收集。

指标名称 描述 有意义的统计数据

JVMGCDuration

JVM 垃圾回收操作持续时间的聚合指标。

单位:毫秒

总和、平均值、最小值、最大值

JVMGCOldGenDuration

旧一代 JVM 垃圾回收操作持续时间的聚合指标。仅在 G1 中可用。

单位:毫秒

总和、平均值、最小值、最大值

JVMGCYoungGenDuration

新一代 JVM 垃圾回收操作持续时间的聚合指标。仅在 G1 中可用。

单位:毫秒

总和、平均值、最小值、最大值

JVMGCCount

JVM 垃圾回收操作数的聚合指标。

单位:无

总和、平均值、最小值、最大值

JVMGCOldGenCount

旧一代 JVM 垃圾回收操作数的聚合指标。仅在 G1 中可用。

单位:无

总和、平均值、最小值、最大值

JVMGCYoungGenCount

新一代 JVM 垃圾回收操作数的聚合指标。仅在 G1 中可用。

单位:无

总和、平均值、最小值、最大值

JVMMemoryHeapUsed

使用的内存堆量。

单位:字节

平均值、最小值、最大值

JVMMemoryUsedAfterLastGC

已使用的内存量,在此池上最近的垃圾回收事件之后测量所得。

单位:字节

平均值、最小值、最大值

JVMMemoryOldGenUsed

旧一代使用的内存量。

单位:字节

平均值、最小值、最大值

JVMMemorySurvivorSpaceUsed

幸存空间使用的内存堆量。

单位:字节

平均值、最小值、最大值

JVMMemoryEdenSpaceUsed

Eden 空间使用的内存量。

单位:字节

平均值、最小值、最大值

JVMMemoryNonHeapUsed

使用的非内存堆量。

单位:字节

平均值、最小值、最大值

JVMThreadCount

正在执行的线程数,包括进程守护程序线程和非进程守护程序线程。

单位:无

总和、平均值、最小值、最大值

JVMClassLoaded

加载的类数量。

单位:无

总和、平均值、最小值、最大值

JVMCpuTime

JVM 报告的进程使用的 CPU 时间。

单位:无(纳秒)

总和、平均值、最小值、最大值

JVMCpuRecentUtilization

JVM 所报告的进程最近使用的 CPU。

单位:无

平均值、最小值、最大值

Python 运行时指标

对于启用了 Application Signals 的 Python 应用程序,Application Signals 从其中收集以下指标。所有运行时指标都将发送到 ApplicationSignals 命名空间中的 CloudWatch,并使用 ServiceEnvironment 维度集进行收集。

指标名称 描述 有意义的统计数据

PythonProcessGCCount

当前正在跟踪的对象总数。

单位:无

总和、平均值、最小值、最大值

PythonProcessGCGen0Count

当前正在第 0 代中跟踪的对象总数。

单位:无

总和、平均值、最小值、最大值

PythonProcessGCGen1Count

当前正在第 1 代中跟踪的对象总数。

单位:无

总和、平均值、最小值、最大值

PythonProcessGCGen2Count

当前正在第 2 代中跟踪的对象总数。

单位:无

总和、平均值、最小值、最大值

PythonProcessVMSMemoryUsed

进程使用的虚拟内存总量。

单位:字节

平均值、最小值、最大值

PythonProcessRSSMemoryUsed

进程使用的非交换物理内存总量。

单位:字节

平均值、最小值、最大值

PythonProcessThreadCount

进程当前使用的线程数。

单位:无

总和、平均值、最小值、最大值

PythonProcessCpuTime

进程使用的 CPU 时间。

单位:秒

总和、平均值、最小值、最大值

PythonProcessCpuUtilization

进程的 CPU 使用率。

单位:无

平均值、最小值、最大值

.Net 运行时指标

对于启用了 Application Signals 的 .Net 应用程序,Application Signals 从其中收集以下指标。所有运行时指标都将发送到 ApplicationSignals 命名空间中的 CloudWatch,并使用 ServiceEnvironment 维度集进行收集。

指标名称 描述 有意义的统计数据

DotNetGCGen0Count

自进程启动以来,在第 0 代中跟踪的垃圾回收指标的总数。

单位:无

总和、平均值、最小值、最大值

DotNetGCGen1Count

自进程启动以来,在第 1 代中跟踪的垃圾回收指标的总数。

单位:无

总和、平均值、最小值、最大值

DotNetGCGen2Count

自进程启动以来,在第 2 代中跟踪的垃圾回收指标的总数。

单位:无

总和、平均值、最小值、最大值

DotNetGCDuration

自进程启动以来,垃圾回收暂停的总时间。

单位:无

总和、平均值、最小值、最大值

DotNetGCGen0HeapSize

在最近的垃圾回收期间观察到的第 0 代的堆大小(包括碎片)。

注意

此指标仅在第一次垃圾回收完成后可用。

单位:字节

平均值、最小值、最大值

DotNetGCGen1HeapSize

在最近的垃圾回收期间观察到的第 1 代的堆大小(包括碎片)。

注意

此指标仅在第一次垃圾回收完成后可用。

单位:字节

平均值、最小值、最大值

DotNetGCGen2HeapSize

在最近的垃圾回收期间观察到的第 2 代的堆大小(包括碎片)。

注意

此指标仅在第一次垃圾回收完成后可用。

单位:字节

平均值、最小值、最大值

DotNetGCLOHHeapSize

在最近的垃圾回收期间观察到的大型对象堆大小(包括碎片)。

注意

此指标仅在第一次垃圾回收完成后可用。

单位:字节

平均值、最小值、最大值

DotNetGCPOHHeapSize

在最近的垃圾回收期间观察到的固定对象堆大小(包括碎片)。

注意

此指标仅在第一次垃圾回收完成后可用。

单位:字节

平均值、最小值、最大值

DotNetThreadCount

当前存在的线程池线程数。

单位:无

平均值、最小值、最大值

DotNetThreadQueueLength

当前排队等待线程池处理的工作项数量。

单位:无

平均值、最小值、最大值

禁用运行时指标的收集

对于启用了 Application Signals 的 Java 和 Python 应用程序,默认收集运行时指标。如果想要禁用这些指标的收集,请按照本节中针对您环境的说明执行操作。

Amazon EKS

要在应用程序级别禁用 Amazon EKS 应用程序中的运行时指标,请将以下环境变量添加到工作负载规范中。

env: - name: OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED value: "false"

要在集群级别禁用 Amazon EKS 应用程序中的运行时指标,请将该配置应用于 Amazon CloudWatch 可观测性 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