MLflow LangGraph Tracing: jeden Agent-Schritt sichtbar machen

MLflow Tracing für LangGraph: Auto-Instrumentation plus Custom-Spans, self-hosted DSGVO-Setup. Vergleich gegen LangSmith und Langfuse aus Pexon-Projekten.

24 Juli. 2026 | AI

Inhaltsverzeichnis

Pexon Consulting | 10 Min. Lesezeit | 10.06.2026


TL;DR

MLflow LangGraph Tracing löst das Observability-Problem produktiver Agent-Pipelines: Ohne Tracing siehst du nur Input und Output eines LangGraph-Runs — der Weg dazwischen, mit allen Tool-Calls, Subgraph-Aufrufen, LLM-Calls und Konditional-Edges, ist eine Blackbox. Mit MLflow Tracing bekommt jeder Knoten seinen eigenen Span, mit Eingabe, Ausgabe, Latenz, Cost und Custom-Metadata. Pexon Consulting setzt MLflow als Standard-Observability für LangGraph-Setups ein — Open Source, self-hosted, DSGVO-tragfähig.

Aspekt Ohne Tracing Mit MLflow LangGraph Tracing
Debug-Workflow Print-Statements, Logs durchwühlen UI mit kompletter Span-Hierarchie
Latenz-Analyse Stop-Watch im Code p50/p95/p99 pro Node automatisch
Cost pro Run wissen nicht, welcher Node teuer Cost-Split pro Node + Modell
Eval-Datensammlung manuell exportieren Trace landet direkt im Eval-Pool
DSGVO-Position je nach Tool unterschiedlich self-hosted, voll in eurer Hand

Warum LangGraph Observability ein eigenes Problem ist

Wer eine LangGraph-Pipeline mit drei Knoten im Tutorial baut, denkt nicht über Observability nach — der Graph läuft, der Output passt, alles gut. Wer drei Monate später eine produktive Pipeline mit 12 Knoten, vier Subgraphs, externen Tool-Calls und konditionalen Edges hat, weiß plötzlich nicht mehr, warum ein bestimmter Lauf 47 Sekunden gebraucht hat statt der typischen 8.

Das Problem ist nicht LangGraph-spezifisch — es ist klassische Verteilte-System-Observability, übertragen auf Agent-Pipelines. Du brauchst Spans pro Knoten, Hierarchie der Aufrufe, Eingabe und Ausgabe jedes Tool-Calls, Token-Counts und Cost pro LLM-Call, Latenz-Verteilung über mehrere Runs. Ohne das fliegst du blind, sobald die Pipeline komplexer wird.

Die Standard-Antwort dafür war jahrelang LangSmith (von LangChain Inc.) oder kommerzielle Tools wie Langfuse, Helicone, Braintrust. MLflow Tracing — seit Version 2.14 produktiv — ist die Open-Source-Antwort, die seit Mitte 2025 stark wächst. Vorteile: voll self-hosted, DSGVO-trivial, integriert in das bestehende MLflow-Ökosystem (Experimente, Modell-Registry, Deployment-Tracking).


Was MLflow Tracing macht

Architektur in drei Komponenten.

Komponente 1: Tracing-Library im LangGraph-Code. Eine Zeile mlflow.langchain.autolog() aktiviert automatisches Span-Tracing für alle LangGraph-Knoten. Jeder add_node-Aufruf wird automatisch zu einem Span, jeder LLM-Call zu einem Sub-Span, Tool-Use zu einem weiteren Sub-Span. Hierarchie und Verschachtelung werden korrekt abgebildet.

Komponente 2: MLflow Tracking Server. Self-hosted Postgres-basierter Server, der die Traces persistiert. Läuft als Docker-Container oder als Python-Service. UI zur Trace-Inspektion, mit Span-Tree-Visualisierung, Eingabe-Ausgabe-Diff pro Span, Latenz-Histogramme.

Komponente 3: Aggregations- und Analyse-Layer. MLflow speichert Traces mit konfigurierbaren Tags, sodass du nach Conversation-ID, User, Feature-Branch oder anderen Dimensionen filtern kannst. Plus eingebaute Eval-Hooks, sodass aus einem produktiven Trace direkt ein Eval-Beispiel werden kann.


Auto-Instrumentation: das Minimal-Setup

import mlflow
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic

mlflow.set_tracking_uri("http://mlflow.intern:5000")
mlflow.set_experiment("customer-support-agent")
mlflow.langchain.autolog()

llm = ChatAnthropic(model="claude-sonnet-4-6", temperature=0.0)
graph = create_react_agent(llm, tools=[search_crm, get_order_status, ...])

result = graph.invoke({
    "messages": [{"role": "user", "content": "Wo ist meine Bestellung 4711?"}]
})

Was im Hintergrund passiert: Jeder Knoten des ReAct-Agents (Planning, Tool-Selection, Tool-Execution, Response-Generation) wird als Span getrackt. Jeder LLM-Call bekommt einen Sub-Span mit Tokens, Model, Latenz. Jeder Tool-Call wird mit Input, Output, Latenz protokolliert. Im MLflow-UI siehst du anschließend den vollständigen Aufruf-Baum, mit Drill-Down auf jeden Span.

Beispiel-Trace-Output für die obige Anfrage:

customer-support-agent (1.847s total)
├── agent_planning (542ms)
│ └── ChatAnthropic call (498ms, 287 tokens in, 145 tokens out)
├── tool_call: search_crm (89ms)
│ └── input: „customer order 4711“
│ └── output: {„order_id“: 4711, „status“: „shipped“}
├── tool_call: get_order_status (124ms)
│ └── input: {„order_id“: 4711}
│ └── output: {„tracking“: „DPD-123“, „eta“: „2026-06-12“}
└── response_generation (892ms)
└── ChatAnthropic call (847ms, 524 tokens in, 218 tokens out)

Bei dieser Tiefe ist Debugging trivial. Latenz-Spike? Sofort sichtbar in welchem Knoten. Tool-Output unerwartet? Direkt nachsehbar. Token-Cost zu hoch? Pro Knoten und Modell aufgeschlüsselt.


Custom Spans für business-spezifische Schritte

Auto-Instrumentation gibt dir die Standard-Spans (Node-Aufrufe, LLM-Calls, Tool-Calls). Für business-spezifische Logik nutzt du explizite Custom-Spans.

from mlflow import trace, start_span

@trace(name="customer_verification")
def verify_customer(customer_id: str) -> dict:
    with start_span("crm_lookup") as span:
        customer = crm.get(customer_id)
        span.set_attribute("customer_tier", customer.tier)
    
    with start_span("permission_check") as span:
        allowed_actions = check_permissions(customer)
        span.set_attribute("allowed_actions_count", len(allowed_actions))
    
    return {"customer": customer, "permissions": allowed_actions}

Mit diesem Pattern bekommst du Spans für deine eigene business-Logik mit Custom-Attributen, die im UI durchsuchbar sind. Bei einem Pilotkunden haben wir damit gezielt nach „Sessions mit Customer-Tier=Premium und Latenz > 5s“ gefiltert und so ein Tier-spezifisches Latenz-Problem in der Permission-Check-Routine identifiziert.


Vergleich: MLflow vs LangSmith vs Langfuse

Aspekt MLflow Tracing LangSmith Langfuse
Lizenz / Kosten Apache 2.0, free 39 USD/Seat + Trace-Cost OSS + Enterprise-Tier
Self-Hosting nativ Enterprise nur nativ
DSGVO-Position trivial (self-hosted) EU-Region verfügbar trivial (self-hosted)
LangGraph-Integration nativ via Autolog First-Class (gleicher Maintainer) nativ via OTel
Eval-Workflow eingebaut sehr stark gut
Multi-Modal Trace begrenzt sehr stark gut
Datenbank Postgres / SQLite / MySQL Cloud nativ Postgres + ClickHouse
Production-Reife hoch sehr hoch hoch

Pexon-Empfehlung: Für reine LangGraph-Setups bei Mittelständlern mit DSGVO-Fokus ist MLflow Tracing die saubere Default-Wahl — self-hosted, voll Open Source, integriert ins MLflow-Ökosystem das ihr für ML-Workflows ohnehin braucht. LangSmith ist die Empfehlung bei Teams, die schon stark in LangChain investiert sind und die Cloud-Variante mit EU-Region akzeptieren. Langfuse ist die Empfehlung bei Multi-Modell-Setups (nicht nur LangGraph), die framework-agnostisches Tracing brauchen.


Production-Setup mit Pexon

Wir bauen MLflow-Tracing-Setups als Komponente in unseren LangGraph-Sprints. Lieferumfang typisch: MLflow Tracking Server in eurem K8s oder als systemd-Service, Postgres-Persistenz mit Backup, Anbindung an LangGraph-Pipeline mit Autolog plus Custom-Spans für business-Logik, optionale Anbindung an euer SIEM für Long-Term-Retention, Schulung der Engineering-Team-Mitglieder auf das Tracing-UI.

Investment je nach Scope 25-65k EUR. Bei Standard-Setups ist das Teil eines größeren LangGraph-Production-Sprints und nicht separat berechnet. Laufende Kosten typisch 50-200 EUR pro Monat für Hosting, plus Storage je nach Retention-Vorgabe.


Häufig gestellte Fragen

Wie groß ist der Performance-Overhead?

Bei richtig konfiguriertem MLflow Tracing typisch unter 3% Latenz-Overhead pro Run. Spans werden asynchron in den MLflow-Server geschickt, blocken den Graph-Lauf nicht. Bei sehr hochfrequenten Setups (>100 Runs pro Sekunde) bauen wir Sampling ein, sodass nicht jeder Run getracked wird — typisch 10-20% Sampling reicht für Eval und Debugging.

Können wir Traces später durchsuchen, wenn ein Vorfall passiert?

Ja, das ist der eigentliche Wert. MLflow-Tracking-Server hat Search-API für alle Trace-Attribute. Nach einem Vorfall („welche Customer-Sessions hatten in den letzten 24h Tool-Call-Errors“) liefert eine Query die relevanten Traces in Sekunden. Wir setzen Standard-Retention auf 90 Tage produktive Traces plus 1 Jahr aggregierte Statistiken.

Wie integriert sich das in MLflow-Experimente und Modell-Registry?

Voll. Wenn ihr MLflow bereits für ML-Experimente nutzt, läuft das Tracing in der gleichen Tracking-DB. Du kannst einen Trace mit einem Experiment-Run verknüpfen, sodass Modell-Versionierung, Eval-Resultate und produktive Traces nachvollziehbar zusammenhängen. Bei Teams mit reifer MLflow-Praxis ist das ein erheblicher Synergie-Effekt.

Funktioniert das auch mit Claude Agent SDK oder OpenAI Agents SDK?

Mit Caveats. Claude Agent SDK und OpenAI Agents SDK haben eigene Telemetry-Pfade. Wir nutzen für diese Setups OpenTelemetry-Export aus dem SDK in MLflow (über OTel-Collector). Das funktioniert, ist aber nicht ganz so frictionless wie die LangGraph-Autolog-Integration. Für reine LangGraph-Setups ist MLflow die einfachste Antwort.

Wie schützen wir PII in den Traces?

Wichtige Frage. Wir bauen Custom-Hooks ein, die vor dem Trace-Upload die Eingaben und Ausgaben durch einen PII-Filter laufen lassen. Standard-PII (Namen, E-Mail-Adressen, Telefonnummern) wird durch Tokens ersetzt. Bei sensitiven Branchen erweitern wir das auf domain-spezifische Patterns. Das ist 1-3 Tage Engineering plus Tests, dafür DSGVO-sauber.


Nächster Schritt

Wenn deine LangGraph-Pipeline produktiv läuft und du den Debug-Schmerz spürst: Wir machen einen 45-Minuten-Call mit dir und idealerweise einem Senior-Engineer. Du beschreibst die Pipeline-Komplexität und Observability-Stack, wir skizzieren das MLflow-Setup mit Festpreis.


Verwandte Themen


Microsoft Fabric. Bilder Blogtemplate Whitepaper

Claude Code im Unternehmen

  • Praxis-Guide für IT-Leiter – mit konkreten Einblicken zu Kosten, Sicherheit und Rollout von Claude Code im Unternehmen.

Beratungsgespräch

Sichern Sie sich Ihre kostenfreie Erstberatung

Analyse Ihres individuellen Cloud- oder KI-Bedarfs
Erste Empfehlungen zu Umsetzungsstrategien
Transparente Einblicke in unsere Methoden, Technologien & Referenzen