As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Migrar para Python OpenTelemetry
Este guia ajuda você a migrar aplicativos Python do X-Ray SDK OpenTelemetry para a instrumentação. Ele abrange abordagens de instrumentação automática e manual, com exemplos de código para cenários comuns.
Soluções de instrumentação automática de código zero
Com o X-Ray SDK, você precisava modificar o código do aplicativo para rastrear solicitações. OpenTelemetry oferece soluções de instrumentação automática de código zero para rastrear solicitações. Com OpenTelemetry, você tem a opção de usar soluções de instrumentação automática de código zero para rastrear solicitações.
Código zero com OpenTelemetry instrumentações automáticas baseadas
-
(Opcional) Você também pode ativar o CloudWatch Application Signals ao instrumentar automaticamente seus aplicativos AWS com a instrumentação automática ADOT Python para monitorar a integridade atual do aplicativo e acompanhar o desempenho de longo prazo do aplicativo em relação aos seus objetivos de negócios. O Application Signals fornece uma visualização unificada e centrada em aplicações para aplicações, serviços e dependências, além de ajudar você a monitorar e realizar a triagem da integridade da aplicação.
Instrumente manualmente seus aplicativos
Você pode instrumentar manualmente seus aplicativos usando o pip
comando.
Inicialização da configuração de rastreamento
Com a instrumentação automática ADOT para Python
Você pode usar a instrumentação automática ADOT para Python para configurar OpenTelemetry automaticamente seus aplicativos Python. Ao usar a instrumentação automática ADOT, você não precisa fazer alterações manuais no código para rastrear solicitações recebidas ou rastrear bibliotecas, como os AWS clientes SDK ou HTTP. Para obter mais informações, consulte Rastreamento e métricas com a AWS distro for Python OpenTelemetry
A instrumentação automática ADOT para Python suporta:
-
Amostragem remota de raio-X por meio da variável de ambiente
export OTEL_TRACES_SAMPLER=xray
-
Propagação do contexto de rastreamento do X-Ray (ativada por padrão)
-
Detecção de recursos (a detecção de recursos para ambientes Amazon EC2, Amazon ECS e Amazon EKS é ativada por padrão)
-
As instrumentações automáticas da biblioteca para todas as OpenTelemetry instrumentações suportadas estão habilitadas por padrão. Você pode desativar seletivamente por meio da variável de
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
ambiente. (todos estão habilitados por padrão) -
Criação manual de vãos
De plug-ins de serviço X-Ray a provedores de OpenTelemetry AWS recursos
O X-Ray SDK fornece plug-ins que você pode adicionar ao xray_recorder
para capturar as informações específicas da plataforma do serviço hospedado, como Amazon, EC2 Amazon ECS e Elastic Beanstalk. É semelhante aos provedores de recursos, pois captura OpenTelemetry as informações como atributos de recursos. Há vários provedores de recursos disponíveis para diferentes AWS plataformas.
-
Comece instalando o pacote AWS de extensão,
pip install opentelemetry-sdk-extension-aws
-
Configure o detector de recursos desejado. O exemplo a seguir mostra como configurar o provedor de EC2 recursos da Amazon no 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)
Rastreando solicitações recebidas
AWS Instrumentação do SDK
Instrumentando chamadas HTTP de saída por meio de solicitações
Suporte de instrumentação para outras bibliotecas
Você pode encontrar a lista completa de instrumentações de biblioteca compatíveis com OpenTelemetry Python em Bibliotecas, estruturas, servidores
Como alternativa, você pode pesquisar no OpenTelemetry Registro para descobrir se OpenTelemetry suporta instrumentação. Consulte o Registro
Criação manual de dados de rastreamento
Você pode criar segmentos e subsegmentos usando o xray_recorder
em seu aplicativo Python. Para obter mais informações, consulte Instrumentando o código Python manualmente. Você também pode adicionar manualmente anotações e metadados aos dados de rastreamento.
Criação de extensões com OpenTelemetry o SDK
Use a start_as_current_span
API para iniciar uma extensão e configurá-la para criar extensões. Para exemplos sobre a criação de extensões, consulte Criação de extensões.SERVER
de tipo são convertidos em segmentos de raio-X, enquanto outros são convertidos em subsegmentos de raio-X.
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
Adicionar anotações e metadados aos rastreamentos com o SDK OpenTelemetry
O X-Ray Python SDK fornece anotações put_annotation
e put_metadata
metadados separados APIs a um rastreamento. No OpenTelemetry SDK, as anotações e os metadados são simplesmente atributos em um intervalo, adicionados por meio da API. set_attribute
Os atributos Span que você deseja que sejam anotações em um rastreamento são adicionados à chave reservada, aws.xray.annotations
cujo valor é uma lista de pares de anotações de valores-chave. Todos os outros atributos de extensão se tornam metadados no segmento ou subsegmento convertido.
Além disso, se você estiver usando o coletor ADOT, poderá configurar quais atributos de extensão devem ser convertidos em anotações X-Ray especificando o na configuração do indexed_attributes
coletor.
O exemplo abaixo demonstra como adicionar anotações e metadados a um rastreamento usando o SDK. OpenTelemetry
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")
Instrumentação Lambda
Para monitorar suas funções lambda no X-Ray, você ativa o X-Ray e adiciona as permissões apropriadas à função de invocação da função. Além disso, se você estiver rastreando solicitações downstream de sua função, estará instrumentando o código com o X-Ray Python SDK.
Com OpenTelemetry o for X-Ray, é recomendável usar a camada lambda do CloudWatch Application Signals com o Application Signals desativado. Isso instrumentará automaticamente sua função e gerará intervalos para a invocação da função e qualquer solicitação posterior de sua função. Além do rastreamento, se você estiver interessado em usar sinais de aplicativos para monitorar a integridade de sua função, consulte Habilitar seus aplicativos no Lambda.
-
Encontre o ARN da camada Lambda necessário para sua função em AWS Lambda Layer for e adicione-o. OpenTelemetry ARNs
-
Defina as seguintes variáveis de ambiente para sua função.
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
— Isso carrega a instrumentação automática para a função -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
— Isso desativará o monitoramento de sinais de aplicativos
-
Criação manual de extensões com instrumentação Lambda
Além disso, você pode gerar períodos personalizados em sua função para monitorar o trabalho. Você pode fazer isso usando somente o opentelemetry-api
pacote em conjunto com a instrumentação automática da camada lambda do Application Signals.
-
Inclua o
opentelemetry-api
como uma dependência em sua função -
O trecho de código a seguir é um exemplo para gerar extensões personalizadas
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 }