Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Migrar a OpenTelemetry Python
Esta guía le ayuda a migrar las aplicaciones de Python del SDK de X-Ray a la OpenTelemetry instrumentación. Abarca los enfoques de instrumentación automática y manual, con ejemplos de código para escenarios comunes.
Soluciones de instrumentación automática sin código
Con el SDK de X-Ray, tenías que modificar el código de tu aplicación para rastrear las solicitudes. OpenTelemetry ofrece soluciones de autoinstrumentación sin código para rastrear las solicitudes. Con OpenTelemetry, tiene la opción de utilizar soluciones de autoinstrumentación sin código para rastrear las solicitudes.
Código cero con instrumentaciones automáticas basadas OpenTelemetry
-
Uso de la AWS distribución para la instrumentación automática OpenTelemetry (ADOT) para Python: para obtener información sobre la instrumentación automática para aplicaciones de Python, consulte Seguimiento y métricas con la distribución para la AWS instrumentación
automática de Python. OpenTelemetry (Opcional) También puede habilitar CloudWatch Application Signals al instrumentar automáticamente sus aplicaciones AWS con la instrumentación automática de ADOT Python para monitorear el estado actual de las aplicaciones y realizar un seguimiento del rendimiento de las aplicaciones a largo plazo en comparación con sus objetivos comerciales. Application Signals le proporciona una visión unificada y centrada en las aplicaciones de sus aplicaciones, servicios y dependencias y lo ayuda a supervisar y evaluar el estado de las aplicaciones.
Instrumentación de las aplicaciones manualmente
Puede instrumentar las aplicaciones manualmente mediante el comando pip.
Inicialización de la configuración de seguimiento
Con la instrumentación automática de ADOT para Python
Puede utilizar la instrumentación automática de ADOT para Python para configurar automáticamente OpenTelemetry sus aplicaciones de Python. Al utilizar la instrumentación automática de ADOT, no es necesario realizar cambios manuales en el código para rastrear las solicitudes entrantes ni para rastrear bibliotecas como el AWS SDK o los clientes HTTP. Para obtener más información, consulte Seguimiento y métricas con la AWS distribución para la instrumentación automática de OpenTelemetry Python
La instrumentación automática de ADOT para Python admite:
-
Muestreo remoto de X-Ray a través de la variable de entorno
export OTEL_TRACES_SAMPLER=xray -
Propagación de contexto de rastros de X-Ray (habilitada de forma predeterminada)
-
Detección de recursos (la detección de recursos para los entornos de Amazon EC2, Amazon ECS y Amazon EKS está habilitada de forma predeterminada)
-
Las instrumentaciones de biblioteca automáticas para todas las OpenTelemetry instrumentaciones compatibles están habilitadas de forma predeterminada. Puede desactivarlas de forma selectiva a través de la variable de entorno
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS(todas están habilitadas de forma predeterminada) -
Creación manual de intervalos
Desde complementos del servicio de X-Ray hasta proveedores de OpenTelemetry AWS recursos
El SDK de X-Ray incluye complementos que se pueden añadir xray_recorder para capturar la información específica de la plataforma desde el servicio hospedado, como Amazon EC2, Amazon ECS y Elastic Beanstalk. Es similar a los proveedores de recursos en el sentido de OpenTelemetry que captura la información como atributos de recursos. Hay varios proveedores de recursos disponibles para diferentes AWS plataformas.
-
Comience por instalar el paquete AWS de extensión,
pip install opentelemetry-sdk-extension-aws -
Configure el detector de recursos deseado. El siguiente ejemplo muestra cómo configurar el proveedor de EC2 recursos de Amazon en el OpenTelemetry SDK.
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)
Seguimiento de solicitudes entrantes
AWS Instrumentación del SDK
Instrumentación de llamadas a HTTP salientes a través de solicitudes
Compatibilidad de instrumentación para otras bibliotecas
Puede encontrar la lista completa de instrumentaciones de biblioteca compatibles para OpenTelemetry Python en Bibliotecas, marcos, servidores de aplicaciones
También puedes buscar en el OpenTelemetry Registro si es OpenTelemetry compatible con la instrumentación. Consulte Registro
Creación manual de datos de rastros
Puede crear segmentos y subsegmentos mediante xray_recorder en la aplicación de Python. Para obtener más información, consulte Instrumentación manual del código de Python. También puede agregar anotaciones y metadatos de forma manual a los datos de rastros.
Cómo crear intervalos con OpenTelemetry el SDK
Use la API de start_as_current_span para iniciar un intervalo y configúrelo para crear intervalos. Para ver ejemplos sobre la creación de intervalos, consulte Creación de intervalosSERVER se convierten en segmentos de X-Ray, mientras que otros se convierten en subsegmentos de 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
Añadir anotaciones y metadatos a las trazas con el SDK OpenTelemetry
El SDK de Python de X-Ray proporciona anotaciones put_annotation y metadatos independientes APIs put_metadata para añadir anotaciones y metadatos a una traza. En el OpenTelemetry SDK, las anotaciones y los metadatos son simplemente atributos de un intervalo que se agregan a través de la set_attribute API.
Los atributos de intervalo que desee que sean anotaciones en un rastro se agregan en la clave reservada, aws.xray.annotations cuyo valor es una lista de pares de anotaciones clave-valor. Todos los demás atributos del intervalo se convierten en metadatos del segmento o subsegmento convertido.
Además, si utiliza el recopilador de ADOT, puede configurar qué atributos de intervalo deben convertirse en anotaciones de X-Ray especificando indexed_attributes en la configuración del recopilador.
En el siguiente ejemplo, se muestra cómo añadir anotaciones y metadatos a una traza mediante OpenTelemetry el 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")
Instrumentación de Lambda
Para supervisar las funciones de lambda en X-Ray, habilite X-Ray y agregue los permisos adecuados al rol de invocación de la función. Además, si está rastreando las solicitudes posteriores de la función, estaría instrumentando el código con X-Ray Python SDK.
En OpenTelemetry el caso de X-Ray, se recomienda utilizar la capa lambda de CloudWatch Application Signals con Application Signals desactivada. Esto instrumentará automáticamente la función y generará intervalos para la invocación de la función y cualquier solicitud posterior de la función. Además del rastreo, si está interesado en usar señales de las aplicaciones para supervisar el estado de su función, consulte Habilitar las aplicaciones en Lambda.
-
Busque el ARN de la capa Lambda necesario para su función en AWS Lambda Layer for y agréguelo. OpenTelemetry ARNs
-
Establezca las siguientes variables de entorno para la función.
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument: esto carga la instrumentación automática de la función -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false: esto desactivará la supervisión de las señales de las aplicaciones
-
Creación manual de intervalos con instrumentación de Lambda
Además, puede generar intervalos personalizados dentro de la función para realizar un seguimiento del trabajo. Puede hacerlo utilizando solo el paquete opentelemetry-api junto con la instrumentación automática de la capa de Lambda de señales de las aplicaciones.
-
Incluir la
opentelemetry-apicomo una dependencia en la función -
El siguiente fragmento de código es un ejemplo para generar intervalos personalizados
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 }