Tutorial: Uso del panel de .NET Aspire con aplicaciones de Python
El panel de .NET.NET Aspire proporciona una excelente experiencia de usuario para ver la telemetría y está disponible como una imagen de contenedor independiente que se puede usar con cualquier aplicación habilitada para OpenTelemetry. En este artículo, aprenderá a:
- Inicie el panel de .NET.NET Aspire en modo independiente.
- Use el panel de .NET Aspire con una aplicación Python.
Prerrequisitos
Para completar este tutorial, necesita lo siguiente:
-
Docker o Podman.
- Puede usar un entorno de ejecución de contenedor alternativo, pero los comandos de este artículo son para Docker.
- Python 3.9 o superior instalado localmente.
- Una aplicación de ejemplo.
Aplicación de ejemplo
Este tutorial se puede completar mediante Flask, Django o FastAPI. Se proporciona una aplicación de ejemplo en cada marco para ayudarle a seguir este tutorial. Descargue o clone la aplicación de ejemplo en la estación de trabajo local.
Para ejecutar la aplicación localmente:
Vaya a la carpeta de la aplicación:
cd msdocs-python-flask-webapp-quickstart
Cree un entorno virtual para la aplicación:
py -m venv .venv .\.venv\Scripts\Activate.ps1
Instale las dependencias:
pip install -r requirements.txt
Ejecute la aplicación:
flask run
Navegue a la aplicación de ejemplo en
http://localhost:5000
en un navegador web.
Agregar OpenTelemetry
Para usar el panel de .NET Aspire con la aplicación de Python, debe instalar el SDK y el exportador de OpenTelemetry. El SDK de OpenTelemetry proporciona la API para instrumentar la aplicación y el exportador envía datos de telemetría al panel de .NET Aspire.
Instale el SDK y el exportador de OpenTelemetry:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
Agregue un nuevo archivo a la aplicación denominado
otlp_tracing.py
y agregue el código siguiente: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
Actualice la aplicación (
app.py
para Flask,main.py
para FastAPI) para incluir las importaciones y llamar a la funciónconfigure_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__)
Reemplace las llamadas de
print
por llamadaslogger.info
en la aplicación.Reinicie la aplicación.
Instrumentación específica del marco
Esta instrumentación se ha centrado únicamente en agregar OpenTelemetry a nuestro código. Para obtener una instrumentación más detallada, puede utilizar los paquetes de instrumentación OpenTelemetry para los frameworks específicos que está utilizando.
Instale el paquete de instrumentación de Flask:
pip install opentelemetry-instrumentation-flask
Agregue el código siguiente a la aplicación:
from opentelemetry.instrumentation.flask import FlaskInstrumentor # add this line after configure_otel_otlp() call FlaskInstrumentor().instrument()
Inicio del panel de Aspire
Para iniciar el panel de Aspire en modo independiente, ejecute el siguiente comando Docker:
docker run --rm -it -p 18888:18888 -p 4317:18889 --name aspire-dashboard \
mcr.microsoft.com/dotnet/aspire-dashboard:9.0
En los registros de Docker, se muestran el punto de conexión y la clave del panel. Copie la clave y vaya a http://localhost:18888
en un explorador web. Escriba la clave para iniciar sesión en el panel.
Visualización de registros estructurados
Navegue por la aplicación Python y verá registros estructurados en el panel de Aspire. La página de registros estructurados muestra los registros de la aplicación y puede filtrar y buscar en los registros.
Pasos siguientes
Ha usado exitosamente el panel de .NET Aspire con una aplicación Python. Para obtener más información sobre el panel de .NET.NET Aspire, consulte la descripción general de Aspire y cómo gestionar una aplicación de Python con el host de aplicaciones de .NET.NET Aspire.