Application Signals에서 수집한 지표 - Amazon CloudWatch

Application Signals에서 수집한 지표

Application Signals는 이를 활성화한 애플리케이션에서 표준 애플리케이션 지표런타임 지표를 둘 다 수집합니다.

표준 애플리케이션 지표는 서비스 성능, 지연 시간, 가용성의 가장 중요한 부분과 관련이 있습니다.

런타임 지표는 메모리 사용량, CPU 사용량, 폐영역 회수를 비롯하여 시간 경과에 따른 애플리케이션 지표를 추적합니다. Application Signals는 Application Signals에 대해 활성화한 서비스의 컨텍스트에 런타임 지표를 표시합니다. 운영 문제가 발생한 경우, 런타임 지표를 관찰하면 문제의 근본 원인을 찾는 데 도움이 될 수 있습니다. 예를 들어 서비스의 지연 시간 스파이크가 런타임 지표의 스파이크와 관련이 있는지 확인할 수 있습니다.

수집된 표준 애플리케이션 지표

Application Signals는 검색된 서비스에서 표준 애플리케이션 지표를 수집합니다. 이러한 지표는 서비스 성능의 가장 중요한 측면인 지연 시간, 장애 및 오류와 관련이 있습니다. 이를 통해 문제를 식별하고, 성능 추세를 모니터링하고, 리소스를 최적화하여 전반적인 사용자 경험을 개선할 수 있습니다.

다음 표에는 CloudWatch에서 수집할 수 있는 지표가 나열되어 있습니다. 이러한 지표는 ApplicationSignals 네임스페이스의 CloudWatch로 전송됩니다.

지표 설명

Latency

요청 후 데이터 전송이 시작되기까지의 지연 시간입니다.

단위: 밀리초

Fault

HTTP 5XX 서버 측 장애와 OpenTelemetry 스팬 상태 오류 수입니다.

단위: 없음

Error

HTTP 4XX 클라이언트측 오류 수입니다. 이는 서비스 문제로 인한 것이 아닌 요청 오류로 간주됩니다. 따라서 Application Signals 대시보드에 표시되는 Availability 지표는 이러한 오류를 서비스 장애로 간주하지 않습니다.

단위: 없음

Application Signals 대시보드에 표시되는 Availability 지표는 (1 - Faults/Total)*100으로 계산됩니다. 총 응답에는 모든 응답이 포함되며 SampleCount(Latency)에서 파생됩니다. 성공적인 응답은 5XX 오류가 없는 모든 응답입니다. Application Signals가 Availability를 계산할 때 4XX 응답은 성공으로 처리됩니다.

수집된 측정기준 및 측정기준 조합

각 표준 애플리케이션 지표에 대해 다음과 같은 측정기준이 정의됩니다. 측정기준에 대한 자세한 내용은 Dimensions 섹션을 참조하세요.

서비스 지표와 종속성 지표에 대해 서로 다른 측정기준이 수집됩니다. 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 애플리케이션의 경우 Java용 AWS Distro for OpenTelemetry SDK 1.32.5 이상을 실행 중이어야 합니다.

  • Python 애플리케이션의 경우 Python용 AWS Distro for OpenTelemetry SDK 0.7.0 이상을 실행 중이어야 합니다.

  • .Net 애플리케이션의 경우 .Net용 AWS Distro for OpenTelemetry SDK 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로 전송되며 ServiceEnvironment 차원 세트와 함께 수집됩니다.

메트릭 이름 설명 의미 있는 통계

JVMGCDuration

JVM 폐영역 회수 작업 기간 동안 집계된 지표입니다.

단위: 밀리초

합계, 평균, 최솟값, 최댓값

JVMGCOldGenDuration

이전 세대의 JVM 폐영역 회수 작업 기간 동안 집계된 지표입니다. G1에서만 사용할 수 있습니다.

단위: 밀리초

합계, 평균, 최솟값, 최댓값

JVMGCYoungGenDuration

최신 세대의 JVM 폐영역 회수 작업 기간 동안 집계된 지표입니다. G1에서만 사용할 수 있습니다.

단위: 밀리초

합계, 평균, 최솟값, 최댓값

JVMGCCount

JVM 폐영역 회수 작업 수에 대해 집계된 지표입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

JVMGCOldGenCount

이전 세대의 JVM 폐영역 회수 작업 수에 대해 집계된 지표입니다. G1에서만 사용할 수 있습니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

JVMGCYoungGenCount

최신 세대의 JVM 폐영역 회수 작업 수에 대해 집계된 지표입니다. G1에서만 사용할 수 있습니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

JVMMemoryHeapUsed

사용된 메모리 힙의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMMemoryUsedAfterLastGC

이 풀에서 가장 최근 폐영역 회수 이벤트 이후에 측정된 메모리 사용량입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMMemoryOldGenUsed

이전 세대에서 사용하는 메모리의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMMemorySurvivorSpaceUsed

Survivor 공간에서 사용하는 메모리 힙의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMMemoryEdenSpaceUsed

Eden 공간에서 사용하는 메모리의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMMemoryNonHeapUsed

힙 이외의 용도로 사용된 메모리의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

JVMThreadCount

대몬 스레드와 대몬 이외 스레드를 모두 포함한 실행 스레드 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

JVMClassLoaded

로드된 클래스의 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

JVMCpuTime

JVM에서 보고한 프로세스에서 사용하는 CPU 시간입니다.

단위: 없음(나노초)

합계, 평균, 최솟값, 최댓값

JVMCpuRecentUtilization

JVM에서 보고한 대로, 프로세스에서 사용하는 최근 CPU.

단위: 없음

평균, 최솟값, 최댓값

Python 런타임 지표

Application Signals는 Application Signals에 대해 활성화한 Python 애플리케이션에서 다음과 같은 지표를 수집합니다. 모든 런타임 지표는 ApplicationSignals 네임스페이스의 CloudWatch로 전송되며 ServiceEnvironment 차원 세트와 함께 수집됩니다.

메트릭 이름 설명 의미 있는 통계

PythonProcessGCCount

현재 추적 중인 총 객체 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

PythonProcessGCGen0Count

0세대에서 현재 추적 중인 객체 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

PythonProcessGCGen1Count

1세대에서 현재 추적 중인 객체 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

PythonProcessGCGen2Count

2세대에서 현재 추적 중인 객체 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

PythonProcessVMSMemoryUsed

프로세스에서 사용된 총 가상 메모리의 양입니다.

단위: 바이트

평균, 최솟값, 최댓값

PythonProcessRSSMemoryUsed

프로세스에서 사용하는 스왑되지 않은 물리적 메모리의 총량입니다.

단위: 바이트

평균, 최솟값, 최댓값

PythonProcessThreadCount

프로세스에서 현재 사용하는 스레드 수입니다.

단위: 없음

합계, 평균, 최솟값, 최댓값

PythonProcessCpuTime

프로세스에서 사용하는 CPU 시간입니다.

단위: 초

합계, 평균, 최솟값, 최댓값

PythonProcessCpuUtilization

프로세스의 CPU 사용률입니다.

단위: 없음

평균, 최솟값, 최댓값

.Net 런타임 지표

Application Signals는 Application Signals에 대해 활성화한 .Net 애플리케이션에서 다음과 같은 지표를 수집합니다. 모든 런타임 지표는 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 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