MLflow によって生成されたトレースは、 OpenTelemetry トレース スペックと互換性があります。 したがって、MLflow トレースは、OpenTelemetry をサポートするさまざまな可観測性ソリューションにエクスポートできます。
エクスポート モード
MLflow では、トレースに対して次の 3 つのエクスポート モードがサポートされています。
- MLflow 追跡のみ (既定):トレースは MLflow 追跡サーバーにのみ送信されます。
- OpenTelemetry のみ: トレースは OpenTelemetry コレクターにのみ送信されます。
- デュアル エクスポート: トレースは、MLflow Tracking と OpenTelemetry コレクターの両方に送信されます。
OpenTelemetry エクスポート
既定では、MLflow はトレースを MLflow 追跡サーバーにエクスポートします。 代わりに、OpenTelemetry コレクターにのみトレースをエクスポートするには、OTEL_EXPORTER_OTLP_ENDPOINTに、OTEL_EXPORTER_OTLP_TRACES_ENDPOINT環境変数 (または) を OpenTelemetry コレクターのターゲット URL に設定します。
import mlflow
import os
# Set the endpoint of the OpenTelemetry Collector
os.environ["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"] = "http://localhost:4317/v1/traces"
# Optionally, set the service name to group traces
os.environ["OTEL_SERVICE_NAME"] = "<your-service-name>"
# Trace will be exported ONLY to the OTel collector at http://localhost:4317/v1/traces
with mlflow.start_span(name="foo") as span:
span.set_inputs({"a": 1})
span.set_outputs({"b": 2})
デュアル エクスポート (MLflow + OpenTelemetry)
Databricks MLflow と別の OpenTelemetry サービスの 両方 にトレースを同時にエクスポートするには、MLflow のデュアル エクスポート構成を使用します。 これにより、MLflow の追跡機能と既存の監視インフラストラクチャのどちらかを選択しなくても、同じトレース データを複数の宛先に送信できます。
デュアル エクスポートを有効にする
openTelemetry 構成と共に MLFLOW_ENABLE_DUAL_EXPORT 環境変数を設定します。
import mlflow
import os
# Enable dual export mode
os.environ["MLFLOW_ENABLE_DUAL_EXPORT"] = "true"
# Configure OpenTelemetry Collector endpoint
os.environ["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"] = "http://localhost:4317/v1/traces"
os.environ["OTEL_SERVICE_NAME"] = "my-ml-service"
# Configure MLflow tracking URI to Databricks
mlflow.set_tracking_uri("databricks")
# Traces will be exported to BOTH MLflow and the OTel collector
with mlflow.start_span(name="dual_export_example") as span:
span.set_inputs({"model": "gpt-4", "prompt": "Hello world"})
# Your ML workflow here
result = "Generated response"
span.set_outputs({"response": result})
span.set_attributes({"token_count": 15})
メトリック エクスポート
MLflow では、メトリック エンドポイントが構成されている場合に OpenTelemetry メトリックをエクスポートできます。 これにより、互換性のある監視システムでスパン期間やその他のトレース関連のメトリックを監視できます。
MLflow がエクスポートするメトリックの完全な一覧については、 MLflow のエクスポートされたメトリックのドキュメントを参照してください。
メトリックのエクスポートを有効にする
メトリックを OpenTelemetry Collector にエクスポートするには、次の環境変数を設定します。
import os
# Enable metrics export
os.environ["OTEL_METRICS_EXPORTER"] = "otlp"
os.environ["OTEL_EXPORTER_OTLP_METRICS_ENDPOINT"] = "http://localhost:4317"
# Optional: Configure metric export interval (in milliseconds)
os.environ["OTEL_METRIC_EXPORT_INTERVAL"] = "60000" # Export every 60 seconds
OpenTelemetry コレクター
特定の可観測プラットフォーム用に OpenTelemetry コレクターを設定する方法の詳細については、次のリンクをクリックしてください。
| プラットホーム | OpenTelemetry のドキュメント |
|---|---|
| Datadog | OpenTelemetry ガイド |
| New Relic | OpenTelemetry APM の監視 |
| SigNoz | OpenTelemetry Python インストルメンテーション |
| Splunk | データを取得する |
| Grafana | OTLP 経由でデータを送信する |
| ServiceNow (Lightstep) | Collector のドキュメント |
Configurations
MLflow では、標準の OTLP エクスポーターを使用して、トレースを OpenTelemetry Collector インスタンスにエクスポートします。 これにより、OpenTelemetry でサポート されているすべての構成 を使用できます。 次の例では、既定の gRPC ではなく HTTP プロトコルを使用するように OTLP エクスポーターを構成し、カスタム ヘッダーを設定します。
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://localhost:4317/v1/traces"
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="api_key=12345"
次のステップ
- トレースの概念を理解する - MLflow の OpenTelemetry と互換性のあるトレースの構造について説明します
- トレースを使用してアプリをインストルメント化 する - カスタム スパンを追加して OpenTelemetry エクスポートを強化する
- 運用環境の問題をデバッグ する - エクスポートされたトレースを使用して運用アプリケーションを監視する