Anti-Pattern No Monitoring: fehlendes Monitoring

Anti-Pattern, bei dem ein Agent-System ohne Logs und Metriken läuft.
Auf dieser Seite
  1. Idee in 30 Sekunden
  2. Beispiel für das Anti-Pattern
  3. Warum es entsteht und was schiefläuft
  4. Richtiger Ansatz
  5. Schnelltest
  6. Worin es sich von anderen Anti-Patterns unterscheidet
  7. No Stop Conditions vs No Monitoring
  8. Overengineering Agents vs No Monitoring
  9. Agents Without Guardrails vs No Monitoring
  10. Selbstcheck: Habt ihr dieses Anti-Pattern?
  11. FAQ
  12. Was als Nächstes

Idee in 30 Sekunden

No Monitoring ist ein Anti-Pattern, bei dem ein Agent-System fast "blind" läuft: ohne Run-Traces, stop_reason und Basis-Metriken.

Dadurch wirkt jeder Ausfall wie "das Modell war komisch", und das Team kann die Root Cause nicht schnell finden. Das erhöht Debugging-Zeit, Incident-Kosten und das Risiko wiederkehrender Fehler.

Einfache Regel: Jeder Run muss eine klare Spur hinterlassen - run_id, zentrale Step-Events, stop_reason und Usage-Metriken.


Beispiel für das Anti-Pattern

Das Team startet einen Support-Agenten in Production, loggt aber nur die finale Antwort.

Wenn ein Nutzer einen Fehler meldet, sieht das Team nicht, wo er entstanden ist.

PYTHON
result = agent.run(user_message)
logger.info("answer=%s", result.text)

In diesem Setup fehlt der grundlegende Run-Kontext:

PYTHON
# keine run_id
# kein step trace
# kein tool status/duration
# kein stop_reason

Für diesen Fall braucht ihr eine minimale Observability-Schicht:

PYTHON
run_id = create_run_id()
log_run_started(run_id, user_message)
...
log_stop(run_id, stop_reason, usage)

In diesem Fall führt fehlendes Monitoring zu:

  • "blindem" Debugging über Annahmen
  • längerer Wiederherstellungszeit nach Incidents
  • Wiederholung derselben Fehlertypen

Warum es entsteht und was schiefläuft

Dieses Anti-Pattern entsteht oft, wenn das Team auf Features fokussiert ist und Monitoring auf "später" verschiebt.

Typische Ursachen:

  • es wird nur finaler Output ohne Run-Level-Events geloggt
  • es gibt kein einheitliches Event-Schema für agent/tool/stop
  • Basis-Metriken pro Route fehlen (success rate, latency, cost per request)
  • es gibt keinen klaren Observability-Owner im Team

Dadurch entstehen Probleme:

  • langer MTTR - Root Cause lässt sich nur schwer schnell lokalisieren
  • wiederholte Incidents - Fixes werden "blind" ohne Ursachenprüfung gebaut
  • versteckte Degradation - latency und cost steigen unbemerkt
  • fragile Qualität - das Team sieht nicht, wo success rate fällt
  • schwache Steuerbarkeit - es ist nicht erklärbar, warum ein Run genau so geendet hat

Im Unterschied zu No Stop Conditions liegt der Hauptfehler hier bei fehlender Sichtbarkeit: selbst wenn Stop-Logik existiert, sieht das Team nicht, wie sie in einem konkreten Run gewirkt hat.

Typische Production-Signale für unzureichendes Monitoring:

  • Support erfährt von Problemen früher als das Monitoring
  • das Team kann die Ereigniskette per run_id nicht rekonstruieren
  • in Logs fehlt häufig stop_reason oder es ist keinem Run sauber zuordenbar
  • cost per request oder P95 steigen, aber das Team merkt es zu spät

Wichtig: Jeder agent/tool-Schritt ist Teil der Run-Ausführung. Ohne Traces und Metriken wird das System zur Black Box für das Team, und die Ursache-Wirkungs-Kette zwischen Aktion und Failure geht verloren.

Richtiger Ansatz

Startet mit einer minimalen Observability-Basis und macht sie für jede Route verpflichtend. Neue Metriken ergänzt ihr dann, wenn sie konkrete Incidents oder Blind Spots schließen.

Praktischer Rahmen:

  • run_id und step_id für jeden Run erfassen
  • pro Tool-Call loggen: tool, status (ok/error), duration_ms, args_hash
  • pro Run stop_reason und Usage-Metriken loggen
  • zentrale Dashboards verfolgen (z. B. success rate, P95, cost per request) und Alerts auf kritische Abweichungen setzen
PYTHON
def run_support_agent(user_message: str):
    run_id = create_run_id()
    log_event("run_started", run_id=run_id, message=user_message)

    for step_id in range(MAX_STEPS):
        decision = agent.next_step(user_message)

        if decision.type == "tool_call":
            started = now_ms()
            try:
                result = run_tool(decision.tool, decision.args)
                log_event(
                    "tool_result",
                    run_id=run_id,
                    step_id=step_id,
                    tool=decision.tool,
                    duration_ms=now_ms() - started,
                    status="ok",
                )
            except Exception:
                log_event(
                    "tool_result",
                    run_id=run_id,
                    step_id=step_id,
                    tool=decision.tool,
                    duration_ms=now_ms() - started,
                    status="error",
                )
                raise
            continue

        if decision.type == "final_answer":
            log_event("stop", run_id=run_id, stop_reason="final_answer")
            return decision.output

    log_event("stop", run_id=run_id, stop_reason="max_steps_exceeded")
    return fallback_answer()  # safe default response or escalation

In diesem Setup wird jeder Run transparent: Das Team sieht, was passiert ist, wo der Fehler lag und wie ein Fix verifiziert wird.

Schnelltest

Wenn diese Fragen mit "ja" beantwortet sind, habt ihr ein Risiko für das Anti-Pattern No Monitoring:

  • Ist es schwer, in 1-2 Minuten zu erklären, warum ein konkreter Run genau so geendet hat?
  • Meldet Support Ausfälle oft früher als eure Alerts?
  • Ist es unmöglich, den letzten fehlgeschlagenen Run aus Logs und Metriken nachzuvollziehen?

Worin es sich von anderen Anti-Patterns unterscheidet

No Stop Conditions vs No Monitoring

No Stop ConditionsNo Monitoring
Hauptproblem: im Agent-Loop fehlen klare Abschlussbedingungen.Hauptproblem: es fehlt Sichtbarkeit auf Run/Step-Events, Metriken und stop reasons.
Wann es entsteht: wenn max_steps, timeout, no_progress fehlen.Wann es entsteht: wenn Runs ohne Traces und ohne Basis-Operationsmetriken laufen.

Kurz gesagt: No Stop Conditions betrifft Loop-Kontrolle, No Monitoring betrifft fehlende Sicht auf das, was real passiert ist.

Overengineering Agents vs No Monitoring

Overengineering AgentsNo Monitoring
Hauptproblem: zusätzliche Architekturschichten ohne messbaren Nutzen.Hauptproblem: keine operative Transparenz, um ein komplexes System zu steuern.
Wann es entsteht: wenn für einfache Fälle planner/router/policy-Schichten "auf Vorrat" eingebaut werden.Wann es entsteht: wenn Runs ohne Traces laufen und das Team nicht sieht, welche Schicht den Ausfall ausgelöst hat.

Kurz gesagt: Overengineering Agents erhöht die Systemkomplexität, und No Monitoring macht diese Komplexität unsichtbar und unsteuerbar.

Agents Without Guardrails vs No Monitoring

Agents Without GuardrailsNo Monitoring
Hauptproblem: der Agent läuft ohne klare policy boundaries und Kontrollgrenzen.Hauptproblem: es fehlt operative Transparenz zur Steuerung des Agent-Systems.
Wann es entsteht: wenn kritische Sicherheits- und Zugriffsregeln nicht in expliziten Runtime-Checks verankert sind.Wann es entsteht: wenn selbst einfache Incidents ohne Run-Level-Daten untersucht werden müssen.

Kurz gesagt: Agents Without Guardrails betrifft fehlende Kontrollgrenzen, No Monitoring betrifft fehlende Sichtbarkeit darauf, wie diese Grenzen im Run (nicht) gewirkt haben.

Selbstcheck: Habt ihr dieses Anti-Pattern?

Schnellcheck für das Anti-Pattern No Monitoring.
Markiert die Punkte für euer System und prüft den Status unten.

Prüft euer System:

Fortschritt: 0/8

⚠ Es gibt Anzeichen für dieses Anti-Pattern

Verschieben Sie einfache Schritte in einen workflow und behalten Sie den Agenten nur für komplexe Entscheidungen.

FAQ

Q: Reicht es, einfach application logs zu schreiben?
A: Nein. Agent-Systeme brauchen Run-Level-Monitoring: run_id, Step-Events, stop_reason, Tool-Traces sowie Qualitäts-/Kostenmetriken.

Q: Womit anfangen, wenn fast kein Monitoring existiert?
A: Startet mit dem Minimum: run_id, stop_reason, tool status/duration, success rate, P95, cost per request. Das reduziert Blind Spots bereits deutlich.

Q: Brauchen wir replay sofort?
A: Vollständiges replay ist am Anfang nicht zwingend, aber zumindest partielle Rekonstruktion eines Runs aus Logs muss möglich sein. Sonst bleibt Fix-Validierung Raten.


Was als Nächstes

Ähnliche Anti-Patterns:

Was ihr stattdessen bauen solltet:

⏱️ 7 Min. LesezeitAktualisiert 17. März 2026Schwierigkeit: ★★★
In OnceOnly umsetzen
Safe defaults for tool permissions + write gating.
In OnceOnly nutzen
# onceonly guardrails (concept)
version: 1
tools:
  default_mode: read_only
  allowlist:
    - search.read
    - kb.read
    - http.get
writes:
  enabled: false
  require_approval: true
  idempotency: true
controls:
  kill_switch: { enabled: true, mode: disable_writes }
audit:
  enabled: true
Integriert: Production ControlOnceOnly
Guardrails für Tool-Calling-Agents
Shippe dieses Pattern mit Governance:
  • Budgets (Steps / Spend Caps)
  • Tool-Permissions (Allowlist / Blocklist)
  • Kill switch & Incident Stop
  • Idempotenz & Dedupe
  • Audit logs & Nachvollziehbarkeit
Integrierter Hinweis: OnceOnly ist eine Control-Layer für Production-Agent-Systeme.

Autor

Nick — Engineer, der Infrastruktur für KI-Agenten in Produktion aufbaut.

Fokus: Agent-Patterns, Failure-Modes, Runtime-Steuerung und Systemzuverlässigkeit.

🔗 GitHub: https://github.com/mykolademyanov


Redaktioneller Hinweis

Diese Dokumentation ist KI-gestützt, mit menschlicher redaktioneller Verantwortung für Genauigkeit, Klarheit und Produktionsrelevanz.

Der Inhalt basiert auf realen Ausfällen, Post-Mortems und operativen Vorfällen in produktiv eingesetzten KI-Agenten-Systemen.