Поделиться через


Руководство. Использование панели мониторинга .NET Aspire с приложениями Python

Панель мониторинга .NET.NET Aspire предоставляет отличный опыт пользователя при просмотре телеметрии и доступна в виде автономного образа контейнера, который можно использовать с любым приложением с поддержкой OpenTelemetry. В этой статье вы узнаете, как:

  • Запустите панель мониторинга .NET.NET Aspire в автономном режиме.
  • Используйте панель мониторинга .NET Aspire с приложением Python.

Необходимые условия

Для работы с этим руководством вам потребуется следующее:

  • Docker или Podman.
    • Вы можете использовать альтернативную среду выполнения контейнера, но команды, приведенные в этой статье, предназначены для Docker.
  • Python 3.9 или более поздней версии локально установлен.
  • Пример приложения.

Пример приложения

Это руководство можно выполнить с помощью Flask, Django или FastAPI. Пример приложения в каждом фреймворке предоставляется, чтобы помочь вам следить за этим руководством. Скачайте или клонируйте пример приложения на локальную рабочую станцию.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

Чтобы запустить приложение локально, выполните следующие действия:

  1. Перейдите в папку приложения:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Создайте виртуальную среду для приложения:

    py -m venv .venv
    .\.venv\Scripts\Activate.ps1
    
  3. Установите зависимости:

    pip install -r requirements.txt
    
  4. Запустите приложение:

    flask run
    
  5. Перейдите к образцу приложения http://localhost:5000 в веб-браузере.

    снимок экрана приложения Flask, работающего локально в браузере

Добавление OpenTelemetry

Чтобы использовать панель мониторинга .NET Aspire с приложением Python, необходимо установить пакет SDK OpenTelemetry и экспортер. Пакет SDK OpenTelemetry предоставляет API для инструментирования приложения, а экспортер отправляет данные телеметрии на панель мониторинга .NET Aspire.

  1. Установите пакет SDK OpenTelemetry и экспортер:

    pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
    
  2. Добавьте новый файл в приложение с именем 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
    
  3. Обновите приложение (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__)
    
  4. Замените вызовы print вызовами logger.info в приложении.

  5. Перезапустите приложение.

Инструментирование, специфичное для фреймворка

Это инструментирование сосредоточено исключительно на добавлении OpenTelemetry в наш код. Для более подробного инструментирования можно использовать пакеты инструментирования OpenTelemetry для конкретных платформ, которые вы используете.

  1. Установите пакет инструментирования Flask:

    pip install opentelemetry-instrumentation-flask
    
  2. Добавьте следующий код в приложение:

    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. На странице структурированных журналов отображаются журналы из приложения, а также можно фильтровать и искать журналы.

снимок экрана панели мониторинга Aspire с Python журналами приложений

Дальнейшие действия

Вы успешно использовали панель мониторинга .NET Aspire с приложением Python. Дополнительные сведения о панели мониторинга .NET.NET Aspire см. в обзоре панели мониторинга Aspire и о том, как организовать работу приложения Python с помощью хоста приложения .NET.NET Aspire.