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 aplicativos para aplicativos, serviços e dependências, além de ajudar você a monitorar e realizar a triagem da integridade do aplicativo.
Instrumente suas aplicações manualmente
Você pode instrumentar suas aplicações manualmente com o comando pip.
Inicialização da configuração de rastreamento
Com instrumentação automática do 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 do ADOT para Python é compatível com:
-
Amostragem remota do X-Ray por meio de variável de ambiente
export OTEL_TRACES_SAMPLER=xray -
Propagação do contexto de rastreamento do X-Ray (habilitada 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 desativá-las seletivamente por meio da variável de ambiente
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS(todas são habilitadas por padrão) -
Criação manual de expansões
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)
Rastreamento de solicitações de entrada
AWS Instrumentação do SDK
Instrumentar 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 Registry
Criar dados de rastreamento manualmente
Você pode criar segmentos e subsegmentos usando o xray_recorder na sua aplicação Python. Para obter mais informações, consulte Instrumentar 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 ver exemplos de criação de extensões, consulte Criar extensõesSERVER são convertidos em segmentos do X-Ray, enquanto outros são convertidos em subsegmentos do 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
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 de extensão, que você quer 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 valor-chave. Todos os outros atributos de extensão se tornam metadados no segmento ou no subsegmento convertido.
Além disso, se você estiver usando o coletor ADOT, poderá configurar quais atributos de extensão deverão ser convertidos em anotações do X-Ray especificando o indexed_attributes na configuração do 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 do Lambda
Para monitorar suas funções do lambda no X-Ray, você habilita o X-Ray e adiciona as permissões apropriadas ao perfil de invocação da função. Além disso, se você rastreia solicitações downstream da sua função, está 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 instrumenta automaticamente sua função e gera extensões para a invocação da função e qualquer solicitação downstream da sua função. Além do rastreamento, se você tiver interesse em usar o Application Signals para monitorar a integridade da sua função, consulte Ativar suas aplicações 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: carrega a instrumentação automática para a função -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false: desabilitará o monitoramento do Application Signals
-
Criar manualmente extensões com instrumentação do Lambda
Além disso, você pode gerar extensões personalizadas na sua função para monitorar o trabalho. Você pode fazer isso usando somente o pacote opentelemetry-api em conjunto com a instrumentação automática da camada do Lambda do Application Signals.
-
Inclua a
opentelemetry-apicomo uma dependência na sua função -
O snippet 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 }