共用方式為

OpenTelemetry 导出

MLflow 生成的跟踪与 OpenTelemetry 跟踪规范兼容。 因此,可以将 MLflow 跟踪导出到支持 OpenTelemetry 的各种可观测性解决方案。

导出模式

MLflow 支持三种跟踪导出模式:

  1. 仅 MLflow 跟踪(默认):跟踪仅发送到 MLflow 跟踪服务器。
  2. 仅 OpenTelemetry:追踪仅发送到 OpenTelemetry 收集器。
  3. 双重导出:跟踪数据同时发送到 MLflow Tracking 和 OpenTelemetry 收集器。

OpenTelemetry 导出

默认情况下,MLflow 将跟踪导出到 MLflow 跟踪服务器。 若要将跟踪导出到 OpenTelemetry 收集器,请在OTEL_EXPORTER_OTLP_ENDPOINTOTEL_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 的跟踪功能和现有可观测性基础结构之间进行选择。

启用双重导出

设置 MLFLOW_ENABLE_DUAL_EXPORT 环境变量与 OpenTelemetry 配置一起:

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 收集器,请设置以下环境变量:

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 Instrumentation
Splunk 获取数据
Grafana 通过 OTLP 发送数据
ServiceNow (Lightstep) 收集器文档

配置

MLflow 使用标准 OTLP 导出程序将跟踪导出到 OpenTelemetry 收集器实例。 因此,可以使用 OpenTelemetry 支持 的所有配置 。 以下示例将 OTLP 导出程序配置为使用 HTTP 协议而不是默认 gRPC 并设置自定义标头:

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"

后续步骤