사용자 지정 속성 추가
CloudWatch Application Signals는 OpenTelemetry를 사용하여 애플리케이션을 자동 계측하고 Java, Python 등과 같은 다양한 언어로 된 널리 사용되는 라이브러리에서 스팬을 수집합니다.
자동 계측은 데이터베이스 쿼리, HTTP 요청, 캐시 액세스, 외부 서비스 직접 호출 같은 정보를 캡처하므로, 이를 통해 애플리케이션 성능 문제를 해결할 수 있습니다.
사용자 지정 계측을 추가하여 비즈니스별 데이터 또는 캡처하려는 기타 정보로 범위를 보강할 수 있습니다. 이 데이터를 사용자 지정 속성 또는 스팬 이벤트로 기록하면 문제 해결 요구 사항에 맞는 인사이트를 제공할 수 있습니다.
참고
다른 언어로 사용자 지정 속성 또는 스팬 이벤트를 추가하는 방법에 대한 자세한 내용은 OpenTelemetry 웹 사이트의 Language APIs and SDKS
사용자 지정 속성
OpenTelemetry에서 지원하는 모든 언어로 비즈니스 관련 속성 또는 기타 속성을 스팬에 추가할 수 있습니다. 다음은 주문 ID와 고객 세부 정보를 스팬에 추가하는 Java 코드 조각입니다.
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void processOrder() { Span span = Span.current(); span.setAttribute("order.id", "123456"); span.setAttribute("customer.name", "John Doe"); span.setAttribute("customer.id", "4343dfdd"); // Your order processing logic here System.out.println("Order processed with custom attributes"); } }
이러한 속성이 스팬에 추가되면 트랜잭션 검색 시각적 편집기에서 이를 검색 및 분석할 수 있습니다.
스팬 이벤트
스팬 이벤트는 일반적으로 스팬 기간 동안의 중요한 한 시점을 나타내는 데 사용됩니다. 예외 사항은 자동 계측을 통해 스팬 이벤트로서 자동 캡처되지만, 결제 상태 또는 장바구니 중단 같은 사용자 지정 비즈니스 이벤트를 추가할 수도 있습니다. 자세한 내용은 OpenTelemetry 웹 사이트의 Span events
CloudWatch Application Signals 및 OpenTelemetry에서 지원하는 모든 언어로 스팬에 스팬 이벤트를 포함할 수 있습니다. 다음은 스팬에 사용자 지정 이벤트를 추가하는 Java 코드 조각입니다.
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void bookOrder() { Span span = Span.current(); // Add a booking started event span.addEvent("booking started"); // Add a payment succeeded event or failed event span.addEvent("booking failed"); } }
CloudWatch 에이전트의 사전 조건
CloudWatch 에이전트를 사용하여 X-Ray로 스팬 이벤트를 내보내는 경우 구성에서 `transit_spans_in_otlp_format`
플래그를 켜야 합니다.
{ "traces": { ... "transit_spans_in_otlp_format": true ... } }
이러한 이벤트를 추가하면 트랜잭션 검색 시각적 편집기에서 해당 이벤트를 사용할 수 있습니다.
CloudWatch Logs 쿼리
CloudWatch Logs에서 스팬 이벤트를 쿼리하여 고급 인사이트를 볼 수 있습니다. 다음 예제 쿼리 명령은 애플리케이션에서 발생하는 예외를 분석하는 방법을 보여줍니다.
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | display event.attributes.`exception.stacktrace`
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | stats count() by event.attributes.`exception.type`