기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
OpenTelemetry Python으로 마이그레이션
이 가이드는 Python 애플리케이션을 X-Ray SDK에서 OpenTelemetry 계측으로 마이그레이션하는 데 도움이 됩니다. 일반적인 시나리오에 대한 코드 예제와 함께 자동 및 수동 계측 접근 방식을 모두 다룹니다.
Sections
제로 코드 자동 계측 솔루션
X-Ray SDK를 사용하면 요청을 추적하도록 애플리케이션 코드를 수정해야 했습니다. OpenTelemetry는 요청을 추적하기 위한 제로 코드 자동 계측 솔루션을 제공합니다. OpenTelemetry를 사용하면 제로 코드 자동 계측 솔루션을 사용하여 요청을 추적할 수 있습니다.
OpenTelemetry 기반 자동 계측을 사용하는 제로 코드
-
Python용 AWS Distro for OpenTelemetry(ADOT) 자동 계측 사용 - Python 애플리케이션에 대한 자동 계측은 AWS Distro for OpenTelemetry Python 자동 계측을 사용한 추적 및 지표를 참조하세요
. (선택 사항) ADOT Python 자동 계측 AWS 을 사용하여에서 애플리케이션을 자동으로 계측할 때 CloudWatch Application Signals를 활성화하여 현재 애플리케이션 상태를 모니터링하고 비즈니스 목표에 따라 장기 애플리케이션 성능을 추적할 수도 있습니다. Application Signals는 애플리케이션, 서비스 및 종속성에 대한 통합 애플리케이션 중심 보기를 제공하고 애플리케이션 상태를 모니터링하고 분류하는 데 도움이 됩니다.
-
OpenTelemetry Python 제로 코드 자동 계측 사용 - OpenTelemetry Python을 사용한 자동 계측은 Python 제로 코드 계측을 참조하세요
.
애플리케이션을 수동으로 계측
pip
명령을 사용하여 애플리케이션을 수동으로 계측할 수 있습니다.
추적 설정 초기화
Python용 ADOT 자동 계측 사용
Python용 ADOT 자동 계측을 사용하여 Python 애플리케이션에 대해 OpenTelemetry를 자동으로 구성할 수 있습니다. ADOT 자동 계측을 사용하면 수신 요청을 추적하거나 AWS SDK 또는 HTTP 클라이언트와 같은 라이브러리를 추적하기 위해 수동으로 코드를 변경할 필요가 없습니다. 자세한 내용은 AWS Distro for OpenTelemetry Python Auto-Instrumentation을 사용한 추적 및 지표를 참조하세요
Python용 ADOT 자동 계측은 다음을 지원합니다.
-
환경 변수를 통한 X-Ray 원격 샘플링
export OTEL_TRACES_SAMPLER=xray
-
X-Ray 추적 컨텍스트 전파(기본적으로 활성화됨)
-
리소스 감지(Amazon EC2, Amazon ECS 및 Amazon EKS 환경에 대한 리소스 감지는 기본적으로 활성화되어 있음)
-
지원되는 모든 OpenTelemetry 계측에 대한 자동 라이브러리 계측은 기본적으로 활성화됩니다.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
환경 변수를 통해 선택적으로를 비활성화할 수 있습니다(모두 기본적으로 활성화되어 있음). -
스팬 수동 생성
X-Ray 서비스 플러그인에서 OpenTelemetry AWS 리소스 공급자로
X-Ray SDK는 Amazon EC2, Amazon ECS 및 Elastic Beanstalk와 같은 호스팅 서비스에서 플랫폼별 정보를 캡처xray_recorder
하기 위해에 추가할 수 있는 플러그인을 제공합니다. 이는 정보를 리소스 속성으로 캡처하는 OpenTelemetry의 리소스 공급자와 유사합니다. 다양한 AWS 플랫폼에서 사용할 수 있는 리소스 공급자가 여러 개 있습니다.
-
AWS 확장 패키지를 설치하여 시작합니다.
pip install opentelemetry-sdk-extension-aws
-
원하는 리소스 감지기를 구성합니다. 다음 예제는 OpenTelemetry SDK에서 Amazon EC2 리소스 공급자를 구성하는 방법을 보여줍니다.
from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.extension.aws.resource.ec2 import ( AwsEc2ResourceDetector, ) from opentelemetry.sdk.resources import get_aggregated_resources provider = TracerProvider( active_span_processor=span_processor, resource=get_aggregated_resources([ AwsEc2ResourceDetector(), ])) trace.set_tracer_provider(provider)
수신 요청 추적
AWS SDK 계측
요청을 통해 발신 HTTP 호출 계측
다른 라이브러리에 대한 계측 지원
지원되는 라이브러리, 프레임워크, 애플리케이션 서버 및 JVM에서 OpenTelemetry Python에 지원되는 라이브러리 계측의 전체 목록을 찾을 수 있습니다. JVMs
또는 OpenTelemetry 레지스트리를 검색하여 OpenTelemetry가 계측을 지원하는지 확인할 수 있습니다. 검색을 시작하려면 레지스트리
추적 데이터 수동 생성
Python 애플리케이션에서를 사용하여 세그먼트 및 하위 세그먼트를 생성할 수 xray_recorder
있습니다. 자세한 내용은 Python 코드 수동 계측을 참조하세요. 트레이스 데이터에 주석과 메타데이터를 수동으로 추가할 수도 있습니다.
OpenTelemetry SDK를 사용하여 스팬 생성
start_as_current_span
API를 사용하여 스팬을 시작하고 스팬 생성을 위해 스팬을 설정합니다. 스팬 생성에 대한 예제는 스팬 생성을 참조하세요SERVER
종류 범위만 X-Ray 세그먼트로 변환되고 나머지는 X-Ray 하위 세그먼트로 변환됩니다.
from opentelemetry import trace from opentelemetry.trace import SpanKind import time tracer = trace.get_tracer("my.tracer.name") # Create a new span to track some work with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: time.sleep(1) # Create a nested span to track nested work with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: time.sleep(2) # the nested span is closed when it's out of scope # Now the parent span is the current span again time.sleep(1) # This span is also closed when it goes out of scope
OpenTelemetry SDK를 사용하여 트레이스에 주석 및 메타데이터 추가
X-Ray Python SDK는 트레이스에 주석put_annotation
과 메타데이터를 추가하기 put_metadata
위한 별도의 APIs와를 제공합니다. OpenTelemetry SDK에서 주석과 메타데이터는 단순히 스팬의 속성이며 set_attribute
API를 통해 추가됩니다.
트레이스의 주석으로 사용할 범위 속성은 값이 주석의 키-값 페어 목록aws.xray.annotations
인 예약된 키 아래에 추가됩니다. 다른 모든 스팬 속성은 변환된 세그먼트 또는 하위 세그먼트의 메타데이터가 됩니다.
또한 ADOT 수집기를 사용하는 경우 수집기 구성indexed_attributes
에서를 지정하여 X-Ray 주석으로 변환해야 하는 스팬 속성을 구성할 수 있습니다.
아래 예제에서는 OpenTelemetry SDK를 사용하여 트레이스에 주석과 메타데이터를 추가하는 방법을 보여줍니다.
with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: parent_span.set_attribute("TransactionId", "qwerty12345") parent_span.set_attribute("AccountId", "1234567890") # This will convert the TransactionId and AccountId to be searchable X-Ray annotations parent_span.set_attribute("aws.xray.annotations", ["TransactionId", "AccountId"]) with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: # The MicroTransactionId will be converted to X-Ray metadata for the child subsegment child_span.set_attribute("MicroTransactionId", "micro12345")
Lambda 계측
X-Ray에서 Lambda 함수를 모니터링하려면 X-Ray를 활성화하고 함수 호출 역할에 적절한 권한을 추가해야 합니다. 또한 함수의 다운스트림 요청을 추적하는 경우 X-Ray Python SDK로 코드를 계측합니다.
OpenTelemetry for X-Ray에서는 Application Signals가 꺼진 상태에서 CloudWatch Application Signals lambda 계층을 사용하는 것이 좋습니다. 이렇게 하면 함수가 자동으로 계측되고 함수 호출 및 함수의 다운스트림 요청에 대한 스팬이 생성됩니다. 추적 외에도 Application Signals를 사용하여 함수의 상태를 모니터링하는 데 관심이 있는 경우 Lambda에서 애플리케이션 활성화를 참조하세요.
-
AWS OpenTelemetry ARN용 Lambda 계층에서 함수에 필요한 Lambda 계층 ARNs 찾아 추가합니다.
-
함수에 대해 다음 환경 변수를 설정합니다.
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
- 함수에 대한 자동 계측을 로드합니다. -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
- Application Signals 모니터링을 비활성화합니다.
-
Lambda 계측을 사용하여 수동으로 스팬 생성
또한 함수 내에서 사용자 지정 스팬을 생성하여 작업을 추적할 수 있습니다. Application Signals Lambda 계층 자동 계측과 함께 opentelemetry-api
패키지만 사용하면 됩니다.
-
함수에를 종속성
opentelemetry-api
으로 포함 -
다음 코드 조각은 사용자 지정 스팬을 생성하는 샘플입니다.
from opentelemetry import trace # Get the tracer (auto‑configured by the Application Signals layer) tracer = trace.get_tracer(__name__) def handler(event, context): # This span is a child of the layer's root span with tracer.start_as_current_span("my-custom-span") as span: span.set_attribute("key1", "value1") span.add_event("custom-event", {"detail": "something happened"}) # Any logic you want to trace result = some_internal_logic() return { "statusCode": 200, "body": result }