次の方法で共有


チュートリアル: .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. Web ブラウザーの http://localhost:5000 でサンプル アプリケーションを参照します。

    ブラウザー でローカルで実行されている Flask アプリのスクリーンショット

OpenTelemetry の追加

.NET Aspire アプリで Python ダッシュボードを使用するには、OpenTelemetry SDK とエクスポーターをインストールする必要があります。 OpenTelemetry SDK はアプリケーションをインストルメント化するための API を提供し、エクスポーターはテレメトリ データを .NET Aspire ダッシュボードに送信します。

  1. OpenTelemetry SDK とエクスポーターをインストールします。

    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 ログに、ダッシュボードのエンドポイントとキーが表示されます。 キーをコピーし、Web ブラウザーで http://localhost:18888 に移動します。 ダッシュボードにログインするキーを入力します。

構造化ログの表示

Python アプリケーション内を移動すると、Aspire ダッシュボードに構造化されたログが表示されます。 構造化ログ ページには、アプリケーションのログが表示され、ログをフィルター処理して検索できます。

Screenshot of the Aspire dashboard showing the Python application logsPython アプリケーション ログ を示す ダッシュボードのスクリーンショット

次の手順

.NET Aspire ダッシュボードを Python アプリケーションで正常に使用しました。 .NET .NET Aspire ダッシュボードの詳細については、Aspire ダッシュボードの概要の と、.NET Aspireを使用して アプリケーションを調整する方法を参照してください。