Tutorial: Usar o painel .NET Aspire com aplicativos Python
O painel .NET.NET Aspire fornece uma excelente experiência do usuário para exibir a telemetria e está disponível como uma imagem de contêiner autônoma que pode ser usada com qualquer aplicativo com suporte a OpenTelemetry. Neste artigo, você aprenderá a:
- Inicie o painel .NET.NET Aspire no modo autônomo.
- Use o painel .NET Aspire com o aplicativo Python.
Pré-requisitos
Para concluir este tutorial, você precisa do seguinte:
-
Docker ou Podman.
- Você pode usar um runtime de contêiner alternativo, mas os comandos neste artigo são para Docker.
- Python 3.9 ou superior instalado localmente.
- Um aplicativo de exemplo.
Aplicativo de exemplo
Este tutorial pode ser concluído usando Flask, Django ou FastAPI. Um aplicativo de exemplo em cada estrutura é fornecido para ajudá-lo a acompanhar este tutorial. Baixe ou clone o aplicativo de exemplo na estação de trabalho local.
- Flask
- FastAPI
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
Para executar o aplicativo localmente:
- Flask
- FastAPI
Vá para a pasta do aplicativo:
cd msdocs-python-flask-webapp-quickstart
Crie um ambiente virtual para o aplicativo:
py -m venv .venv .\.venv\Scripts\Activate.ps1
Instale as dependências:
pip install -r requirements.txt
Execute o aplicativo:
flask run
Navegue até o aplicativo de exemplo em
http://localhost:5000
em um navegador da Web.
Adicionando OpenTelemetry
Para usar o painel .NET Aspire com seu aplicativo Python, você precisa instalar o SDK e o exportador do OpenTelemetry. O SDK do OpenTelemetry fornece a API para instrumentar seu aplicativo e o exportador envia dados de telemetria para o painel de .NET Aspire.
Instale o SDK OpenTelemetry e o exportador:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
Adicione um novo arquivo ao aplicativo chamado
otlp_tracing.py
e adicione o seguinte código:import logging from opentelemetry import metrics, trace from opentelemetry._logs import set_logger_provider from opentelemetry.exporter.otlp.proto.grpc._log_exporter import ( OTLPLogExporter, ) from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor def configure_oltp_grpc_tracing( endpoint: str = None ) -> trace.Tracer: # Configure Tracing traceProvider = TracerProvider() processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint)) traceProvider.add_span_processor(processor) trace.set_tracer_provider(traceProvider) # Configure Metrics reader = PeriodicExportingMetricReader(OTLPMetricExporter(endpoint=endpoint)) meterProvider = MeterProvider(metric_readers=[reader]) metrics.set_meter_provider(meterProvider) # Configure Logging logger_provider = LoggerProvider() set_logger_provider(logger_provider) exporter = OTLPLogExporter(endpoint=endpoint) logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter)) handler = LoggingHandler(level=logging.NOTSET, logger_provider=logger_provider) handler.setFormatter(logging.Formatter("Python: %(message)s")) # Attach OTLP handler to root logger logging.getLogger().addHandler(handler) tracer = trace.get_tracer(__name__) return tracer
Atualize seu aplicativo (
app.py
para Flask,main.py
para FastAPI) para incluir as importações e chamar a funçãoconfigure_oltp_grpc_tracing
:import logging from otlp_tracing import configure_otel_otlp logging.basicConfig(level=logging.INFO) tracer = configure_otel_otlp() logger = logging.getLogger(__name__)
Substitua as chamadas
print
por chamadaslogger.info
em seu aplicativo.Reinicie seu aplicativo.
Instrumentação específica da estrutura
Essa instrumentação se concentrou apenas em adicionar OpenTelemetry ao nosso código. Para instrumentação mais detalhada, você pode usar os pacotes de instrumentação OpenTelemetry para as estruturas específicas que você está usando.
Instale o pacote de instrumentação do Flask:
pip install opentelemetry-instrumentation-flask
Adicione o seguinte código ao seu aplicativo:
from opentelemetry.instrumentation.flask import FlaskInstrumentor # add this line after configure_otel_otlp() call FlaskInstrumentor().instrument()
Iniciar o painel de Aspire
Para iniciar o painel Aspire no modo autônomo, execute o seguinte comando Docker:
docker run --rm -it -p 18888:18888 -p 4317:18889 --name aspire-dashboard \
mcr.microsoft.com/dotnet/aspire-dashboard:9.0
Nos logs de Docker, o endpoint e a chave do painel são exibidos. Copie a chave e navegue até http://localhost:18888
em um navegador da Web. Insira a chave para fazer logon no painel.
Exibir logs estruturados
Navegue pelo aplicativo Python e verá logs estruturados no painel Aspire. A página de logs estruturados exibe logs do seu aplicativo, e você pode filtrar e pesquisar os logs.
Próximas etapas
Você usou com êxito o painel .NET Aspire com um aplicativo Python. Para saber mais sobre o painel de .NET.NET Aspire, consulte a visão geral do painel Aspire e como orquestrar um aplicativo Python com o host do aplicativo .NET.NET Aspire.