Samouczek: używanie pulpitu nawigacyjnego .NET Aspire z aplikacjami Python
Panel .NET.NET Aspire zapewnia doskonałe doświadczenie użytkownika przy wyświetlaniu danych telemetrycznych i jest dostępny jako obraz kontenera, który może być używany z każdą aplikacją obsługującą OpenTelemetry. Z tego artykułu dowiesz się, jak wykonywać następujące działania:
- Uruchom pulpit nawigacyjny .NET.NET Aspire w trybie autonomicznym.
- Użyj pulpitu nawigacyjnego .NET Aspire z aplikacją Python.
Warunki wstępne
Do ukończenia tego samouczka potrzebne są następujące elementy:
-
Docker lub Podman.
- Możesz użyć alternatywnego środowiska uruchomieniowego kontenera, ale polecenia w tym artykule dotyczą Docker.
- Python 3.9 lub nowszy zainstalowany lokalnie.
- Przykładowa aplikacja.
Przykładowa aplikacja
Ten samouczek można ukończyć przy użyciu platformy Flask, Django lub FastAPI. Udostępniono przykładową aplikację dla każdego środowiska, która pomoże Ci śledzić ten samouczek. Pobierz lub sklonuj przykładową aplikację na lokalną stację roboczą.
-
Flask - FastAPI
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
Aby uruchomić aplikację lokalnie:
-
Flask - FastAPI
Przejdź do folderu aplikacji:
cd msdocs-python-flask-webapp-quickstart
Utwórz środowisko wirtualne dla aplikacji:
py -m venv .venv .\.venv\Scripts\Activate.ps1
Zainstaluj zależności:
pip install -r requirements.txt
Uruchom aplikację:
flask run
Przejdź do przykładowej aplikacji pod adresem
http://localhost:5000
w przeglądarce internetowej.
Dodawanie OpenTelemetry
Aby użyć pulpitu nawigacyjnego .NET Aspire z aplikacją Python, musisz zainstalować zestaw OpenTelemetry SDK i eksportera. Zestaw SDK OpenTelemetry udostępnia interfejs API do instrumentowania aplikacji, a eksporter wysyła dane telemetryczne do pulpitu nawigacyjnego .NET Aspire.
Zainstaluj zestaw OpenTelemetry SDK i eksportera:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
Dodaj nowy plik do aplikacji o nazwie
otlp_tracing.py
i dodaj następujący kod: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
Zaktualizuj aplikację (
app.py
dla platformy Flask,main.py
dla interfejsu FastAPI), aby uwzględnić importy i wywołać funkcjęconfigure_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__)
Zastąp wywołania
print
wywołaniamilogger.info
w aplikacji.Uruchom ponownie aplikację.
Instrumentacja specyficzna dla platformy
Ta instrumentacja koncentruje się tylko na dodawaniu OpenTelemetry do naszego kodu. Aby uzyskać bardziej szczegółową instrumentację, możesz użyć pakietów instrumentacji OpenTelemetry dla określonych platform, których używasz.
-
Flask - FastAPI
Zainstaluj pakiet instrumentacji platformy Flask:
pip install opentelemetry-instrumentation-flask
Dodaj następujący kod do aplikacji:
from opentelemetry.instrumentation.flask import FlaskInstrumentor # add this line after configure_otel_otlp() call FlaskInstrumentor().instrument()
Uruchamianie pulpitu nawigacyjnego Aspire
Aby uruchomić pulpit nawigacyjny Aspire w trybie autonomicznym, uruchom następujące polecenie Docker:
docker run --rm -it -p 18888:18888 -p 4317:18889 --name aspire-dashboard \
mcr.microsoft.com/dotnet/aspire-dashboard:9.0
W dziennikach Docker zostanie wyświetlony punkt końcowy i klucz pulpitu nawigacyjnego. Skopiuj klucz i przejdź do http://localhost:18888
w przeglądarce internetowej. Wprowadź klucz, aby zalogować się do pulpitu nawigacyjnego.
Wyświetlanie dzienników strukturalnych
Nawiguj po aplikacji Python i zobaczysz dzienniki ustrukturyzowane na pulpicie nawigacyjnym Aspire. Na stronie z ustrukturyzowanymi dziennikami są wyświetlane dzienniki z aplikacji, a użytkownik może je filtrować i przeszukiwać.
Następne kroki
Pomyślnie użyto pulpitu nawigacyjnego .NET Aspire z aplikacją Python. Aby dowiedzieć się więcej na temat pulpitu nawigacyjnego .NET.NET Aspire, zapoznaj się z omówieniem pulpitu nawigacyjnego Aspire oraz sposobem organizowania aplikacji Python z użyciem hosta aplikacji .NET.NET Aspire.