Observability

If you have shipped an LLM-powered feature to production in the last year, you have stared at an output and asked: Why did it answer that way? Is this getting worse? How do I compare which prompt actually works best? The AI observability space has exploded to answer those questions, and picking the wrong tool means fighting your instrumentation instead of improving your model. We spent the last six months running all four major contenders — LangSmith, Braintrust, Arize (including Phoenix), and MLflow — through real evaluation and tracing workloads on production applications. This is the no-spin comparison we wish we had when we started.

TL;DR: MLflow is the only tool that covers the full ML lifecycle with no vendor lock-in and zero per-trace cost, and its LLM evaluation capabilities are good enough that most teams should start there before reaching for a flashier, more expensive alternative.

The Landscape: Four Very Different Philosophies

These are not interchangeable products with different logos. They have fundamentally different design centers, and that shapes everything downstream.

LangSmith started as the debugging companion for LangChain. If you use LangChain heavily — and many teams do — LangSmith drops in with near-zero configuration and immediately shows you the full chain of thought, token usage, and latency breakdown for every LLM call. Its roots show: it is unmatched for understanding what happened inside a single trace, but the evaluation and production monitoring features feel bolted on.

Braintrust is evaluation-first, built by former enterprise AI engineers tired of managing spreadsheets of prompt tests. Its core insight: if you cannot measure LLM outputs rigorously, nothing else matters. You get a first-class experiment framework with dataset management, automated evaluators, and a scoring system purpose-built for comparing prompt versions. Tracing exists, but it serves evaluation — not the other way around.

Arize (with open-source Phoenix) came from the traditional ML monitoring world. It was doing drift detection and model performance monitoring before LLMs were mainstream. That heritage makes Arize unmatched for production observability — data drift, embedding drift, and performance degradation alerts. Phoenix is the self-hosted option with tracing and span analysis without per-span pricing.

MLflow is the dark horse. Most teams know it as “that experiment tracking thing from the pre-LLM era.” But MLflow has been quietly investing in LLM evaluation and tracing over the last two releases, and the result is surprisingly capable. It is the only tool on this list covering the full ML lifecycle: experiment tracking, model registry, evaluation, tracing, and deployment — all in one open-source package with no vendor lock-in. The tradeoff is a less polished UI, younger tracing UX, and you bring your own hosting.

Setup Complexity: Getting from Zero to First Trace

How fast from pip install to seeing your first LLM call traced? We timed each one.

ToolTime to first traceLines of configHosting model
LangSmith2 minutes2 env varsCloud (SaaS)
Braintrust5 minutes4 lines of codeCloud (SaaS)
Arize Phoenix10 minutes5 lines of codeSelf-hosted or Cloud
MLflow15 minutes6 lines of codeSelf-hosted (or Databricks)

LangSmith wins on sheer ease. Set two environment variables and every LangChain run is automatically captured. For non-LangChain code, use the @traceable decorator.

Braintrust requires wrapping LLM calls with their SDK. Create a braintrust.init() context around your experiment, define evaluators, and get a rich comparison view. The real friction is learning the mental model of datasets, experiments, and projects.

Arize Phoenix gives you an OpenTelemetry-based client. If you already use OTel, integration takes minutes. The self-hosted option requires running a Phoenix server (Docker container or Python process), adding operational overhead but keeping data in-house.

MLflow requires running the Tracking Server (mlflow server), then using mlflow.start_span() or @mlflow.trace. The evaluation API (mlflow.evaluate()) is excellent once set up, but initial setup — spinning up the server, configuring artifact and backend stores — is more involved than cloud-only competitors.

Pricing: The Elephant in the Room

Cost often makes the decision for you.

ToolFree tierPaid pricingNotes
LangSmith5k traces/monthPer-seat ($39) + per-trace overageGets expensive fast at scale
Braintrust10k scores/monthUsage-based ($249/mo Pro), no per-seatReasonable at medium scale
Arize Cloud25k spans/month$50/mo (AX Pro) or custom (Enterprise)Phoenix OSS is free, self-hosted, unlimited
MLflowCompletely free$0 (open-source)No data egress, no vendor lock

Let us be direct: MLflow is the only fully open-source, free option on this list. No per-trace pricing, no per-seat fee, no “contact sales for enterprise” tier. You pay for infrastructure (a VM or Kubernetes pod). For a team running millions of traces per month, the cost difference between MLflow and any cloud competitor is thousands of dollars per month.

Teams build entire eval pipelines on LangSmith’s free tier, hit the trace limit mid-sprint, then scramble to pay a surprise bill or rip out instrumentation. With MLflow, that never happens. Cloud tools charge for convenience — LangSmith’s trace explorer is genuinely better, Braintrust’s UI is gorgeous, Arize’s dashboards are enterprise-grade. But if your team is cost-sensitive, high-volume, or has data residency requirements, MLflow’s pricing is decisive.

Evaluation Capabilities: Can It Grade My LLM Outputs?

Evaluation is where the tools diverge most dramatically. We graded a customer support bot’s responses for correctness, tone, and safety across all four platforms.

LangSmith revolves around datasets and annotators. Create a dataset, run your LLM against it, and apply evaluators (code-based, LLM-as-judge, or built-in metrics). LangSmith ships with pre-built prompts for helpfulness, correctness, and coherence that work well out of the box. The comparison UI is solid — side-by-side outputs across experiments. The friction point: dataset management is basic with no synthetic data generation. You bring your own test cases.

Braintrust was built for this, and its evaluation framework is the best in class. You define a dataset of inputs with expected outputs, then run an experiment against it. The scoring system supports numeric scores, pass/fail, and LLM-as-judge evaluators with custom rubrics. What sets it apart is the experiment comparison view: a per-row diff showing where one prompt outperformed another. The regression detection is automatic — Braintrust flags when a change improves some metrics but regresses others. For a team iterating on prompts daily, this workflow alone justifies the cost. Braintrust also supports online evaluation — scoring production traces against your evaluators in real time, bridging offline eval and production monitoring better than any competitor.

Arize Phoenix gives you span-level tracing with evaluators attached to spans. You define evaluators in code — LLM-as-judge, embedding similarity, or custom logic — and Phoenix runs them against your traces. The UI is functional: filter by score, drill into low-scoring spans. Where Arize shines is production evaluation at scale — running evaluators against every trace and surfacing anomalies in dashboards.

MLflow is where we were most surprised. The mlflow.evaluate() API is genuinely good, and most people do not know it exists. You log a model, define evaluators, and call mlflow.evaluate(). Built-in evaluators include answer_correctness(), answer_similarity(), relevance(), safety(), and even flesch_kincaid_grade_level() for readability. Custom evaluators use make_genai_metric() with your own rubric. Results are logged to the experiment tracker — every eval run is automatically versioned, comparable, and tied to the exact model version.

MLflow’s evaluation comparison lives in the experiment UI: select runs and see a side-by-side metrics table. Less polished than Braintrust’s per-row diff, but functionally equivalent. And because MLflow tracks model, dataset, parameters, and code version together, you can reproduce any evaluation months later — something cloud tools struggle with when data expires.

Evaluation featureLangSmithBraintrustArize PhoenixMLflow
LLM-as-judgeBuilt-inBuilt-inBuilt-inBuilt-in
Custom evaluatorsCode + promptCode + promptCode + promptCode + prompt
Dataset versioningBasicExcellentBasicFull
Experiment comparisonGoodBestAdequateGood
Regression detectionManualAutomaticManualManual
Online evaluationLimitedYesYes (Cloud)Yes

Our take: If evaluation is your primary use case and you have budget, pick Braintrust. If you want evaluation integrated with your ML lifecycle and want to stay open-source, MLflow is a much better option than most realize.

Tracing and Debugging: Following the Chain of Thought

When a chatbot gives a wrong answer, you need to trace back through every LLM call, retrieval step, and tool invocation. Tracing is LangSmith’s home turf.

LangSmith has the best tracing UX we have used. The trace view shows a tree of spans — each LLM call, retrieval, or tool invocation as a collapsible node — with timing, token counts, and input/output at each step. The latency breakdown shows at a glance whether the bottleneck is the LLM call, a slow embedding query, or a timing-out tool.

Braintrust has tracing, but it is secondary to evaluation. The span view is clean and functional but lacks LangSmith’s polish. Where it shines: click from a low-scoring eval result directly into the trace that produced it, making it fast to diagnose why a response was bad.

Arize Phoenix uses OpenTelemetry spans, so you can use any OTel-compatible tool alongside it. The span view shows a flame graph of latency, making it easy to spot bottlenecks. The embedding visualizer is unique — project spans into UMAP space, see clusters of similar queries, and inspect traces within each cluster.

MLflow introduced tracing in version 2.14 with mlflow.start_span() as a context manager and automatic propagation through LangChain, LlamaIndex, and OpenAI, expanding significantly with MLflow 3.0 (June 2025). Auto-instrumentation now covers 20+ frameworks including Anthropic, Gemini, and CrewAI, with a new agent replay feature that reproduces call sequences for debugging non-deterministic failures. The trace UI is basic — a revamped table view with full-text search — but functional. What MLflow offers that others do not is trace-to-experiment linkage: every trace is associated with the current MLflow run, so you can see which experiment produced which traces.

Tracing verdict by team profile:

  • LangChain-heavy team debugging complex chains: LangSmith, no contest. The deep integration catches calls you did not know you needed to instrument.
  • Team running evaluations and wanting trace context: Braintrust, because the eval-to-trace link is seamless.
  • Team optimizing latency and cost: Arize Phoenix, because the flame graph and embedding visualizer make performance patterns jump out.
  • Team wanting everything in one place, open-source: MLflow. The tracing is not as polished, but it improves with every release, and the integration with experiment tracking and evaluation is uniquely valuable.

Production Monitoring: Is Your Model Degrading in the Wild?

Evaluation tells you if your model is good in tests. Production monitoring tells you if it stays good after deployment. These require different tooling.

Arize is the clear leader here. Its ML monitoring heritage means it excels at drift detection, performance dashboards, and automated alerting. Arize tracks embedding drift, response distribution drift, and performance degradation. The dashboard builder lets you create role-specific views — engineering sees latency and error rates; product sees satisfaction scores.

LangSmith has a monitoring dashboard but it is not the main event. You can monitor latency, token usage, error rates, and custom metrics. The annotator workflow lets human reviewers score production traces. It is adequate for teams already on LangSmith, but we would not choose it for monitoring alone.

Braintrust does production monitoring through its online evaluation system. Every production trace runs through your evaluators, and scores are tracked over time with regression detection. The dashboard is simpler than Arize’s but more focused on evaluation scores.

MLflow does not have a built-in production monitoring dashboard. What it offers is the Model Registry combined with evaluation: deploy a model version, run evaluations against production traces, compare scores across versions. It is less automated than Arize — you trigger evaluations and set up alerting — but the capability is there. For teams already using MLflow for deployment, adding evaluation on production data is straightforward.

Monitoring featureLangSmithBraintrustArize CloudMLflow
Embedding driftNoNoYesNo
Latency/error dashboardsYesBasicYesBasic
Automated alertingLimitedYesYesDIY
Human annotationYesBasicYesVia registry
Evaluation score trendsYesYesYesYes
Self-hosted optionNoNoPhoenixYes

Our take: Arize if you have budget and need drift detection. Phoenix for self-hosted tracing. MLflow if you already have an MLflow deployment and want to add evaluation to production traces.

Integration Ecosystem: What Plays Well Together?

No tool exists in isolation. Your observability platform needs to work with your LLM provider, framework, and deployment infrastructure.

IntegrationLangSmithBraintrustArize PhoenixMLflow
LangChainNative (built-in)SDK supportOTel auto-instrAuto-instr
LlamaIndexSupportedSDK supportOTel auto-instrAuto-instr
OpenAI SDK@traceableSDK wrapperOTel wrapAuto-patch
HuggingFaceVia LangChainSDK supportVia OTelNative
Custom frameworks@traceableSDKOTel@mlflow.trace
Docker/K8sN/AN/ASelf-hostedSelf-hosted
DatabricksN/AN/AN/ANative

MLflow’s automatic instrumentation is worth calling out: enable mlflow.langchain.autolog() and every LangChain run is automatically traced. It is not as deep as LangSmith’s — it captures major spans but can miss nested subtleties — yet requires zero code changes.

Arize Phoenix benefits from the OpenTelemetry ecosystem. If your stack already uses OTel for microservice observability, configure an exporter pointing at your Phoenix endpoint and all your LLM spans appear alongside existing service traces. This makes Phoenix the best choice for teams with existing OTel infrastructure.

Team Collaboration: Can Your Whole Team Use It?

AI observability is not a solo activity. Product managers review results, engineers debug traces, and ML scientists experiment with prompts. How well do these tools support multi-person workflows?

LangSmith and Braintrust both offer shared workspaces with role-based access control. Braintrust’s project-based organization is excellent for teams running multiple experiments. LangSmith’s annotation workflow supports human-in-the-loop review better than any competitor.

Arize (Cloud) has strong team features — shared dashboards, assignable alerts, and space-based organization. The self-hosted Phoenix option is more of a single-developer tool unless you build your own sharing layer.

MLflow uses a client-server architecture supporting multiple users pointing at the same tracking server. The Model Registry supports stages (Staging, Production, Archived) with approvals, suiting regulated teams. It lacks real-time presence or commenting on experiments, but the fundamentals are there: shared experiment history, model registry, and results.

Decision Framework: Which Tool Should You Pick?

Here is our decision framework based on real team profiles.

Team profileBest fitWhy
Heavy LangChain user debugging complex chainsLangSmithNative LangChain integration saves days of setup. Debugging UX is best in class.
Prompt engineering team iterating on eval dailyBraintrustBest eval workflow, automatic regression detection, excellent experiment comparison.
ML platform team needing production monitoring and drift detectionArize (Cloud)Embedding drift, performance alerts, and dashboards are unmatched. Phoenix for self-hosted.
Cost-sensitive team, high volume, no vendor lock-inMLflowFree, open-source, full lifecycle. Evaluation is surprisingly good. You host it, you own it.
Regulated industry, data must stay on-premisesMLflow or PhoenixBoth are self-hosted. MLflow for full lifecycle. Phoenix for tracing and drift detection.
Databricks userMLflowNative integration. MLflow is the default experiment tracker on Databricks.
Startup with <10 engineers wanting one toolMLflowExperiment tracking, evaluation, model registry, and tracing in one package — zero per-seat cost.
Enterprise with budget needing polished UXLangSmith or BraintrustEnterprise plans with SLAs and support. Pick by eval-vs-tracing priority.

Practical Takeaways

Here is what we actually recommend after using all four in production.

  1. Start with MLflow if you are cost-conscious or data-sensitive. The evaluation and tracing capabilities are genuinely good, even if the UI is not as pretty. You will save thousands of dollars per year and never worry about a vendor changing pricing. The mlflow.evaluate() API with LLM-as-judge metrics is production-ready and under-documented — use it.

  2. Use LangSmith if LangChain is your primary framework and you need to debug complex chains. Nothing else comes close for tracing multi-step LangChain workflows. Treat evaluation features as secondary — if eval is your main need, pair LangSmith tracing with MLflow or Braintrust.

  3. Consider Braintrust if your team is eval-first. The experiment comparison UI and automatic regression detection meaningfully accelerate prompt iteration. The cost is reasonable at medium scale, and online evaluation bridges offline testing and production monitoring better than any alternative.

  4. Use Arize Phoenix for self-hosted tracing and Arize Cloud for enterprise monitoring. Phoenix is the easiest path to OTel-based LLM observability. If you already use OpenTelemetry, Phoenix slides in with minimal friction.

  5. Do not use multiple tools if you can avoid it. Every additional platform means more instrumentation code, context switching, and overhead. If your needs are modest, MLflow covers more of the lifecycle than any other single tool on this list — experiment tracking, evaluation, tracing, and model registry. Start there and graduate to a specialized tool only when MLflow’s limitations become the bottleneck.

The AI observability space is moving fast, and all four tools improve with every release. But the fundamentals — open-source versus vendor lock-in, eval-first versus tracing-first, full lifecycle versus specialized tool — are unlikely to change. Pick the tool whose philosophy matches your team’s needs, not the one with the flashiest demo.

Give MLflow another look. The tool you dismissed as “traditional ML” has been quietly building some of the best LLM evaluation tooling in the open-source world. It deserves your attention.