Руководство. Использование панели мониторинга .NET Aspire с приложениями Python
Панель мониторинга .NET.NET Aspire предоставляет отличный опыт пользователя при просмотре телеметрии и доступна в виде автономного образа контейнера, который можно использовать с любым приложением с поддержкой OpenTelemetry. В этой статье вы узнаете, как:
- Запустите панель мониторинга .NET.NET Aspire в автономном режиме.
- Используйте панель мониторинга .NET Aspire с приложением Python.
Необходимые условия
Для работы с этим руководством вам потребуется следующее:
-
Docker или Podman.
- Вы можете использовать альтернативную среду выполнения контейнера, но команды, приведенные в этой статье, предназначены для Docker.
- Python 3.9 или более поздней версии локально установлен.
- Пример приложения.
Пример приложения
Это руководство можно выполнить с помощью Flask, Django или FastAPI. Пример приложения в каждом фреймворке предоставляется, чтобы помочь вам следить за этим руководством. Скачайте или клонируйте пример приложения на локальную рабочую станцию.
Чтобы запустить приложение локально, выполните следующие действия:
Перейдите в папку приложения:
cd msdocs-python-flask-webapp-quickstart
Создайте виртуальную среду для приложения:
py -m venv .venv .\.venv\Scripts\Activate.ps1
Установите зависимости:
pip install -r requirements.txt
Запустите приложение:
flask run
Перейдите к образцу приложения
http://localhost:5000
в веб-браузере.
Добавление OpenTelemetry
Чтобы использовать панель мониторинга .NET Aspire с приложением Python, необходимо установить пакет SDK OpenTelemetry и экспортер. Пакет SDK OpenTelemetry предоставляет API для инструментирования приложения, а экспортер отправляет данные телеметрии на панель мониторинга .NET Aspire.
Установите пакет SDK OpenTelemetry и экспортер:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
Добавьте новый файл в приложение с именем
otlp_tracing.py
и добавьте следующий код: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
Обновите приложение (
app.py
для Flask,main.py
для FastAPI), чтобы включить импорт и вызвать функцию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__)
Замените вызовы
print
вызовамиlogger.info
в приложении.Перезапустите приложение.
Инструментирование, специфичное для фреймворка
Это инструментирование сосредоточено исключительно на добавлении OpenTelemetry в наш код. Для более подробного инструментирования можно использовать пакеты инструментирования OpenTelemetry для конкретных платформ, которые вы используете.
Установите пакет инструментирования Flask:
pip install opentelemetry-instrumentation-flask
Добавьте следующий код в приложение:
from opentelemetry.instrumentation.flask import FlaskInstrumentor # add this line after configure_otel_otlp() call FlaskInstrumentor().instrument()
Запуск панели мониторинга Aspire
Чтобы запустить панель мониторинга Aspire в автономном режиме, выполните следующую команду Docker:
docker run --rm -it -p 18888:18888 -p 4317:18889 --name aspire-dashboard \
mcr.microsoft.com/dotnet/aspire-dashboard:9.0
В журналах Docker отображается конечная точка и ключ панели мониторинга. Скопируйте ключ и перейдите к http://localhost:18888
в веб-браузере. Введите ключ для входа на панель мониторинга.
Просмотр структурированных журналов
Перейдите по Python приложению, и вы увидите структурированные журналы на панели мониторинга Aspire. На странице структурированных журналов отображаются журналы из приложения, а также можно фильтровать и искать журналы.
Дальнейшие действия
Вы успешно использовали панель мониторинга .NET Aspire с приложением Python. Дополнительные сведения о панели мониторинга .NET.NET Aspire см. в обзоре панели мониторинга Aspire и о том, как организовать работу приложения Python с помощью хоста приложения .NET.NET Aspire.
.NET Aspire