MLflow 跟踪中的完整 OpenTelemetry 支持
我们很高兴地宣布,MLflow 3.6.0 为开源 MLflow 服务器带来了全面的 OpenTelemetry 支持。这一集成是使 MLflow 成为 GenAI 应用程序厂商中立可观测性平台的重大飞跃。
新特性概览?
MLflow 始终致力于为 GenAI 应用程序提供强大的追踪功能。通过添加全面的 OpenTelemetry 集成,您现在可以
- 创建统一追踪,将 MLflow SDK 的插桩与来自第三方库的 OpenTelemetry 自动插桩相结合
- 直接摄取 OpenTelemetry 跨度 (span) 到 MLflow 追踪服务器中
- 与已使用 OpenTelemetry 进行插桩的现有应用程序无缝集成
- 为您的 AI 应用程序选择任意语言并进行追踪,包括 Java、Go、Rust 等。
将 OpenTelemetry 追踪发送到 MLflow 服务器
MLflow 3.6.0 支持通过 OTLP(OpenTelemetry 协议)端点直接摄取 OpenTelemetry 追踪。这使您可以将来自任何 OpenTelemetry 插桩应用程序的追踪发送到 MLflow 追踪服务器。
使用 MLflow 追踪 SDK
MLflow 追踪 SDK 构建在 OpenTelemetry SDK 之上,旨在实现最小的插桩工作量。它会自动与 OpenTelemetry 的默认追踪器提供程序集成,允许来自不同插桩源的跨度组合成连贯的追踪。
GenAI 框架的自动日志记录
import mlflow
from openai import OpenAI
# Enable auto-logging for OpenAI
mlflow.openai.autolog()
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello, world!"}]
)
使用 @trace 装饰器的手动插桩
import mlflow
@mlflow.trace
def process_request(data):
# Your application logic
return result
# Call the traced function
process_request({"input": "data"})
使用带有 OTLP 导出的 OpenTelemetry SDK
对于不使用 MLflow SDK 或使用 Python/TypeScript 以外的其他语言编写的应用程序,您可以使用标准的 OpenTelemetry OTLP 导出器直接将追踪发送到 MLflow。MLflow 3.6.0 暴露了一个符合 OTLP 的端点,可以接受来自任何 OpenTelemetry 插桩应用程序的追踪。
程序化配置
在您的应用程序代码中配置 OTLPSpanExporter,将追踪发送到 MLflow 的 OTLP 端点
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
# Replace with your own MLflow server URI
mlflow_server_uri = "https://:5000"
experiment_id = "123" # Your MLflow experiment ID
# Configure OTLP exporter to send to MLflow
otlp_exporter = OTLPSpanExporter(
endpoint=f"{mlflow_server_uri}/v1/traces",
headers={
"Content-Type": "application/x-protobuf",
"x-mlflow-experiment-id": experiment_id,
}
)
# Set up the tracer provider
provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(otlp_exporter))
trace.set_tracer_provider(provider)
# Now any OpenTelemetry instrumentation will send traces to MLflow
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my_operation"):
# Your application code here
pass
环境变量配置
对于用其他语言(Java、Go、Rust 等)编写的应用程序,或者当您更喜欢通过环境变量进行配置时,请设置以下内容
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://:5000/v1/traces
export OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-mlflow-experiment-id=123
此方法适用于任何 OpenTelemetry SDK,并允许您追踪整个技术栈中的应用程序,将所有追踪发送到 MLflow 以实现统一的可观测性。
跨技术栈的统一可观测性
借助 MLflow 3.6.0,您现在可以无缝结合
- OpenTelemetry 自动插桩(FastAPI、Django、Flask 等)
- MLflow 自动日志记录(OpenAI、LangChain、DSPy 等)
- 用于自定义跨度的 MLflow @trace 装饰器
它们可以在您的应用程序中生成单一、统一的追踪,从而提供从传入请求到 LLM 调用和最终输出的端到端可见性。
# These now create a single unified trace
from fastapi import FastAPI
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
import mlflow
app = FastAPI()
FastAPIInstrumentor.instrument_app(app) # OTel auto-instrumentation
@mlflow.trace # MLflow tracing
def my_llm_function(input_text):
# Your logic here
return result
OpenTelemetry 集成的优势
⚖️ 厂商中立性
OpenTelemetry 是由云原生计算基金会 (CNCF) 支持的开放标准。通过全面支持 OTel,MLflow 确保您永远不会被锁定在专有可观测性解决方案中。
🌐 生态系统兼容性
利用广泛的 OpenTelemetry 生态系统,包括
- 对流行框架的自动插桩(FastAPI、Django、Flask 等)
- 超越 Python 的语言支持(TypeScript、Java、Go 等)
- 与现有可观测性工具和平台的集成
🔭 统一可见性
在单个追踪中查看应用程序行为的完整情况,从 HTTP 请求到您的业务逻辑再到外部 API 调用。
了解更多信息
准备好在 MLflow 中开始使用 OpenTelemetry 了吗?请查看这些资源
加入社区
我们对这次集成开启的可能性感到兴奋,并希望听到您的反馈和贡献。
对于有兴趣分享知识的人,我们邀请您协作 MLflow 网站。无论是撰写教程、分享用例还是提供反馈,每一份贡献都丰富了 MLflow 社区。
请继续关注更多更新,我们将继续增强 MLflow 的可观测性功能!
