Instrumente sua aplicação Python com o OpenTelemetry para reportar dados de rastreamento ao Managed Service for OpenTelemetry. Após a conexão, o Application Real-Time Monitoring Service (ARMS) exibe a topologia da aplicação, traces, transações anômalas, transações lentas e análise de SQL.
Este tópico aborda três abordagens de instrumentação:
Instrumentação automática — Não requer alterações no código. Um agente OpenTelemetry instrumenta os frameworks suportados em tempo de execução.
Instrumentação manual — Oferece controle total. Adicione spans, atributos e baggage por meio do SDK OpenTelemetry.
Instrumentação combinada — Sobreponha spans personalizados à instrumentação automática para obter visibilidade direcionada.
Dica:
A Alibaba Cloud fornece um agente Python dedicado com observabilidade integrada para frameworks LLM, incluindo LlamaIndex, Dify, LangChain, OpenAI e Qwen. Ele gera métricas, traces e dados de profiling contínuo mais ricos do que o agente open source. Para mais detalhes, consulte
.
Pré-requisitos
Um endpoint e um token de autenticação obtidos no console do Managed Service for OpenTelemetry. Consulte Obter informações do ponto de acesso
Frameworks suportados
O OpenTelemetry oferece plug-ins de instrumentação automática para frameworks Python comuns. A tabela a seguir lista os frameworks suportados e seus requisitos de versão. Para a lista completa, consulte opentelemetry-python-contrib.
Na tabela,
~= V.N
significa
>= V.N
e
== V.*
. Por exemplo,
aiohttp ~= 3,0
indica a versão 3,0 ou posterior dentro da faixa 3.x.
Código de exemplo
Baixe o código de exemplo completo em python-opentelemetry-demo.
Escolha um protocolo de transporte
O Managed Service for OpenTelemetry aceita dados de rastreamento via HTTP e gRPC. Escolha a opção adequada ao seu ambiente de rede.
|
**Protocolo** |
**Mais indicado para** |
**Observações** |
|
HTTP |
A maioria dos ambientes |
Atravessa proxies e firewalls facilmente. Não exige cabeçalho de autenticação. |
|
gRPC |
Ambientes de baixa latência e alto throughput |
Requer o pacote |
Ambas as opções aparecem nos exemplos abaixo. Selecione uma conforme suas necessidades de rede.
Referência de placeholders
Substitua estes placeholders nos exemplos pelos seus valores reais:
|
**Placeholder** |
**Descrição** |
**Onde encontrar** |
|
|
Identifica sua aplicação no console ARMS. |
Definido por você. Exemplo: |
|
|
Nome do host da máquina que executa sua aplicação. |
Execute |
|
|
Endpoint para reportar dados de rastreamento (HTTP ou gRPC). |
Console do Managed Service for OpenTelemetry. Consulte Obter informações do ponto de acesso. |
|
|
Token de autenticação (apenas gRPC). |
Console do Managed Service for OpenTelemetry. Consulte Obter informações do ponto de acesso. |
Instrumentação automática
A instrumentação automática é o caminho mais rápido para o rastreamento distribuído. O agente OpenTelemetry instrumenta os frameworks suportados em tempo de execução, sem exigir alterações no código.
Etapa 1: Instale dependências
pip install django
pip install requests
pip install opentelemetry-distro \
opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
O comando opentelemetry-bootstrap detecta as bibliotecas instaladas e instala automaticamente os plug-ins de instrumentação correspondentes.
Etapa 2: Crie um projeto e uma aplicação Django
-
Crie um projeto AutoAndManualDemo:
django-admin startproject AutoAndManualDemo -
Crie uma aplicação HelloWorld no projeto:
cd AutoAndManualDemo # Create a HelloWorld application in the project. python manage.py startapp helloworld
Etapa 3: Adicionar o código da aplicação
-
Adicione o seguinte código ao arquivo
AutoAndManualDemo/helloworld/views.py:from django.http import HttpResponse from datetime import datetime # Create your views here. def hello_world_view(request): result = "Hello World! Current Time =" + str(get_time()) return HttpResponse(result) def get_time(): now = datetime.now() return now.strftime("%H:%M:%S") -
Crie um arquivo
AutoAndManualDemo/helloworld/urls.pye adicione o seguinte código:from django.urls import path from . import views urlpatterns = [ path('', views.hello_world_view, name='helloworld') ] -
Adicione o padrão de URL ao arquivo
AutoAndManualDemo/AutoAndManualDemo/urls.py:from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('helloworld/', include('helloworld.urls')), ]
Etapa 4: Execute a aplicação
Prefixe o comando de inicialização com opentelemetry-instrument e passe a configuração do exporter.
Reportar via HTTP
opentelemetry-instrument \
--traces_exporter console,otlp_proto_http \
--metrics_exporter none \
--service_name <your-service-name> \
--exporter_otlp_traces_endpoint <endpoint> \
python manage.py runserver --noreload
Para ocultar os dados de rastreamento no console, defina o parâmetro --traces_exporter como --traces_exporter otlp_proto_http.
A flag
--noreloadimpede que o Django execute o métodomanage.mainduas vezes.Se aparecer o erro
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False, defina a variável de ambiente antes da execução. Esse erro ocorre porque oopentelemetry-instrumentcarrega o arquivo de configurações padrão do Django (django/conf/global_settings.py) em vez das configurações do projeto.
export DJANGO_SETTINGS_MODULE=AutoAndManualDemo.settings
Etapa 5: Verifique o reporte de rastreamento
Acesse
http://127.0.0.1:8000/helloworld/no navegador. O console exibirá os dados de rastreamento e os reportará ao Managed Service for OpenTelemetry.Faça login no console ARMS.
No painel de navegação à esquerda, escolha Application Monitoring > Applications.
Na página Applications, localize a aplicação pelo nome do service configurado e clique em nela.
Na página de detalhes da aplicação, verifique se os traces aparecem. Devem ser exibidos dados de span correspondentes às requisições enviadas.
Se o ícone

aparecer na coluna
Language
, a aplicação está conectada ao Application Monitoring. Um hífen (
-
) indica uma conexão com o Managed Service for OpenTelemetry.
Instrumentação manual
Utilize a instrumentação manual para ter controle granular sobre spans, atributos e propagação de contexto. Essa abordagem adiciona chamadas ao SDK OpenTelemetry diretamente ao código.
Etapa 1: Instale dependências
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp
Etapa 2: Inicializar o OpenTelemetry
Crie um módulo de inicialização (por exemplo, manual.py) que configure o tracer provider e o exporter.
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
OTLPSpanExporter as OTLPSpanGrpcExporter,
)
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
OTLPSpanExporter as OTLPSpanHttpExporter,
)
from opentelemetry.sdk.resources import SERVICE_NAME, HOST_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
def init_opentelemetry():
resource = Resource(attributes={
SERVICE_NAME: "<your-service-name>",
HOST_NAME: "<host-name>",
})
# Option A: Export over gRPC
span_processor = BatchSpanProcessor(OTLPSpanGrpcExporter(
endpoint="<endpoint>",
headers=("Authentication=<token>"),
))
# Option B: Export over HTTP (uncomment to use)
# span_processor = BatchSpanProcessor(OTLPSpanHttpExporter(
# endpoint="<endpoint>",
# ))
trace_provider = TracerProvider(
resource=resource,
active_span_processor=span_processor,
)
trace.set_tracer_provider(trace_provider)
Etapa 3: Crie spans
Após a inicialização, obtenha um tracer e crie spans para rastrear operações.
tracer = trace.get_tracer(__name__)
# Context manager pattern
with tracer.start_as_current_span("child_span") as child_span:
print("hello world")
Aninhe spans para representar relações pai-filho:
def outer_method():
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("parent_span") as parent_span:
inner_method()
def inner_method():
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("child_span") as child_span:
print("hello world")
Etapa 4: Obter o trace ID e o span ID
Extraia o trace ID e o span ID do contexto do span atual. Esses IDs são úteis para correlacionar logs com traces.
ctx = trace.get_current_span().get_span_context()
trace_id = '{trace:032x}'.format(trace=ctx.trace_id)
span_id = '{span:016x}'.format(span=ctx.span_id)
print(trace_id)
print(span_id)
Etapa 5: Propagar metadados personalizados com a Baggage API
A Baggage API do OpenTelemetry propaga pares chave-valor entre spans dentro de um trace. Use baggage para passar metadados — como IDs de usuário, IDs de tenant ou contexto de requisição — entre services.
from opentelemetry import trace, baggage
def baggage_and_attribute_usage():
tracer = trace.get_tracer(__name__)
# Set baggage at the global level
global_ctx = baggage.set_baggage("key", "value_from_global_ctx")
# Create a span with custom attributes
with tracer.start_as_current_span(
name='baggage_parent_span',
attributes={'attribute_key': 'value'},
) as baggage_parent_span:
# Set baggage in the parent context
parent_ctx = baggage.set_baggage("key", "value_from_parent_ctx")
with tracer.start_as_current_span(
name='baggage_child_span',
context=parent_ctx,
) as baggage_child_span:
# Set baggage in the child context
child_ctx = baggage.set_baggage("key", "value_from_child_ctx")
# Read baggage values from each context
print(baggage.get_baggage("key", global_ctx)) # value_from_global_ctx
print(baggage.get_baggage("key", parent_ctx)) # value_from_parent_ctx
print(baggage.get_baggage("key", child_ctx)) # value_from_child_ctx
Etapa 6: Execute e verifique
python manual.py
Após a execução da aplicação, verifique os dados de rastreamento no console ARMS. Siga as etapas na seção Verificar o reporte de rastreamento, em Instrumentação automática.
Instrumentação combinada
Combine instrumentações automática e manual para obter ampla cobertura de frameworks pelo agente e adicionar spans personalizados para operações críticas de negócio. Essa abordagem utiliza o agente de instrumentação automática para rastreamento no nível do framework e adiciona chamadas SDK para spans específicos da aplicação.
Etapa 1: Instale dependências
pip install django
pip install requests
pip install opentelemetry-sdk
pip install opentelemetry-instrumentation-django
pip install opentelemetry-exporter-otlp
Etapa 2: Crie um projeto e uma aplicação Django
-
Crie um projeto AutoAndManualDemo:
django-admin startproject AutoAndManualDemo -
Crie uma aplicação HelloWorld no projeto:
cd AutoAndManualDemo # Create a HelloWorld application in the project. python manage.py startapp helloworld
Etapa 3: Adicionar spans personalizados ao código
Importe a API de rastreamento do OpenTelemetry e crie spans em torno das operações que deseja rastrear.
O exemplo de view Django a seguir adiciona dois spans personalizados (hello_world_span e time_span) sobre os spans criados automaticamente pelo plug-in de instrumentação do Django. Modifique o arquivo helloworld/views.py:
from django.http import HttpResponse
from opentelemetry import trace
from datetime import datetime
def hello_world_view(request):
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("hello_world_span") as hello_world_span:
result = "Hello World! Current Time =" + str(get_time())
return HttpResponse(result)
def get_time():
now = datetime.now()
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("time_span") as time_span:
return now.strftime("%H:%M:%S")
Etapa 4: Modifique o arquivo urls.py
-
Crie um arquivo
helloworld/urls.pye adicione o seguinte código:from django.urls import path from . import views urlpatterns = [ path('', views.hello_world_view, name='helloworld') ] -
Adicione o padrão de URL ao arquivo
AutoAndManualDemo/AutoAndManualDemo/urls.py:from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('helloworld/', include('helloworld.urls')), ]
Etapa 5: Configure o tracer provider
Crie um módulo de inicialização que configure o exporter e o tracer provider. Adicione o seguinte código ao código de inicialização do OpenTelemetry no arquivo manual.py. Importe esse módulo no início da inicialização da aplicação (por exemplo, em manage.py ou no ponto de entrada WSGI/ASGI).
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# To use HTTP instead, uncomment the following line and comment out the gRPC import:
# from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import SERVICE_NAME, HOST_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
resource = Resource(attributes={
SERVICE_NAME: "<your-service-name>",
HOST_NAME: "<host-name>",
})
trace.set_tracer_provider(TracerProvider(resource=resource))
# Export traces over gRPC
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(OTLPSpanExporter(
endpoint="<endpoint>",
headers="Authentication=<token>", # Required for gRPC only
))
)
# Also print traces to the console (useful for debugging)
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(ConsoleSpanExporter())
)
Etapa 6: Execute e verifique
python manage.py runserver --noreload
A flag
--noreloadimpede que o Django execute o métodomanage.mainduas vezes.Se ocorrer o erro
ImportError(symbol not found in flat namespace '_CFRelease'), instale o pacote gRPC:
pip install grpcio
Envie uma requisição para http://127.0.0.1:8000/helloworld/ e verifique os dados de rastreamento no console ARMS. Siga as etapas na seção Verificar o reporte de rastreamento, em Instrumentação automática.
Visualize dados de monitoramento
Faça login no console ARMS.
No painel de navegação à esquerda, escolha Application Monitoring > Applications.
Na página Applications, clique em no nome da aplicação.
Na página de detalhes da aplicação, visualize traces, a topologia da aplicação, transações anômalas, transações lentas e dados de análise de SQL.
Se o ícone

aparecer na coluna
Language
, a aplicação está conectada ao Application Monitoring. Um hífen (
-
) indica uma conexão com o Managed Service for OpenTelemetry.