OpenTelemetryのエクスポート
MLflow によって生成されたトレースは、 OpenTelemetry トレース仕様と互換性があります。そのため、MLflow トレースは、OpenTelemetry をサポートするさまざまな監視ソリューションにエクスポートできます。
エクスポートモード
MLflow は、トレースの 3 つのエクスポート モードをサポートしています。
- MLflow トラッキングのみ (デフォルト) : トレースは MLflow トラッキング サーバーにのみ送信されます。
- OpenTelemetry のみ : トレースは OpenTelemetry Collector にのみ送信されます。
- デュアルエクスポート : トレースは MLflow Tracking と OpenTelemetry Collector の両方に送信されます。
OpenTelemetryエクスポート
デフォルトでは、MLflow はトレースを MLflow Tracking Server にエクスポートします。代わりにトレースを OpenTelemetry Collector に のみ エクスポートするには、 トレースを開始する前に、 OTEL_EXPORTER_OTLP_ENDPOINT
環境変数 (またはOTEL_EXPORTER_OTLP_TRACES_ENDPOINT
) を OpenTelemetry Collector のターゲット 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 Collector を設定する方法の詳細については、次のリンクをクリックしてください。
プラットフォーム | OpenTelemetry のドキュメント |
---|---|
Datadog | |
New Relic | |
SigNoz | |
Splunk | |
Grafana | |
ServiceNow(ライトステップ) |
構成
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 のエクスポートを充実させます
- 本番運用の問題のデバッグ - エクスポートされたトレースを使用して、本番運用アプリケーションを監視します