Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Verfolgen Sie die Nutzung, Kosten und Toolaktivität von Claude Code in Ihrer Organisation, indem Sie Telemetriedaten über OpenTelemetry (OTel) exportieren. Claude Code exportiert Metriken als Zeitreihendaten über das Standard-Metriken-Protokoll, Ereignisse über das Logs/Events-Protokoll und optional verteilte Traces über das Traces-Protokoll. Konfigurieren Sie Ihre Metriken-, Logs- und Traces-Backends, um Ihre Überwachungsanforderungen zu erfüllen.

Schnellstart

Konfigurieren Sie OpenTelemetry mit Umgebungsvariablen:
# 1. Telemetrie aktivieren
export CLAUDE_CODE_ENABLE_TELEMETRY=1

# 2. Exporter auswählen (beide sind optional - konfigurieren Sie nur das, was Sie benötigen)
export OTEL_METRICS_EXPORTER=otlp       # Optionen: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp          # Optionen: otlp, console, none

# 3. OTLP-Endpunkt konfigurieren (für OTLP-Exporter)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

# 4. Authentifizierung festlegen (falls erforderlich)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"

# 5. Zum Debuggen: Exportintervalle reduzieren
export OTEL_METRIC_EXPORT_INTERVAL=10000  # 10 Sekunden (Standard: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000     # 5 Sekunden (Standard: 5000ms)

# 6. Claude Code ausführen
claude
Die Standard-Exportintervalle betragen 60 Sekunden für Metriken und 5 Sekunden für Logs. Während der Einrichtung möchten Sie möglicherweise kürzere Intervalle für Debugging-Zwecke verwenden. Denken Sie daran, diese für die Produktionsnutzung zurückzusetzen.
Für vollständige Konfigurationsoptionen siehe die OpenTelemetry-Spezifikation.

Administratorkonfiguration

Administratoren können OpenTelemetry-Einstellungen für alle Benutzer über die verwaltete Einstellungsdatei konfigurieren. Dies ermöglicht eine zentrale Kontrolle der Telemetrie-Einstellungen in einer Organisation. Weitere Informationen zur Anwendung von Einstellungen finden Sie unter Einstellungspriorität. Beispiel für verwaltete Einstellungskonfiguration:
{
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_METRICS_EXPORTER": "otlp",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
    "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
  }
}
Verwaltete Einstellungen können über MDM (Mobile Device Management) oder andere Geräteverwaltungslösungen verteilt werden. Umgebungsvariablen, die in der verwalteten Einstellungsdatei definiert sind, haben hohe Priorität und können von Benutzern nicht überschrieben werden.
Claude Code übergibt OTEL_* Umgebungsvariablen nicht an die Subprozesse, die es erzeugt, einschließlich des Bash-Tools, Hooks, MCP-Server und Sprachserver. Eine OpenTelemetry-instrumentierte Anwendung, die Sie über das Bash-Tool ausführen, erbt nicht den Exporter-Endpunkt oder die Header von Claude Code, daher setzen Sie diese Variablen direkt im Befehl, wenn diese Anwendung ihre eigene Telemetrie exportieren muss.

Konfigurationsdetails

Allgemeine Konfigurationsvariablen

UmgebungsvariableBeschreibungBeispielwerte
CLAUDE_CODE_ENABLE_TELEMETRYAktiviert die Telemetrieerfassung (erforderlich)1
OTEL_METRICS_EXPORTERMetriken-Exporter-Typ(en), kommagetrennt. Verwenden Sie none zum Deaktivierenconsole, otlp, prometheus, none
OTEL_LOGS_EXPORTERLogs/Events-Exporter-Typ(en), kommagetrennt. Verwenden Sie none zum Deaktivierenconsole, otlp, none
OTEL_EXPORTER_OTLP_PROTOCOLProtokoll für OTLP-Exporter, gilt für alle Signalegrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINTOTLP-Collector-Endpunkt für alle Signalehttp://localhost:4317
OTEL_EXPORTER_OTLP_METRICS_PROTOCOLProtokoll für Metriken, überschreibt allgemeine Einstellunggrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_METRICS_ENDPOINTOTLP-Metriken-Endpunkt, überschreibt allgemeine Einstellunghttp://localhost:4318/v1/metrics
OTEL_EXPORTER_OTLP_LOGS_PROTOCOLProtokoll für Logs, überschreibt allgemeine Einstellunggrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTOTLP-Logs-Endpunkt, überschreibt allgemeine Einstellunghttp://localhost:4318/v1/logs
OTEL_EXPORTER_OTLP_HEADERSAuthentifizierungsheader für OTLPAuthorization=Bearer token
OTEL_METRIC_EXPORT_INTERVALExportintervall in Millisekunden (Standard: 60000)5000, 60000
OTEL_LOGS_EXPORT_INTERVALLogs-Exportintervall in Millisekunden (Standard: 5000)1000, 10000
OTEL_LOG_USER_PROMPTSAktiviert die Protokollierung von Benutzer-Prompt-Inhalten (Standard: deaktiviert)1 zum Aktivieren
OTEL_LOG_TOOL_DETAILSAktiviert die Protokollierung von Tool-Parametern und Eingabeargumenten in Tool-Ereignissen und Trace-Span-Attributen: Bash-Befehle, MCP-Server- und Tool-Namen, Skill-Namen und Tool-Eingabe. Aktiviert auch benutzerdefinierte, Plugin- und MCP-Befehlsnamen bei user_prompt-Ereignissen (Standard: deaktiviert)1 zum Aktivieren
OTEL_LOG_TOOL_CONTENTAktiviert die Protokollierung von Tool-Eingabe- und Ausgabeinhalten in Span-Ereignissen (Standard: deaktiviert). Erfordert Tracing. Der Inhalt wird bei 60 KB gekürzt1 zum Aktivieren
OTEL_LOG_RAW_API_BODIESGibt die vollständige Anthropic Messages API-Anfrage und Antwort JSON als api_request_body / api_response_body Log-Ereignisse aus (Standard: deaktiviert). Texte enthalten die gesamte Konversationshistorie. Das Aktivieren impliziert Zustimmung zu allem, was OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS und OTEL_LOG_TOOL_CONTENT offenbaren würden1 für Inline-Texte gekürzt bei 60 KB, oder file:<dir> für ungekürzte Texte auf der Festplatte mit einem body_ref-Zeiger im Ereignis
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCEMetriken-Temporalitätspräferenz (Standard: delta). Setzen Sie auf cumulative, wenn Ihr Backend kumulative Temporalität erwartetdelta, cumulative
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MSIntervall zum Aktualisieren dynamischer Header (Standard: 1740000ms / 29 Minuten)900000

mTLS-Authentifizierung

Wie Sie Client-Zertifikate für den OTLP-Exporter konfigurieren, hängt vom OTLP-Protokoll ab, das für dieses Signal verwendet wird, das über OTEL_EXPORTER_OTLP_PROTOCOL oder die Pro-Signal-Überschreibung gesetzt wird. Die gleiche Konfiguration gilt für Metriken, Logs und Traces.
ProtokollClient-Zertifikat-VariablenVertrauen Sie dem Collector-CA mit
http/protobuf, http/jsonCLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY und optional CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. Siehe NetzwerkkonfigurationNODE_EXTRA_CA_CERTS
grpcOTEL_EXPORTER_OTLP_CLIENT_KEY und OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, oder die Pro-Signal-Varianten wie OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY, um ein anderes Zertifikat pro Signal zu verwendenOTEL_EXPORTER_OTLP_CERTIFICATE
Für grpc liest das OpenTelemetry SDK die Standard-OTLP-Variablen direkt, daher funktionieren bestehende Konfigurationen, die die Pro-Signal-Metriken-Variablen setzen, weiterhin.

Metriken-Kardinalitätskontrolle

Die folgenden Umgebungsvariablen steuern, welche Attribute in Metriken enthalten sind, um die Kardinalität zu verwalten:
UmgebungsvariableBeschreibungStandardwertBeispiel zum Deaktivieren
OTEL_METRICS_INCLUDE_SESSION_IDAttribut session.id in Metriken einschließentruefalse
OTEL_METRICS_INCLUDE_VERSIONAttribut app.version in Metriken einschließenfalsetrue
OTEL_METRICS_INCLUDE_ACCOUNT_UUIDAttribute user.account_uuid und user.account_id in Metriken einschließentruefalse
Diese Variablen helfen, die Kardinalität von Metriken zu kontrollieren, was sich auf die Speicheranforderungen und die Abfrageleistung in Ihrem Metriken-Backend auswirkt. Eine niedrigere Kardinalität bedeutet in der Regel bessere Leistung und niedrigere Speicherkosten, aber weniger granulare Daten für die Analyse.

Traces (Beta)

Verteiltes Tracing exportiert Spans, die jeden Benutzer-Prompt mit den API-Anfragen und Tool-Ausführungen verknüpfen, die er auslöst, sodass Sie eine vollständige Anfrage als einzelnen Trace in Ihrem Tracing-Backend anzeigen können. Tracing ist standardmäßig deaktiviert. Um es zu aktivieren, setzen Sie sowohl CLAUDE_CODE_ENABLE_TELEMETRY=1 als auch CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, und setzen Sie dann OTEL_TRACES_EXPORTER, um auszuwählen, wohin Spans gesendet werden. Traces verwenden die allgemeine OTLP-Konfiguration für Endpunkt, Protokoll, Header und mTLS erneut.
UmgebungsvariableBeschreibungBeispielwerte
CLAUDE_CODE_ENHANCED_TELEMETRY_BETAAktiviert Span-Tracing (erforderlich). ENABLE_ENHANCED_TELEMETRY_BETA wird auch akzeptiert1
OTEL_TRACES_EXPORTERTraces-Exporter-Typ(en), kommagetrennt. Verwenden Sie none zum Deaktivierenconsole, otlp, none
OTEL_EXPORTER_OTLP_TRACES_PROTOCOLProtokoll für Traces, überschreibt OTEL_EXPORTER_OTLP_PROTOCOLgrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTOTLP-Traces-Endpunkt, überschreibt OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:4318/v1/traces
OTEL_TRACES_EXPORT_INTERVALSpan-Batch-Exportintervall in Millisekunden (Standard: 5000)1000, 10000
Spans schwärzen Benutzer-Prompt-Text, Tool-Eingabedetails und Tool-Inhalte standardmäßig. Setzen Sie OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 und OTEL_LOG_TOOL_CONTENT=1, um sie einzubeziehen. Wenn Tracing aktiv ist, erben Bash- und PowerShell-Subprozesse automatisch eine TRACEPARENT-Umgebungsvariable, die den W3C-Trace-Kontext des aktiven Tool-Ausführungs-Spans enthält. Dies ermöglicht jedem Subprozess, der TRACEPARENT liest, seine eigenen Spans unter demselben Trace zu verschachteln, was eine End-to-End-verteilte Tracing durch Skripte und Befehle ermöglicht, die Claude ausführt. In Agent SDK und nicht-interaktiven Sitzungen, die mit -p gestartet werden, liest Claude Code auch TRACEPARENT und TRACESTATE aus seiner eigenen Umgebung, wenn jeder Interaktions-Span gestartet wird. Dies ermöglicht einem Embedding-Prozess, seinen aktiven W3C-Trace-Kontext in den Subprozess zu übergeben, sodass Claude Code’s Spans als untergeordnete Elemente des Aufrufers verteilter Trace erscheinen. Interaktive Sitzungen ignorieren eingehende TRACEPARENT, um zu vermeiden, dass versehentlich Umgebungswerte aus CI oder Container-Umgebungen geerbt werden.

Span-Hierarchie

Jeder Benutzer-Prompt startet einen claude_code.interaction Root-Span. API-Aufrufe, Tool-Aufrufe und Hook-Ausführungen werden als untergeordnete Elemente aufgezeichnet. Tool-Spans haben zwei untergeordnete Spans: einen für die Zeit, die auf eine Berechtigungsentscheidung gewartet wird, und einen für die Ausführung selbst. Wenn das Task-Tool einen Subagenten erzeugt, werden die API- und Tool-Spans des Subagenten unter dem claude_code.tool-Span des übergeordneten Elements verschachtelt.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook                    (erfordert detailliertes Beta-Tracing)
└── claude_code.tool
    ├── claude_code.tool.blocked_on_user
    ├── claude_code.tool.execution
    └── (Task-Tool) Subagent claude_code.llm_request / claude_code.tool Spans
In Agent SDK und claude -p Sitzungen wird claude_code.interaction selbst ein untergeordnetes Element des Aufrufers-Spans, wenn TRACEPARENT in der Umgebung gesetzt ist.

Span-Attribute

Jeder Span trägt die Standardattribute plus ein span.type-Attribut, das seinem Namen entspricht. Die folgenden Tabellen listen die zusätzlichen Attribute auf, die auf jedem Span gesetzt sind. Die Spans llm_request, tool.execution und hook setzen OpenTelemetry-Status ERROR, wenn sie einen Fehler aufzeichnen; die anderen Spans enden immer mit Status UNSET. claude_code.interaction
AttributBeschreibungGated durch
user_promptPrompt-Text. Der Wert ist <REDACTED>, es sei denn, das Gate ist gesetztOTEL_LOG_USER_PROMPTS
user_prompt_lengthPrompt-Länge in Zeichen
interaction.sequence1-basierter Zähler von Interaktionen in dieser Sitzung
interaction.duration_msWanduhr-Dauer des Durchgangs
claude_code.llm_request
AttributBeschreibungGated durch
modelModellkennung
gen_ai.systemImmer anthropic. OpenTelemetry GenAI semantische Konvention
gen_ai.request.modelGleicher Wert wie model. OpenTelemetry GenAI semantische Konvention
query_sourceSubsystem, das die Anfrage gestellt hat, wie repl_main_thread oder ein Subagent-Name
agent_idKennung des Subagenten oder Teamkollegen, der die Anfrage gestellt hat. Fehlt in der Hauptsitzung
parent_agent_idKennung des Agenten, der diesen erzeugt hat. Fehlt für die Hauptsitzung und für Agenten, die direkt von ihr erzeugt wurden
speedfast oder normal
llm_request.contextinteraction, tool oder standalone je nach übergeordnetem Span
duration_msWanduhr-Dauer einschließlich Wiederholungen
ttft_msZeit bis zum ersten Token in Millisekunden
input_tokensEingabe-Token-Anzahl aus dem API-Nutzungsblock
output_tokensAusgabe-Token-Anzahl
cache_read_tokensAus dem Prompt-Cache gelesene Token
cache_creation_tokensIn den Prompt-Cache geschriebene Token
request_idAnthropic API-Anfrage-ID aus dem request-id Response-Header
gen_ai.response.idGleicher Wert wie request_id. OpenTelemetry GenAI semantische Konvention
client_request_idClient-generierte x-client-request-id des letzten Versuchs
attemptGesamtzahl der Versuche für diese Anfrage
successtrue oder false
status_codeHTTP-Statuscode, wenn die Anfrage fehlgeschlagen ist
errorFehlermeldung, wenn die Anfrage fehlgeschlagen ist
response.has_tool_calltrue, wenn die Antwort Tool-Use-Blöcke enthielt
stop_reasonAPI-Antwort stop_reason, wie end_turn, tool_use, max_tokens, stop_sequence, pause_turn oder refusal
gen_ai.response.finish_reasonsGleicher Wert wie stop_reason, in einem String-Array verpackt. OpenTelemetry GenAI semantische Konvention
Jeder Wiederholungsversuch wird auch als gen_ai.request.attempt Span-Ereignis mit attempt und client_request_id Attributen aufgezeichnet. claude_code.tool
AttributBeschreibungGated durch
tool_nameTool-Name
duration_msWanduhr-Dauer einschließlich Berechtigungswartung und Ausführung
result_tokensUngefähre Token-Größe des Tool-Ergebnisses
file_pathZieldateipfad für Read-, Edit- und Write-ToolsOTEL_LOG_TOOL_DETAILS
full_commandBefehlszeichenkette für das Bash-ToolOTEL_LOG_TOOL_DETAILS
skill_nameSkill-Name für das Skill-ToolOTEL_LOG_TOOL_DETAILS
subagent_typeSubagent-Typ für das Task-ToolOTEL_LOG_TOOL_DETAILS
Wenn OTEL_LOG_TOOL_CONTENT=1, zeichnet dieser Span auch ein tool.output Span-Ereignis auf, dessen Attribute die Tool-Eingabe- und Ausgabetexte enthalten, gekürzt bei 60 KB pro Attribut. claude_code.tool.blocked_on_user
AttributBeschreibungGated durch
duration_msZeit, die auf die Berechtigungsentscheidung gewartet wird
decisionaccept oder reject
sourceEntscheidungsquelle, entsprechend dem Tool-Entscheidungs-Ereignis
claude_code.tool.execution
AttributBeschreibungGated durch
duration_msZeit, die für die Ausführung des Tool-Body aufgewendet wird
successtrue oder false
errorFehler-Kategoriezeichenkette, wenn die Ausführung fehlgeschlagen ist, wie Error:ENOENT oder ShellError. Enthält die vollständige Fehlermeldung, wenn das Gate gesetzt istOTEL_LOG_TOOL_DETAILS
claude_code.hook Dieser Span wird nur ausgegeben, wenn detailliertes Beta-Tracing aktiv ist, was ENABLE_BETA_TRACING_DETAILED=1 und BETA_TRACING_ENDPOINT zusätzlich zur obigen Trace-Exporter-Konfiguration erfordert. In interaktiven CLI-Sitzungen erfordert dies auch, dass Ihre Organisation für die Funktion auf die Whitelist gesetzt ist. Agent SDK und nicht-interaktive -p Sitzungen sind nicht gated. Es wird nicht ausgegeben, wenn nur CLAUDE_CODE_ENHANCED_TELEMETRY_BETA gesetzt ist.
AttributBeschreibungGated durch
hook_eventHook-Ereignistyp, wie PreToolUse
hook_nameVollständiger Hook-Name, wie PreToolUse:Write
num_hooksAnzahl der ausgeführten übereinstimmenden Hook-Befehle
hook_definitionsJSON-serialisierte Hook-KonfigurationOTEL_LOG_TOOL_DETAILS
duration_msWanduhr-Dauer aller übereinstimmenden Hooks
num_successAnzahl der Hooks, die erfolgreich abgeschlossen wurden
num_blockingAnzahl der Hooks, die eine Blockierungsentscheidung zurückgegeben haben
num_non_blocking_errorAnzahl der Hooks, die ohne Blockierung fehlgeschlagen sind
num_cancelledAnzahl der Hooks, die vor Abschluss abgebrochen wurden
Zusätzliche inhaltshaltige Attribute wie new_context, system_prompt_preview, user_system_prompt, tool_input und response.model_output werden nur ausgegeben, wenn detailliertes Beta-Tracing aktiv ist. Sie sind nicht Teil des stabilen Span-Schemas. user_system_prompt erfordert zusätzlich OTEL_LOG_USER_PROMPTS=1. Es trägt nur den System-Prompt-Text, den Sie über die systemPrompt SDK-Option oder die Flags --system-prompt und --append-system-prompt bereitstellen, gekürzt bei 60 KB, und wird einmal pro Sitzung statt pro Anfrage ausgegeben.

Dynamische Header

Für Unternehmensumgebungen, die eine dynamische Authentifizierung erfordern, können Sie ein Skript konfigurieren, um Header dynamisch zu generieren. Dynamische Header gelten nur für die Protokolle http/protobuf und http/json. Der grpc Exporter verwendet nur den statischen OTEL_EXPORTER_OTLP_HEADERS Wert.

Einstellungskonfiguration

Fügen Sie zu Ihrer .claude/settings.json hinzu:
{
  "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"
}

Skriptanforderungen

Das Skript muss gültiges JSON mit Zeichenketten-Schlüssel-Wert-Paaren ausgeben, die HTTP-Header darstellen:
#!/bin/bash
# Beispiel: Mehrere Header
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

Aktualisierungsverhalten

Das Headers-Helper-Skript wird beim Start und danach regelmäßig ausgeführt, um Token-Aktualisierung zu unterstützen. Standardmäßig wird das Skript alle 29 Minuten ausgeführt. Passen Sie das Intervall mit der Umgebungsvariable CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS an.

Unterstützung für Multi-Team-Organisationen

Organisationen mit mehreren Teams oder Abteilungen können benutzerdefinierte Attribute hinzufügen, um zwischen verschiedenen Gruppen zu unterscheiden, indem sie die Umgebungsvariable OTEL_RESOURCE_ATTRIBUTES verwenden:
# Benutzerdefinierte Attribute für Team-Identifikation hinzufügen
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Diese benutzerdefinierten Attribute werden in alle Metriken und Ereignisse einbezogen, sodass Sie:
  • Metriken nach Team oder Abteilung filtern können
  • Kosten pro Kostenstelle verfolgen können
  • Team-spezifische Dashboards erstellen können
  • Warnungen für bestimmte Teams einrichten können
Wichtige Formatierungsanforderungen für OTEL_RESOURCE_ATTRIBUTES:Die Umgebungsvariable OTEL_RESOURCE_ATTRIBUTES verwendet kommagetrennte Schlüssel=Wert-Paare mit strikten Formatierungsanforderungen:
  • Keine Leerzeichen erlaubt: Werte dürfen keine Leerzeichen enthalten. Zum Beispiel ist user.organizationName=My Company ungültig
  • Format: Muss kommagetrennte Schlüssel=Wert-Paare sein: key1=value1,key2=value2
  • Zulässige Zeichen: Nur US-ASCII-Zeichen ohne Steuerzeichen, Leerzeichen, doppelte Anführungszeichen, Kommas, Semikola und Backslashes
  • Sonderzeichen: Zeichen außerhalb des zulässigen Bereichs müssen prozentcodiert sein
Beispiele:
# ❌ Ungültig - enthält Leerzeichen
export OTEL_RESOURCE_ATTRIBUTES="org.name=John's Organization"

# ✅ Gültig - verwenden Sie stattdessen Unterstriche oder camelCase
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

# ✅ Gültig - prozentcodieren Sie Sonderzeichen, falls erforderlich
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
Hinweis: Das Einschließen von Werten in Anführungszeichen entkommt keine Leerzeichen. Zum Beispiel führt org.name="My Company" zum Literalwert "My Company" (mit Anführungszeichen enthalten), nicht zu My Company.

Beispielkonfigurationen

Setzen Sie diese Umgebungsvariablen vor dem Ausführen von claude. Jeder Block zeigt eine vollständige Konfiguration für einen anderen Exporter oder ein anderes Bereitstellungsszenario:
# Console-Debugging (1-Sekunden-Intervalle)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000

# OTLP/gRPC
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

# Prometheus
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus

# Mehrere Exporter
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

# Unterschiedliche Endpunkte/Backends für Metriken und Logs
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

# Nur Metriken (keine Ereignisse/Logs)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

# Nur Ereignisse/Logs (keine Metriken)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

Verfügbare Metriken und Ereignisse

Standardattribute

Alle Metriken und Ereignisse teilen diese Standardattribute:
AttributBeschreibungGesteuert durch
session.idEindeutige SitzungskennungOTEL_METRICS_INCLUDE_SESSION_ID (Standard: true)
app.versionAktuelle Claude Code-VersionOTEL_METRICS_INCLUDE_VERSION (Standard: false)
organization.idOrganisations-UUID (wenn authentifiziert)Immer enthalten, wenn verfügbar
user.account_uuidKonto-UUID (wenn authentifiziert)OTEL_METRICS_INCLUDE_ACCOUNT_UUID (Standard: true)
user.account_idKonto-ID im getaggten Format, das Anthropic-Admin-APIs entspricht (wenn authentifiziert), wie user_01BWBeN28...OTEL_METRICS_INCLUDE_ACCOUNT_UUID (Standard: true)
user.idAnonyme Geräte-/Installationskennung, generiert pro Claude Code-InstallationImmer enthalten
user.emailE-Mail-Adresse des Benutzers (wenn über OAuth authentifiziert)Immer enthalten, wenn verfügbar
terminal.typeTerminal-Typ, wie iTerm.app, vscode, cursor oder tmuxImmer enthalten, wenn erkannt
Ereignisse enthalten zusätzlich die folgenden Attribute. Diese werden niemals an Metriken angehängt, da sie zu unbegrenzter Kardinalität führen würden:
  • prompt.id: UUID, die einen Benutzer-Prompt mit allen nachfolgenden Ereignissen bis zum nächsten Prompt korreliert. Siehe Ereigniskorrelationsattribute.
  • workspace.host_paths: Host-Workspace-Verzeichnisse, die in der Desktop-App ausgewählt wurden, als String-Array

Metriken

Claude Code exportiert die folgenden Metriken:
MetriknameBeschreibungEinheit
claude_code.session.countAnzahl der gestarteten CLI-Sitzungencount
claude_code.lines_of_code.countAnzahl der geänderten Codezeilencount
claude_code.pull_request.countAnzahl der erstellten Pull Requestscount
claude_code.commit.countAnzahl der erstellten Git-Commitscount
claude_code.cost.usageKosten der Claude Code-SitzungUSD
claude_code.token.usageAnzahl der verwendeten Tokentokens
claude_code.code_edit_tool.decisionAnzahl der Entscheidungen zur Berechtigung des Code-Bearbeitungstoolscount
claude_code.active_time.totalGesamte aktive Zeit in Sekundens

Metrik-Details

Jede Metrik enthält die oben aufgeführten Standardattribute. Metriken mit zusätzlichen kontextspezifischen Attributen werden nachfolgend vermerkt.

Sitzungszähler

Wird zu Beginn jeder Sitzung erhöht. Attribute:
  • Alle Standardattribute
  • start_type: Wie die Sitzung gestartet wurde. Einer von "fresh", "resume" oder "continue"

Codezeilen-Zähler

Wird erhöht, wenn Code hinzugefügt oder entfernt wird. Attribute:

Pull-Request-Zähler

Wird erhöht, wenn Claude Code einen Pull Request oder Merge Request über einen Shell-Befehl oder ein MCP-Tool erstellt. Attribute:

Commit-Zähler

Wird erhöht, wenn Git-Commits über Claude Code erstellt werden. Attribute:

Kostenzähler

Wird nach jeder API-Anfrage erhöht. Attribute:
  • Alle Standardattribute
  • model: Modellkennung (zum Beispiel “claude-sonnet-4-6”)
  • query_source: Kategorie des Subsystems, das die Anfrage gestellt hat. Einer von "main", "subagent" oder "auxiliary"
  • speed: "fast", wenn die Anfrage den schnellen Modus verwendet hat. Andernfalls nicht vorhanden
  • effort: Anstrengungsstufe, die auf die Anfrage angewendet wird: "low", "medium", "high", "xhigh" oder "max". Nicht vorhanden, wenn das Modell Anstrengung nicht unterstützt.
  • agent.name: Subagent-Typ, der die Anfrage gestellt hat. Integrierte Agent-Namen und Agents aus offiziellen Marketplace-Plugins werden wörtlich angezeigt. Andere benutzerdefinierte Agent-Namen werden durch "custom" ersetzt. Nicht vorhanden, wenn die Anfrage nicht von einem benannten Subagent-Typ gestellt wurde.
  • skill.name: Skill, der für die Anfrage aktiv ist, gesetzt durch das Skill-Tool, einen / Befehl oder geerbt von einem erzeugten Subagent. Integrierte, gebündelte, benutzerdefinierte und offizielle Marketplace-Plugin-Skill-Namen werden wörtlich angezeigt. Drittanbieter-Plugin-Skill-Namen werden durch "third-party" ersetzt. Nicht vorhanden, wenn kein Skill aktiv ist.
  • plugin.name: Besitzendes Plugin, wenn der aktive Skill oder Subagent von einem Plugin bereitgestellt wird. Offizielle Marketplace-Plugin-Namen werden wörtlich angezeigt. Drittanbieter-Plugin-Namen werden durch "third-party" ersetzt. Nicht vorhanden, wenn weder der Skill noch der Subagent ein besitzendes Plugin hat.
  • marketplace.name: Marketplace, von dem das besitzende Plugin installiert wurde. Nur für offizielle Marketplace-Plugins ausgegeben. Andernfalls nicht vorhanden.

Token-Zähler

Wird nach jeder API-Anfrage erhöht. Attribute:
  • Alle Standardattribute
  • type: ("input", "output", "cacheRead", "cacheCreation")
  • model: Modellkennung (zum Beispiel “claude-sonnet-4-6”)
  • query_source: Kategorie des Subsystems, das die Anfrage gestellt hat. Einer von "main", "subagent" oder "auxiliary"
  • speed: "fast", wenn die Anfrage den schnellen Modus verwendet hat. Andernfalls nicht vorhanden
  • effort: Anstrengungsstufe, die auf die Anfrage angewendet wird. Siehe Kostenzähler für Details.
  • agent.name, skill.name, plugin.name, marketplace.name: Skill-, Plugin- und Agent-Zuordnung für die Anfrage. Siehe Kostenzähler für Definitionen und Schwärzungsverhalten.

Code-Edit-Tool-Entscheidungszähler

Wird erhöht, wenn der Benutzer die Verwendung des Edit-, Write- oder NotebookEdit-Tools akzeptiert oder ablehnt. Attribute:
  • Alle Standardattribute
  • tool_name: Tool-Name ("Edit", "Write", "NotebookEdit")
  • decision: Benutzerentscheidung ("accept", "reject")
  • source: Entscheidungsquelle. Einer von "config", "hook", "user_permanent", "user_temporary", "user_abort" oder "user_reject". Siehe das Tool-Entscheidungs-Ereignis für die Bedeutung jedes Wertes.
  • language: Programmiersprache der bearbeiteten Datei, wie "TypeScript", "Python", "JavaScript" oder "Markdown". Gibt "unknown" für nicht erkannte Dateierweiterungen zurück.

Aktive-Zeit-Zähler

Verfolgt die tatsächliche Zeit, die aktiv Claude Code verwendet wird, ohne Leerlaufzeit. Diese Metrik wird während Benutzerinteraktionen (Eingabe, Lesen von Antworten) und während CLI-Verarbeitung (Tool-Ausführung, KI-Antwortgenerierung) erhöht. Attribute:
  • Alle Standardattribute
  • type: "user" für Tastaturinteraktionen, "cli" für Tool-Ausführung und KI-Antworten

Ereignisse

Claude Code exportiert die folgenden Ereignisse über OpenTelemetry Logs/Events (wenn OTEL_LOGS_EXPORTER konfiguriert ist):

Ereigniskorrelationsattribute

Wenn ein Benutzer einen Prompt einreicht, kann Claude Code mehrere API-Aufrufe tätigen und mehrere Tools ausführen. Das Attribut prompt.id ermöglicht es Ihnen, alle diese Ereignisse an den einzelnen Prompt zu binden, der sie ausgelöst hat.
AttributBeschreibung
prompt.idUUID v4-Kennung, die alle Ereignisse verknüpft, die während der Verarbeitung eines einzelnen Benutzer-Prompts erzeugt werden
Um alle Aktivitäten zu verfolgen, die durch einen einzelnen Prompt ausgelöst werden, filtern Sie Ihre Ereignisse nach einem bestimmten prompt.id-Wert. Dies gibt das user_prompt-Ereignis, alle api_request-Ereignisse und alle tool_result-Ereignisse zurück, die während der Verarbeitung dieses Prompts aufgetreten sind.
prompt.id ist absichtlich aus Metriken ausgeschlossen, da jeder Prompt eine eindeutige ID generiert, was zu einer ständig wachsenden Anzahl von Zeitreihen führen würde. Verwenden Sie es nur für Ereignisanalyse und Audit-Trails.

Benutzer-Prompt-Ereignis

Protokolliert, wenn ein Benutzer einen Prompt einreicht. Ereignisname: claude_code.user_prompt Attribute:
  • Alle Standardattribute
  • event.name: "user_prompt"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • prompt_length: Länge des Prompts
  • prompt: Prompt-Inhalt (standardmäßig geschwärzt, aktivieren Sie mit OTEL_LOG_USER_PROMPTS=1)
  • command_name: Befehlsname, wenn der Prompt einen aufruft. Integrierte und gebündelte Befehlsnamen wie compact oder debug werden wie geschrieben ausgegeben; Aliase wie reset werden wie eingegeben ausgegeben, nicht der kanonische Name. Benutzerdefinierte, Plugin- und MCP-Befehlsnamen werden zu custom oder mcp zusammengefasst, es sei denn, OTEL_LOG_TOOL_DETAILS=1 ist gesetzt
  • command_source: Ursprung des Befehls, wenn vorhanden: builtin, custom oder mcp. Von Plugins bereitgestellte Befehle werden als custom gemeldet

Tool-Ergebnis-Ereignis

Protokolliert, wenn ein Tool die Ausführung abgeschlossen hat. Ereignisname: claude_code.tool_result Attribute:
  • Alle Standardattribute
  • event.name: "tool_result"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • tool_name: Name des Tools
  • tool_use_id: Eindeutige Kennung für diese Tool-Invokation. Entspricht der tool_use_id, die an Hooks übergeben wird, und ermöglicht die Korrelation zwischen OTel-Ereignissen und Hook-erfassten Daten.
  • success: "true" oder "false"
  • duration_ms: Ausführungszeit in Millisekunden
  • error_type: Fehler-Kategoriezeichenkette, wenn das Tool fehlgeschlagen ist, wie "Error:ENOENT" oder "ShellError"
  • error (wenn OTEL_LOG_TOOL_DETAILS=1): Vollständige Fehlermeldung, wenn das Tool fehlgeschlagen ist
  • decision_type: Entweder "accept" oder "reject"
  • decision_source: Entscheidungsquelle. Einer von "config", "hook", "user_permanent", "user_temporary", "user_abort" oder "user_reject". Siehe das Tool-Entscheidungs-Ereignis für die Bedeutung jedes Wertes.
  • tool_input_size_bytes: Größe der JSON-serialisierten Tool-Eingabe in Bytes
  • tool_result_size_bytes: Größe des Tool-Ergebnisses in Bytes
  • mcp_server_scope: MCP-Server-Scope-Kennung (für MCP-Tools)
  • tool_parameters (wenn OTEL_LOG_TOOL_DETAILS=1): JSON-Zeichenkette mit Tool-spezifischen Parametern:
    • Für Bash-Tool: enthält bash_command, full_command, timeout, description, dangerouslyDisableSandbox und git_commit_id (der Commit-SHA, wenn ein git commit-Befehl erfolgreich ist)
    • Für MCP-Tools: enthält mcp_server_name, mcp_tool_name
    • Für Skill-Tool: enthält skill_name
    • Für Task-Tool: enthält subagent_type
  • tool_input (wenn OTEL_LOG_TOOL_DETAILS=1): JSON-serialisierte Tool-Argumente. Einzelne Werte über 512 Zeichen werden gekürzt, und die gesamte Nutzlast ist auf etwa 4 K Zeichen begrenzt. Gilt für alle Tools einschließlich MCP-Tools.

API-Anfrage-Ereignis

Protokolliert für jede API-Anfrage an Claude. Ereignisname: claude_code.api_request Attribute:
  • Alle Standardattribute
  • event.name: "api_request"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • model: Verwendetes Modell (zum Beispiel “claude-sonnet-4-6”)
  • cost_usd: Geschätzte Kosten in USD
  • duration_ms: Anfragedauer in Millisekunden
  • input_tokens: Anzahl der Eingabe-Token
  • output_tokens: Anzahl der Ausgabe-Token
  • cache_read_tokens: Anzahl der aus dem Cache gelesenen Token
  • cache_creation_tokens: Anzahl der Token, die für die Cache-Erstellung verwendet werden
  • request_id: Anthropic API-Anfrage-ID aus dem Response-Header request-id, wie "req_011...". Nur vorhanden, wenn die API eine zurückgibt.
  • speed: "fast" oder "normal", was angibt, ob der schnelle Modus aktiv war
  • query_source: Subsystem, das die Anfrage gestellt hat, wie "repl_main_thread", "compact" oder ein Subagent-Name
  • effort: Anstrengungsstufe, die auf die Anfrage angewendet wird: "low", "medium", "high", "xhigh" oder "max". Nicht vorhanden, wenn das Modell Anstrengung nicht unterstützt.

API-Fehler-Ereignis

Protokolliert, wenn eine API-Anfrage an Claude fehlschlägt. Ereignisname: claude_code.api_error Attribute:
  • Alle Standardattribute
  • event.name: "api_error"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • model: Verwendetes Modell (zum Beispiel “claude-sonnet-4-6”)
  • error: Fehlermeldung
  • status_code: HTTP-Statuscode als Zahl. Nicht vorhanden für Nicht-HTTP-Fehler wie Verbindungsfehler.
  • duration_ms: Anfragedauer in Millisekunden
  • attempt: Gesamtzahl der Versuche, einschließlich der ursprünglichen Anfrage (1 bedeutet, dass keine Wiederholungen aufgetreten sind)
  • request_id: Anthropic API-Anfrage-ID aus dem Response-Header request-id, wie "req_011...". Nur vorhanden, wenn die API eine zurückgibt.
  • speed: "fast" oder "normal", was angibt, ob der schnelle Modus aktiv war
  • query_source: Subsystem, das die Anfrage gestellt hat, wie "repl_main_thread", "compact" oder ein Subagent-Name
  • effort: Anstrengungsstufe, die auf die Anfrage angewendet wird. Nicht vorhanden, wenn das Modell Anstrengung nicht unterstützt.

API-Anfrage-Text-Ereignis

Protokolliert für jeden API-Anfrage-Versuch, wenn OTEL_LOG_RAW_API_BODIES gesetzt ist. Ein Ereignis wird pro Versuch ausgegeben, daher erzeugen Wiederholungen mit angepassten Parametern jeweils ihr eigenes Ereignis. Ereignisname: claude_code.api_request_body Attribute:
  • Alle Standardattribute
  • event.name: "api_request_body"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • body: JSON-serialisierte Messages API-Anfrageparameter (Systemprompt, Nachrichten, Tools usw.), gekürzt bei 60 KB. Extended-Thinking-Inhalte in vorherigen Assistent-Durchgängen werden geschwärzt. Nur im Inline-Modus ausgegeben (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Absoluter Pfad zu einer <dir>/<uuid>.request.json Datei, die den ungekürzte Text enthält. Nur im Datei-Modus ausgegeben (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Ungekürzte Text-Länge. UTF-8-Bytes, wenn OTEL_LOG_RAW_API_BODIES=file:<dir>, oder UTF-16-Code-Einheiten, wenn =1
  • body_truncated: "true", wenn Inline-Kürzung aufgetreten ist. Nicht vorhanden im Datei-Modus und wenn keine Kürzung aufgetreten ist.
  • model: Modellkennung aus den Anfrageparametern
  • query_source: Subsystem, das die Anfrage gestellt hat (zum Beispiel "compact")

API-Antwort-Text-Ereignis

Protokolliert für jede erfolgreiche API-Antwort, wenn OTEL_LOG_RAW_API_BODIES gesetzt ist. Ereignisname: claude_code.api_response_body Attribute:
  • Alle Standardattribute
  • event.name: "api_response_body"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • body: JSON-serialisierte Messages API-Antwort (id, Inhaltsblöcke, Nutzung, Stoppgrund), gekürzt bei 60 KB. Extended-Thinking-Inhalte werden geschwärzt. Nur im Inline-Modus ausgegeben (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Absoluter Pfad zu einer <dir>/<request_id>.response.json Datei, die den ungekürzte Text enthält. Nur im Datei-Modus ausgegeben (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Ungekürzte Text-Länge. UTF-8-Bytes, wenn OTEL_LOG_RAW_API_BODIES=file:<dir>, oder UTF-16-Code-Einheiten, wenn =1
  • body_truncated: "true", wenn Inline-Kürzung aufgetreten ist. Nicht vorhanden im Datei-Modus und wenn keine Kürzung aufgetreten ist.
  • model: Modellkennung
  • query_source: Subsystem, das die Anfrage gestellt hat
  • request_id: Anthropic API-Anfrage-ID aus dem Response-Header request-id, wie "req_011...". Nur vorhanden, wenn die API eine zurückgibt.

Tool-Entscheidungs-Ereignis

Protokolliert, wenn eine Tool-Berechtigungsentscheidung getroffen wird (akzeptieren/ablehnen). Ereignisname: claude_code.tool_decision Attribute:
  • Alle Standardattribute
  • event.name: "tool_decision"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • tool_name: Name des Tools (zum Beispiel “Read”, “Edit”, “Write”, “NotebookEdit”)
  • tool_use_id: Eindeutige Kennung für diese Tool-Invokation. Entspricht der tool_use_id, die an Hooks übergeben wird, und ermöglicht die Korrelation zwischen OTel-Ereignissen und Hook-erfassten Daten.
  • decision: Entweder "accept" oder "reject"
  • source: Entscheidungsquelle:
    • "config": Automatisch entschieden, ohne Aufforderung, basierend auf Projekteinstellungen, Zulassungsregeln in den persönlichen Einstellungen des Benutzers, verwalteter Unternehmensrichtlinie, --allowedTools oder --disallowedTools Flags, dem aktiven Berechtigungsmodus, einer sitzungsbegrenzten Zulassung aus einem früheren Prompt in der gleichen interaktiven CLI-Sitzung oder weil das Tool inhärent sicher ist. Das Ereignis gibt nicht an, welche dieser Quellen übereinstimmte.
    • "hook": Ein PreToolUse oder PermissionRequest Hook hat die Entscheidung zurückgegeben.
    • "user_permanent": Wird ausgegeben, wenn der Benutzer “Ja, und nicht mehr fragen für …” bei einer Berechtigungsaufforderung wählte, was eine Zulassungsregel in seinen persönlichen Einstellungen speichert. In der interaktiven CLI wird dies nur für diese Wahl selbst ausgegeben; spätere Aufrufe, die der gespeicherten Regel entsprechen, geben stattdessen "config" aus. In Agent SDK oder nicht-interaktiven -p Sitzungen geben sowohl die ursprüngliche Wahl als auch spätere Regelübereinstimmungen "user_permanent" aus. Wird als Akzeptanz behandelt.
    • "user_temporary": Wird ausgegeben, wenn der Benutzer “Ja” bei einer Berechtigungsaufforderung wählte, oder eine der Optionen ”… während dieser Sitzung” bei einer Dateibearbeitungs- oder Leseanforderung wählte. In der interaktiven CLI wird dies nur für die Wahl selbst ausgegeben; spätere Aufrufe, die durch diese sitzungsbegrenzte Zulassung zulässig sind, geben stattdessen "config" aus. In Agent SDK oder nicht-interaktiven -p Sitzungen geben sowohl die Wahl als auch spätere Übereinstimmungen "user_temporary" aus. Wird als Akzeptanz behandelt.
    • "user_abort": Wird ausgegeben, wenn der Benutzer die Berechtigungsaufforderung geschlossen hat, ohne zu antworten. Wird als Ablehnung behandelt.
    • "user_reject": Wird ausgegeben, wenn der Benutzer “Nein” wählte, wenn aufgefordert, oder ein Aufruf einer Ablehnungsregel in seinen persönlichen Einstellungen entsprach. Wird als Ablehnung behandelt.

Berechtigungsmodus-Änderungs-Ereignis

Protokolliert, wenn sich der Berechtigungsmodus ändert, zum Beispiel durch Shift+Tab-Zyklus, Beendigung des Plan-Modus oder eine Auto-Modus-Gate-Prüfung. Ereignisname: claude_code.permission_mode_changed Attribute:
  • Alle Standardattribute
  • event.name: "permission_mode_changed"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • from_mode: Der vorherige Berechtigungsmodus, zum Beispiel "default", "plan", "acceptEdits", "auto" oder "bypassPermissions"
  • to_mode: Der neue Berechtigungsmodus
  • trigger: Was die Änderung verursacht hat. Einer von "shift_tab", "exit_plan_mode", "auto_gate_denied" oder "auto_opt_in". Nicht vorhanden, wenn der Übergang vom SDK oder Bridge stammt

Auth-Ereignis

Protokolliert, wenn /login oder /logout abgeschlossen ist. Ereignisname: claude_code.auth Attribute:
  • Alle Standardattribute
  • event.name: "auth"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • action: "login" oder "logout"
  • success: "true" oder "false"
  • auth_method: Authentifizierungsmethode, wie "oauth"
  • error_category: Kategorische Fehlerart, wenn die Aktion fehlgeschlagen ist. Die rohe Fehlermeldung ist nie enthalten
  • status_code: HTTP-Statuscode als Zeichenkette, wenn die Aktion mit einem HTTP-Fehler fehlgeschlagen ist

MCP-Server-Verbindungs-Ereignis

Protokolliert, wenn ein MCP-Server verbunden wird, getrennt wird oder keine Verbindung herstellen kann. Ereignisname: claude_code.mcp_server_connection Attribute:
  • Alle Standardattribute
  • event.name: "mcp_server_connection"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • status: "connected", "failed" oder "disconnected"
  • transport_type: Server-Transport, wie "stdio", "sse" oder "http"
  • server_scope: Bereich, in dem der Server konfiguriert ist, wie "user", "project" oder "local"
  • duration_ms: Verbindungsversuch-Dauer in Millisekunden
  • error_code: Fehlercode, wenn die Verbindung fehlgeschlagen ist
  • server_name (wenn OTEL_LOG_TOOL_DETAILS=1): Konfigurierter Server-Name
  • error (wenn OTEL_LOG_TOOL_DETAILS=1): Vollständige Fehlermeldung, wenn die Verbindung fehlgeschlagen ist

Interner Fehler-Ereignis

Protokolliert, wenn Claude Code einen unerwarteten internen Fehler abfängt. Nur der Fehlerklassenname und ein errno-ähnlicher Code werden aufgezeichnet. Die Fehlermeldung und Stack-Trace sind nie enthalten. Dieses Ereignis wird nicht ausgegeben, wenn gegen Bedrock, Vertex oder Foundry ausgeführt wird, oder wenn DISABLE_ERROR_REPORTING gesetzt ist. Ereignisname: claude_code.internal_error Attribute:
  • Alle Standardattribute
  • event.name: "internal_error"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • error_name: Fehlerklassenname, wie "TypeError" oder "SyntaxError"
  • error_code: Node.js errno-Code wie "ENOENT", wenn auf dem Fehler vorhanden

Plugin-Installiert-Ereignis

Protokolliert, wenn ein Plugin die Installation abgeschlossen hat, sowohl vom claude plugin install CLI-Befehl als auch von der interaktiven /plugin UI. Ereignisname: claude_code.plugin_installed Attribute:
  • Alle Standardattribute
  • event.name: "plugin_installed"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • marketplace.is_official: "true", wenn der Marketplace ein offizieller Anthropic-Marketplace ist, "false" andernfalls
  • install.trigger: "cli" oder "ui"
  • plugin.name: Name des installierten Plugins. Für Drittanbieter-Marketplaces ist dies nur enthalten, wenn OTEL_LOG_TOOL_DETAILS=1
  • plugin.version: Plugin-Version, wenn in der Marketplace-Eintrag deklariert. Für Drittanbieter-Marketplaces ist dies nur enthalten, wenn OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: Marketplace, von dem das Plugin installiert wurde. Für Drittanbieter-Marketplaces ist dies nur enthalten, wenn OTEL_LOG_TOOL_DETAILS=1

Plugin-Geladen-Ereignis

Protokolliert einmal pro aktiviertem Plugin beim Sitzungsstart. Verwenden Sie dieses Ereignis, um zu inventarisieren, welche Plugins über Ihre gesamte Flotte hinweg aktiv sind, als Ergänzung zu plugin_installed, das die Installationsaktion selbst aufzeichnet. Ereignisname: claude_code.plugin_loaded Attribute:
  • Alle Standardattribute
  • event.name: "plugin_loaded"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • plugin.name: Name des Plugins. Für Plugins außerhalb des offiziellen Marketplace und des integrierten Bundles ist der Wert "third-party", es sei denn, OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: Marketplace, von dem das Plugin installiert wurde, wenn bekannt. Auf "third-party" unter der gleichen Bedingung wie plugin.name geschwärzt
  • plugin.version: Version aus dem Plugin-Manifest. Nur enthalten, wenn der Name nicht geschwärzt ist und das Manifest eine Version deklariert
  • plugin.scope: Herkunftskategorie für das Plugin: "official", "org", "user-local" oder "default-bundle"
  • enabled_via: Wie das Plugin aktiviert wurde: "default-enable", "org-policy", "seed-mount" oder "user-install"
  • plugin_id_hash: Deterministische Hash des Plugin-Namens und des Marketplace, nur an Ihren konfigurierten Exporter gesendet. Ermöglicht es Ihnen, zu zählen, wie viele unterschiedliche Drittanbieter-Plugins über Ihre gesamte Flotte hinweg geladen sind, ohne ihre Namen aufzuzeichnen
  • has_hooks: Ob das Plugin Hooks beiträgt
  • has_mcp: Ob das Plugin MCP-Server beiträgt
  • skill_path_count: Anzahl der Skill-Verzeichnisse, die das Plugin deklariert
  • command_path_count: Anzahl der Befehlsverzeichnisse, die das Plugin deklariert
  • agent_path_count: Anzahl der Agent-Verzeichnisse, die das Plugin deklariert

Skill-Aktiviert-Ereignis

Protokolliert, wenn ein Skill aufgerufen wird, ob Claude ihn über das Skill-Tool aufruft oder Sie ihn als / Befehl ausführen. Ereignisname: claude_code.skill_activated Attribute:
  • Alle Standardattribute
  • event.name: "skill_activated"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • skill.name: Name des Skills. Für benutzerdefinierte und Drittanbieter-Plugin-Skills ist der Wert der Platzhalter "custom_skill", es sei denn, OTEL_LOG_TOOL_DETAILS=1
  • invocation_trigger: Wie der Skill ausgelöst wurde ("user-slash", "claude-proactive" oder "nested-skill")
  • skill.source: Wo der Skill geladen wurde (zum Beispiel "bundled", "userSettings", "projectSettings", "plugin")
  • plugin.name (wenn OTEL_LOG_TOOL_DETAILS=1 oder das Plugin ist von einem offiziellen Marketplace): Name des besitzenden Plugins, wenn der Skill von einem Plugin bereitgestellt wird
  • marketplace.name (wenn OTEL_LOG_TOOL_DETAILS=1 oder das Plugin ist von einem offiziellen Marketplace): Marketplace des besitzenden Plugins, wenn der Skill von einem Plugin bereitgestellt wird

At-Mention-Ereignis

Protokolliert, wenn Claude Code ein @-Mention in einem Prompt auflöst. Nicht jedes Mention gibt ein Ereignis aus: Early-Exit-Pfade wie Berechtigungsverweigerungen, übergroße Dateien, PDF-Referenz-Anhänge und Fehler beim Auflisten von Verzeichnissen werden zurückgegeben, ohne zu protokollieren. Ereignisname: claude_code.at_mention Attribute:
  • Alle Standardattribute
  • event.name: "at_mention"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • mention_type: Typ des Mentions ("file", "directory", "agent", "mcp_resource")
  • success: Ob das Mention erfolgreich aufgelöst wurde ("true" oder "false")

API-Wiederholungen-Erschöpft-Ereignis

Protokolliert einmal, wenn eine API-Anfrage nach mehr als einem Versuch fehlschlägt. Wird zusammen mit dem letzten api_error Ereignis ausgegeben. Ereignisname: claude_code.api_retries_exhausted Attribute:
  • Alle Standardattribute
  • event.name: "api_retries_exhausted"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • model: Verwendetes Modell
  • error: Letzte Fehlermeldung
  • status_code: HTTP-Statuscode als Zahl. Nicht vorhanden für Nicht-HTTP-Fehler.
  • total_attempts: Gesamtzahl der Versuche
  • total_retry_duration_ms: Gesamte Wanduhr-Zeit über alle Versuche
  • speed: "fast" oder "normal"

Hook-Registriert-Ereignis

Protokolliert einmal pro konfiguriertem Hook beim Sitzungsstart. Verwenden Sie dieses Ereignis, um zu inventarisieren, welche Hooks über Ihre gesamte Flotte hinweg aktiv sind, als Ergänzung zu den Pro-Ausführungs-Ereignissen hook_execution_start und hook_execution_complete. Ereignisname: claude_code.hook_registered Attribute:
  • Alle Standardattribute
  • event.name: "hook_registered"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • hook_event: Hook-Ereignistyp, wie "PreToolUse" oder "PostToolUse"
  • hook_type: Hook-Implementierungstyp: "command", "prompt", "mcp_tool", "http" oder "agent"
  • hook_source: Wo der Hook definiert ist: "userSettings", "projectSettings", "localSettings", "flagSettings", "policySettings" oder "pluginHook"
  • hook_matcher (wenn OTEL_LOG_TOOL_DETAILS=1): Die Matcher-Zeichenkette aus der Hook-Konfiguration, wenn eine gesetzt ist
  • plugin.name (wenn hook_source "pluginHook" ist): Name des beitragenden Plugins. Für Plugins außerhalb des offiziellen Marketplace und des integrierten Bundles ist der Wert "third-party", es sei denn, OTEL_LOG_TOOL_DETAILS=1
  • plugin_id_hash (wenn hook_source "pluginHook" ist): Deterministische Hash des Plugin-Namens und des Marketplace, nur an Ihren konfigurierten Exporter gesendet. Ermöglicht es Ihnen, unterschiedliche beitragende Plugins zu zählen, ohne ihre Namen aufzuzeichnen

Hook-Ausführungs-Start-Ereignis

Protokolliert, wenn ein oder mehrere Hooks für ein Hook-Ereignis beginnen auszuführen. Ereignisname: claude_code.hook_execution_start Attribute:
  • Alle Standardattribute
  • event.name: "hook_execution_start"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • hook_event: Hook-Ereignistyp, wie "PreToolUse" oder "PostToolUse"
  • hook_name: Vollständiger Hook-Name einschließlich Matcher, wie "PreToolUse:Write"
  • num_hooks: Anzahl der übereinstimmenden Hook-Befehle
  • managed_only: "true", wenn nur verwaltete Richtlinien-Hooks zulässig sind
  • hook_source: "policySettings" oder "merged"
  • hook_definitions: JSON-serialisierte Hook-Konfiguration. Nur enthalten, wenn sowohl detailliertes Beta-Tracing als auch OTEL_LOG_TOOL_DETAILS=1 aktiviert sind

Hook-Ausführungs-Abschluss-Ereignis

Protokolliert, wenn alle Hooks für ein Hook-Ereignis abgeschlossen sind. Ereignisname: claude_code.hook_execution_complete Attribute:
  • Alle Standardattribute
  • event.name: "hook_execution_complete"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • hook_event: Hook-Ereignistyp
  • hook_name: Vollständiger Hook-Name einschließlich Matcher
  • num_hooks: Anzahl der übereinstimmenden Hook-Befehle
  • num_success: Anzahl, die erfolgreich abgeschlossen wurde
  • num_blocking: Anzahl, die eine Blockierungsentscheidung zurückgegeben hat
  • num_non_blocking_error: Anzahl, die ohne Blockierung fehlgeschlagen ist
  • num_cancelled: Anzahl, die vor Abschluss abgebrochen wurde
  • total_duration_ms: Wanduhr-Dauer aller übereinstimmenden Hooks
  • managed_only: "true", wenn nur verwaltete Richtlinien-Hooks zulässig sind
  • hook_source: "policySettings" oder "merged"
  • hook_definitions: JSON-serialisierte Hook-Konfiguration. Nur enthalten, wenn sowohl detailliertes Beta-Tracing als auch OTEL_LOG_TOOL_DETAILS=1 aktiviert sind

Kompaktierungs-Ereignis

Protokolliert, wenn die Konversationskompaktierung abgeschlossen ist. Ereignisname: claude_code.compaction Attribute:
  • Alle Standardattribute
  • event.name: "compaction"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • trigger: "auto" oder "manual"
  • success: "true" oder "false"
  • duration_ms: Kompaktierungs-Dauer
  • pre_tokens: Ungefähre Token-Anzahl vor Kompaktierung
  • post_tokens: Ungefähre Token-Anzahl nach Kompaktierung
  • error: Fehlermeldung, wenn Kompaktierung fehlgeschlagen ist

Feedback-Umfrage-Ereignis

Protokolliert, wenn eine Sitzungsqualitäts-Umfrage angezeigt oder beantwortet wird. Siehe Sitzungsqualitäts-Umfragen für das, was die Umfragen erfassen und wie Sie sie steuern. Ereignisname: claude_code.feedback_survey Attribute:
  • Alle Standardattribute
  • event.name: "feedback_survey"
  • event.timestamp: ISO 8601-Zeitstempel
  • event.sequence: monoton steigende Zähler zur Sortierung von Ereignissen innerhalb einer Sitzung
  • event_type: Umfrage-Lebenszyklusereignis, zum Beispiel "appeared", "responded" oder "transcript_prompt_appeared"
  • appearance_id: Eindeutige ID, die die Ereignisse verknüpft, die für eine Umfrage-Instanz ausgegeben werden
  • survey_type: Welche Umfrage das Ereignis erzeugt hat. "session" ist die Aufforderung “Wie macht sich Claude?” Bewertung
  • response: Die Auswahl des Benutzers bei responded Ereignissen
  • enabled_via_override: true, wenn CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL gesetzt ist. Wird als boolescher Wert ausgegeben, nicht als Zeichenkette. Vorhanden bei session Umfrage-Ereignissen. Filtern Sie nach diesem Attribut, um zu bestätigen, dass die Überschreibung über eine Flotte angewendet wird

Interpretation von Metriken- und Ereignisdaten

Die exportierten Metriken und Ereignisse unterstützen eine Reihe von Analysen:

Nutzungsüberwachung

MetrikAnalysemöglichkeit
claude_code.token.usageAufschlüsselung nach type (input/output), Benutzer, Team, Modell, skill.name, plugin.name oder agent.name
claude_code.session.countVerfolgung der Akzeptanz und des Engagements im Laufe der Zeit
claude_code.lines_of_code.countMessung der Produktivität durch Verfolgung von Code-Hinzufügungen/Entfernungen
claude_code.commit.count & claude_code.pull_request.countVerständnis der Auswirkungen auf Entwicklungs-Workflows

Kostenüberwachung

Die Metrik claude_code.cost.usage hilft bei:
  • Verfolgung von Nutzungstrends über Teams oder Einzelpersonen hinweg
  • Identifikation von Sitzungen mit hoher Nutzung zur Optimierung
  • Zuordnung von Ausgaben zu spezifischen Skills, Plugins oder Subagent-Typen über die Attribute skill.name, plugin.name und agent.name
Kostenmetriken sind Näherungswerte. Für offizielle Abrechnungsdaten konsultieren Sie Ihren API-Anbieter (Claude Console, Amazon Bedrock oder Google Cloud Vertex).

Warnungen und Segmentierung

Häufige Warnungen, die Sie in Betracht ziehen sollten:
  • Kostensteigerungen
  • Ungewöhnlicher Token-Verbrauch
  • Hohes Sitzungsvolumen von bestimmten Benutzern
Alle Metriken können nach user.account_uuid, user.account_id, organization.id, session.id, model und app.version segmentiert werden.

Wiederholungserschöpfung erkennen

Claude Code wiederholt fehlgeschlagene API-Anfragen intern und gibt nur nach dem Aufgeben ein einzelnes claude_code.api_error Ereignis aus, daher ist das Ereignis selbst das Endsignal für diese Anfrage. Zwischenzeitliche Wiederholungsversuche werden nicht als separate Ereignisse protokolliert. Das Attribut attempt auf dem Ereignis zeichnet auf, wie viele Versuche insgesamt unternommen wurden. Ein Wert größer als CLAUDE_CODE_MAX_RETRIES (Standard 10) zeigt an, dass die Anfrage alle Wiederholungen bei einem vorübergehenden Fehler erschöpft hat. Ein niedrigerer Wert zeigt einen nicht wiederholbaren Fehler wie eine 400 Antwort an. Um eine Sitzung zu unterscheiden, die sich von einer, die steckengeblieben ist, erholt hat, gruppieren Sie Ereignisse nach session.id und prüfen Sie, ob ein späteres api_request Ereignis nach dem Fehler vorhanden ist.

Ereignisanalyse

Die Ereignisdaten bieten detaillierte Einblicke in Claude Code-Interaktionen: Tool-Nutzungsmuster: Analysieren Sie Tool-Ergebnis-Ereignisse, um zu identifizieren:
  • Am häufigsten verwendete Tools
  • Tool-Erfolgsquoten
  • Durchschnittliche Tool-Ausführungszeiten
  • Fehlermuster nach Tool-Typ
Leistungsüberwachung: Verfolgen Sie API-Anfrage-Dauern und Tool-Ausführungszeiten, um Leistungsengpässe zu identifizieren.

Audit-Sicherheitsereignisse

OpenTelemetry-Ereignisse sind die Audit-Datenquelle für Claude Code-Aktivität. Jedes Ereignis trägt Identitätsattribute, die Tool-Aufrufe, MCP-Aktivität und Berechtigungsentscheidungen an den Benutzer zurückbinden, der sie ausgelöst hat, und der OTLP-Logs-Exporter kann diese Ereignisse an jede Security Information and Event Management (SIEM)-Plattform mit einem OTLP-Receiver oder an einen OpenTelemetry Collector liefern, der an Ihr SIEM weiterleitet.

Attribut-Aktionen an Benutzer

Die Standardattribute auf jedem Ereignis enthalten die Identität des authentifizierten Benutzers: user.email, user.account_uuid, user.account_id und organization.id, wenn mit einem Claude-Konto angemeldet, plus die installationsbegrenzte user.id und die pro-Sitzung session.id. MCP-Tool-Aufrufe, Bash-Befehle und Dateibearbeitungen werden daher dem Entwickler zugeordnet, der die Sitzung gestartet hat. Claude Code handelt nicht unter einem separaten Service-Konto; die Identität, die auf jedem Ereignis aufgezeichnet wird, ist das Claude-Konto des Entwicklers selbst. Wenn Claude Code sich mit einem direkten API-Schlüssel authentifiziert oder gegen Bedrock, Vertex AI oder Microsoft Foundry, gibt es kein Claude-Konto in der Sitzung und nur user.id und session.id werden gefüllt. In diesen Bereitstellungen fügen Sie die Benutzeridentität selbst mit OTEL_RESOURCE_ATTRIBUTES hinzu, die pro Benutzer über die verwaltete Einstellungsdatei oder einen Launch-Wrapper gesetzt wird:
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."

Audit MCP-Aktivität

Um MCP-Server-Aktivität mit vollständiger Call-Detail zu erfassen, aktivieren Sie den Logs-Exporter und setzen Sie OTEL_LOG_TOOL_DETAILS=1. Jede MCP-Operation erzeugt dann strukturierte Ereignisse, die den Server-Namen, Tool-Namen und Call-Argumente zusammen mit den Standard-Identitätsattributen tragen:
EreignisWas es für MCP aufzeichnet
mcp_server_connectionServer-Verbindung, Trennung und Verbindungsfehler mit server_name, transport_type, server_scope und Fehlerdetail
tool_resultJeder MCP-Tool-Aufruf mit tool_name und mcp_server_scope, eine tool_parameters Nutzlast mit mcp_server_name und mcp_tool_name, und eine tool_input Nutzlast mit den Call-Argumenten
tool_decisionOb der Aufruf zulässig oder verweigert wurde, und ob die Entscheidung von Config, einem Hook oder dem Benutzer kam
Ohne OTEL_LOG_TOOL_DETAILS tragen tool_result Ereignisse immer noch tool_name und mcp_server_scope, aber lassen die mcp_server_name/mcp_tool_name Aufschlüsselung und die Argumente weg, und mcp_server_connection Ereignisse lassen server_name und die Fehlermeldung weg.

Sicherheitsfragen zu Ereignissen zuordnen

Beim Erstellen von Erkennungsregeln schlagen Sie das Signal auf, das Sie überwachen möchten, und fragen Sie Ihr Backend nach dem entsprechenden Ereignis und den Attributen ab:
SignalEreignisSchlüsselattribute
Tool-Aufruf zulässig oder verweigert, und von wemtool_decisiondecision, source, tool_name
Berechtigungsmodus-Eskalationpermission_mode_changedfrom_mode, to_mode, trigger
Policy-Hook blockierte eine Aktionhook_execution_completehook_event, num_blocking
Login, Logout und Authentifizierungsfehlerauthaction, success, error_category
MCP-Server-Verbindung oder Fehlermcp_server_connectionstatus, server_name, error_code
Plugin installiert und seine Quelleplugin_installedplugin.name, marketplace.name, marketplace.is_official
Befehle ausgeführt und Dateien berührttool_result mit OTEL_LOG_TOOL_DETAILS=1tool_parameters, tool_input
Claude Code gibt nur den rohen Ereignisstrom aus. Anomalieerkennung, Baselining, Korrelation über Sitzungen hinweg und Warnungen sind die Verantwortung Ihres SIEM oder Observability-Backends.

Ereignisse an ein SIEM senden

Zeigen Sie OTEL_EXPORTER_OTLP_LOGS_ENDPOINT auf den OTLP-Receiver Ihres SIEM oder auf einen OpenTelemetry Collector, der an die native Ingest-API Ihres SIEM weiterleitet. Das folgende verwaltete Einstellungsbeispiel exportiert nur Ereignisse, mit vollständiger Tool-Detail-Aktivierung für MCP- und Bash-Auditing:
{
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_LOG_TOOL_DETAILS": "1",
    "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL": "http/protobuf",
    "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "https://siem.example.com:4318/v1/logs",
    "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer your-siem-token"
  }
}

Backend-Überlegungen

Ihre Wahl des Metriken-, Logs- und Traces-Backends bestimmt die Arten von Analysen, die Sie durchführen können:

Für Metriken

  • Zeitreihendatenbanken (zum Beispiel Prometheus): Ratenberechnungen, aggregierte Metriken
  • Spaltenorientierte Speicher (zum Beispiel ClickHouse): Komplexe Abfragen, eindeutige Benutzeranalyse
  • Vollständige Observability-Plattformen (zum Beispiel Honeycomb, Datadog): Erweiterte Abfragen, Visualisierung, Warnungen

Für Ereignisse/Logs

  • Log-Aggregationssysteme (zum Beispiel Elasticsearch, Loki): Volltextsuche, Log-Analyse
  • Spaltenorientierte Speicher (zum Beispiel ClickHouse): Strukturierte Ereignisanalyse
  • Vollständige Observability-Plattformen (zum Beispiel Honeycomb, Datadog): Korrelation zwischen Metriken und Ereignissen

Für Traces

Wählen Sie ein Backend, das verteilte Trace-Speicherung und Span-Korrelation unterstützt:
  • Verteilte Tracing-Systeme (zum Beispiel Jaeger, Zipkin, Grafana Tempo): Span-Visualisierung, Request-Waterfalls, Latenzanalyse
  • Vollständige Observability-Plattformen (zum Beispiel Honeycomb, Datadog): Trace-Suche und Korrelation mit Metriken und Logs
Für Organisationen, die Daily/Weekly/Monthly Active User (DAU/WAU/MAU) Metriken benötigen, sollten Sie Backends in Betracht ziehen, die effiziente Abfragen eindeutiger Werte unterstützen.

Dienstinformationen

Alle Metriken und Ereignisse werden mit den folgenden Ressourcenattributen exportiert:
  • service.name: claude-code
  • service.version: Aktuelle Claude Code-Version
  • os.type: Betriebssystemtyp (zum Beispiel linux, darwin, windows)
  • os.version: Betriebssystem-Versionsnummer
  • host.arch: Host-Architektur (zum Beispiel amd64, arm64)
  • wsl.version: WSL-Versionsnummer (nur vorhanden, wenn auf Windows Subsystem for Linux ausgeführt)
  • Meter-Name: com.anthropic.claude_code

ROI-Messung-Ressourcen

Für einen umfassenden Leitfaden zur Messung der Kapitalrendite für Claude Code, einschließlich Telemetrie-Setup, Kostenanalyse, Produktivitätsmetriken und automatisierter Berichterstattung, siehe den Claude Code ROI Measurement Guide. Dieses Repository bietet einsatzbereite Docker Compose-Konfigurationen, Prometheus- und OpenTelemetry-Setups sowie Vorlagen zur Generierung von Produktivitätsberichten, die in Tools wie Linear integriert sind.

Sicherheit und Datenschutz

  • OpenTelemetry-Export zu Ihrem Backend ist opt-in und erfordert explizite Konfiguration. Informationen zu Anthropics separater operativer Telemetrie und wie Sie diese deaktivieren, finden Sie unter Datennutzung
  • Rohe Dateiinhalte und Code-Snippets sind nicht in Metriken oder Ereignissen enthalten. Trace-Spans sind ein separater Datenpfad: siehe die Aufzählung OTEL_LOG_TOOL_CONTENT unten
  • Wenn über OAuth authentifiziert, ist user.email in Telemetrie-Attributen enthalten. Wenn dies ein Problem für Ihre Organisation darstellt, arbeiten Sie mit Ihrem Telemetrie-Backend zusammen, um dieses Feld zu filtern oder zu schwärzen
  • Benutzer-Prompt-Inhalte werden standardmäßig nicht erfasst. Nur die Prompt-Länge wird aufgezeichnet. Um Benutzer-Prompt-Inhalte einzubeziehen, setzen Sie OTEL_LOG_USER_PROMPTS=1
  • Tool-Eingabeargumente und Parameter werden standardmäßig nicht protokolliert. Um sie einzubeziehen, setzen Sie OTEL_LOG_TOOL_DETAILS=1. Wenn aktiviert, enthalten tool_result-Ereignisse ein tool_parameters-Attribut mit Bash-Befehlen, MCP-Server- und Tool-Namen sowie Skill-Namen, plus ein tool_input-Attribut mit Dateipfaden, URLs, Suchmustern und anderen Argumenten. user_prompt-Ereignisse enthalten den wörtlichen command_name für benutzerdefinierte, Plugin- und MCP-Befehle. Trace-Spans enthalten das gleiche tool_input-Attribut und eingabebezogene Attribute wie file_path. Einzelne Werte über 512 Zeichen werden gekürzt und die Gesamtmenge ist auf etwa 4 K Zeichen begrenzt, aber die Argumente können immer noch vertrauliche Werte enthalten. Konfigurieren Sie Ihr Telemetrie-Backend, um diese Attribute nach Bedarf zu filtern oder zu schwärzen
  • Tool-Eingabe- und Ausgabeinhalte werden in Trace-Spans standardmäßig nicht protokolliert. Um sie einzubeziehen, setzen Sie OTEL_LOG_TOOL_CONTENT=1. Wenn aktiviert, enthalten Span-Ereignisse vollständige Tool-Eingabe- und Ausgabeinhalte, gekürzt bei 60 KB pro Span. Dies kann rohe Dateiinhalte aus Read-Tool-Ergebnissen und Bash-Befehlsausgabe enthalten. Konfigurieren Sie Ihr Telemetrie-Backend, um diese Attribute nach Bedarf zu filtern oder zu schwärzen
  • Rohe Anthropic Messages API-Anfrage- und Antwort-Texte werden standardmäßig nicht protokolliert. Um sie einzubeziehen, setzen Sie OTEL_LOG_RAW_API_BODIES. Mit =1 gibt jeder API-Aufruf api_request_body und api_response_body Log-Ereignisse aus, deren body-Attribut die JSON-serialisierte Nutzlast ist, gekürzt bei 60 KB. Mit =file:<dir> werden ungekürzte Texte unter diesem Verzeichnis in .request.json und .response.json Dateien geschrieben und die Ereignisse tragen einen body_ref Pfad statt des Inline-Textes. Versenden Sie das Verzeichnis mit einem Log-Collector oder Sidecar statt über den Telemetrie-Stream. In beiden Modi enthalten Texte die gesamte Konversationshistorie (Systemprompt, jeder vorherige Benutzer- und Assistent-Durchgang, Tool-Ergebnisse), daher impliziert das Aktivieren dies Zustimmung zu allem, was die anderen OTEL_LOG_* Content-Flags offenbaren würden. Claudes Extended-Thinking-Inhalte werden unabhängig von anderen Einstellungen immer aus diesen Texten geschwärzt

Überwachung von Claude Code auf Amazon Bedrock

Für detaillierte Anleitung zur Überwachung der Claude Code-Nutzung für Amazon Bedrock siehe Claude Code Monitoring Implementation (Bedrock).