Überwachung
Erfahren Sie, wie Sie OpenTelemetry für Claude Code aktivieren und konfigurieren.
Claude Code unterstützt OpenTelemetry (OTel) Metriken und Ereignisse für Überwachung und Observability.
Alle Metriken sind Zeitreihendaten, die über OpenTelemetrys Standard-Metriken-Protokoll exportiert werden, und Ereignisse werden über OpenTelemetrys Logs/Events-Protokoll exportiert. Es liegt in der Verantwortung des Benutzers sicherzustellen, dass ihre Metriken- und Logs-Backends ordnungsgemäß konfiguriert sind und dass die Aggregationsgranularität ihren Überwachungsanforderungen entspricht.
OpenTelemetry-Unterstützung befindet sich derzeit in der Beta-Phase und Details können sich ändern.
Schnellstart
Konfigurieren Sie OpenTelemetry mit Umgebungsvariablen:
Die Standard-Export-Intervalle sind 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 den Produktionseinsatz zurückzusetzen.
Für vollständige Konfigurationsoptionen siehe die OpenTelemetry-Spezifikation.
Administrator-Konfiguration
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. Siehe die Einstellungspriorität für weitere Informationen darüber, wie Einstellungen angewendet werden.
Die verwaltete Einstellungsdatei befindet sich unter:
- macOS:
/Library/Application Support/ClaudeCode/managed-settings.json
- Linux und WSL:
/etc/claude-code/managed-settings.json
- Windows:
C:\ProgramData\ClaudeCode\managed-settings.json
Beispiel für eine verwaltete Einstellungskonfiguration:
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 nicht von Benutzern überschrieben werden.
Konfigurationsdetails
Allgemeine Konfigurationsvariablen
Umgebungsvariable | Beschreibung | Beispielwerte |
---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY | Aktiviert Telemetrie-Sammlung (erforderlich) | 1 |
OTEL_METRICS_EXPORTER | Metriken-Exporter-Typ(en) (kommagetrennt) | console , otlp , prometheus |
OTEL_LOGS_EXPORTER | Logs/Events-Exporter-Typ(en) (kommagetrennt) | console , otlp |
OTEL_EXPORTER_OTLP_PROTOCOL | Protokoll für OTLP-Exporter (alle Signale) | grpc , http/json , http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP-Collector-Endpunkt (alle Signale) | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL | Protokoll für Metriken (überschreibt allgemein) | grpc , http/json , http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | OTLP-Metriken-Endpunkt (überschreibt allgemein) | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL | Protokoll für Logs (überschreibt allgemein) | grpc , http/json , http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | OTLP-Logs-Endpunkt (überschreibt allgemein) | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS | Authentifizierungs-Header für OTLP | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY | Client-Schlüssel für mTLS-Authentifizierung | Pfad zur Client-Schlüsseldatei |
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE | Client-Zertifikat für mTLS-Authentifizierung | Pfad zur Client-Zertifikatsdatei |
OTEL_METRIC_EXPORT_INTERVAL | Export-Intervall in Millisekunden (Standard: 60000) | 5000 , 60000 |
OTEL_LOGS_EXPORT_INTERVAL | Logs-Export-Intervall in Millisekunden (Standard: 5000) | 1000 , 10000 |
OTEL_LOG_USER_PROMPTS | Aktiviert Protokollierung von Benutzer-Prompt-Inhalten (Standard: deaktiviert) | 1 zum Aktivieren |
Metriken-Kardinalitätskontrolle
Die folgenden Umgebungsvariablen steuern, welche Attribute in Metriken enthalten sind, um die Kardinalität zu verwalten:
Umgebungsvariable | Beschreibung | Standardwert | Beispiel zum Deaktivieren |
---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID | session.id-Attribut in Metriken einschließen | true | false |
OTEL_METRICS_INCLUDE_VERSION | app.version-Attribut in Metriken einschließen | false | true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID | user.account_uuid-Attribut in Metriken einschließen | true | false |
Diese Variablen helfen dabei, die Kardinalität von Metriken zu kontrollieren, was die Speicheranforderungen und Abfrageleistung in Ihrem Metriken-Backend beeinflusst. Niedrigere Kardinalität bedeutet im Allgemeinen bessere Leistung und niedrigere Speicherkosten, aber weniger granulare Daten für die Analyse.
Dynamische Header
Für Unternehmensumgebungen, die dynamische Authentifizierung erfordern, können Sie ein Skript konfigurieren, um Header dynamisch zu generieren:
Einstellungskonfiguration
Fügen Sie zu Ihrer .claude/settings.json
hinzu:
Skript-Anforderungen
Das Skript muss gültiges JSON mit String-Schlüssel-Wert-Paaren ausgeben, die HTTP-Header darstellen:
Wichtige Einschränkungen
Header werden nur beim Start abgerufen, nicht während der Laufzeit. Dies liegt an den Architektur-Einschränkungen des OpenTelemetry-Exporters.
Für Szenarien, die häufige Token-Aktualisierung erfordern, verwenden Sie einen OpenTelemetry Collector als Proxy, der seine eigenen Header aktualisieren kann.
Multi-Team-Organisationsunterstützung
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:
Diese benutzerdefinierten Attribute werden in alle Metriken und Ereignisse eingeschlossen, wodurch Sie folgendes können:
- Metriken nach Team oder Abteilung filtern
- Kosten pro Kostenstelle verfolgen
- Team-spezifische Dashboards erstellen
- Warnungen für bestimmte Teams einrichten
Wichtige Formatierungsanforderungen für OTEL_RESOURCE_ATTRIBUTES:
Die Umgebungsvariable OTEL_RESOURCE_ATTRIBUTES
folgt der W3C Baggage-Spezifikation, die strenge Formatierungsanforderungen hat:
- Keine Leerzeichen erlaubt: Werte können keine Leerzeichen enthalten. Zum Beispiel ist
user.organizationName=My Company
ungültig - Format: Muss kommagetrennte Schlüssel=Wert-Paare sein:
key1=value1,key2=value2
- Erlaubte Zeichen: Nur US-ASCII-Zeichen ausgenommen Steuerzeichen, Leerzeichen, Anführungszeichen, Kommas, Semikolons und Backslashes
- Sonderzeichen: Zeichen außerhalb des erlaubten Bereichs müssen prozent-kodiert werden
Beispiele:
Hinweis: Das Zitieren des gesamten Schlüssel=Wert-Paares (z.B. "key=value with spaces"
) wird von der OpenTelemetry-Spezifikation nicht unterstützt und führt dazu, dass Attribute mit Anführungszeichen vorangestellt werden.
Beispielkonfigurationen
Verfügbare Metriken und Ereignisse
Standard-Attribute
Alle Metriken und Ereignisse teilen diese Standard-Attribute:
Attribut | Beschreibung | Kontrolliert durch |
---|---|---|
session.id | Eindeutige Sitzungskennung | OTEL_METRICS_INCLUDE_SESSION_ID (Standard: true) |
app.version | Aktuelle Claude Code-Version | OTEL_METRICS_INCLUDE_VERSION (Standard: false) |
organization.id | Organisations-UUID (wenn authentifiziert) | Immer enthalten wenn verfügbar |
user.account_uuid | Konto-UUID (wenn authentifiziert) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (Standard: true) |
terminal.type | Terminal-Typ (z.B. iTerm.app , vscode , cursor , tmux ) | Immer enthalten wenn erkannt |
Metriken
Claude Code exportiert die folgenden Metriken:
Metrik-Name | Beschreibung | Einheit |
---|---|---|
claude_code.session.count | Anzahl der gestarteten CLI-Sitzungen | count |
claude_code.lines_of_code.count | Anzahl der geänderten Codezeilen | count |
claude_code.pull_request.count | Anzahl der erstellten Pull Requests | count |
claude_code.commit.count | Anzahl der erstellten Git-Commits | count |
claude_code.cost.usage | Kosten der Claude Code-Sitzung | USD |
claude_code.token.usage | Anzahl der verwendeten Token | tokens |
claude_code.code_edit_tool.decision | Anzahl der Code-Bearbeitungstool-Berechtigungsentscheidungen | count |
claude_code.active_time.total | Gesamte aktive Zeit in Sekunden | s |
Metrik-Details
Sitzungszähler
Wird zu Beginn jeder Sitzung erhöht.
Attribute:
- Alle Standard-Attribute
Codezeilen-Zähler
Wird erhöht, wenn Code hinzugefügt oder entfernt wird.
Attribute:
- Alle Standard-Attribute
type
: ("added"
,"removed"
)
Pull Request-Zähler
Wird erhöht, wenn Pull Requests über Claude Code erstellt werden.
Attribute:
- Alle Standard-Attribute
Commit-Zähler
Wird erhöht, wenn Git-Commits über Claude Code erstellt werden.
Attribute:
- Alle Standard-Attribute
Kostenzähler
Wird nach jeder API-Anfrage erhöht.
Attribute:
- Alle Standard-Attribute
model
: Modell-Identifikator (z.B. “claude-3-5-sonnet-20241022”)
Token-Zähler
Wird nach jeder API-Anfrage erhöht.
Attribute:
- Alle Standard-Attribute
type
: ("input"
,"output"
,"cacheRead"
,"cacheCreation"
)model
: Modell-Identifikator (z.B. “claude-3-5-sonnet-20241022”)
Code-Bearbeitungstool-Entscheidungszähler
Wird erhöht, wenn der Benutzer die Verwendung von Edit-, MultiEdit-, Write- oder NotebookEdit-Tools akzeptiert oder ablehnt.
Attribute:
- Alle Standard-Attribute
tool
: Tool-Name ("Edit"
,"MultiEdit"
,"Write"
,"NotebookEdit"
)decision
: Benutzerentscheidung ("accept"
,"reject"
)language
: Programmiersprache der bearbeiteten Datei (z.B."TypeScript"
,"Python"
,"JavaScript"
,"Markdown"
). Gibt"unknown"
für nicht erkannte Dateierweiterungen zurück.
Aktive Zeit-Zähler
Verfolgt die tatsächlich aktiv mit Claude Code verbrachte Zeit (nicht Leerlaufzeit). Diese Metrik wird während Benutzerinteraktionen wie dem Eingeben von Prompts oder dem Empfangen von Antworten erhöht.
Attribute:
- Alle Standard-Attribute
Ereignisse
Claude Code exportiert die folgenden Ereignisse über OpenTelemetry Logs/Events (wenn OTEL_LOGS_EXPORTER
konfiguriert ist):
Benutzer-Prompt-Ereignis
Wird protokolliert, wenn ein Benutzer einen Prompt einreicht.
Ereignisname: claude_code.user_prompt
Attribute:
- Alle Standard-Attribute
event.name
:"user_prompt"
event.timestamp
: ISO 8601-Zeitstempelprompt_length
: Länge des Promptsprompt
: Prompt-Inhalt (standardmäßig redigiert, aktivieren mitOTEL_LOG_USER_PROMPTS=1
)
Tool-Ergebnis-Ereignis
Wird protokolliert, wenn ein Tool die Ausführung abschließt.
Ereignisname: claude_code.tool_result
Attribute:
- Alle Standard-Attribute
event.name
:"tool_result"
event.timestamp
: ISO 8601-Zeitstempeltool_name
: Name des Toolssuccess
:"true"
oder"false"
duration_ms
: Ausführungszeit in Millisekundenerror
: Fehlermeldung (bei Fehlschlag)decision
: Entweder"accept"
oder"reject"
source
: Entscheidungsquelle -"config"
,"user_permanent"
,"user_temporary"
,"user_abort"
oder"user_reject"
tool_parameters
: JSON-String mit tool-spezifischen Parametern (wenn verfügbar)- Für Bash-Tool: enthält
bash_command
,full_command
,timeout
,description
,sandbox
- Für Bash-Tool: enthält
API-Anfrage-Ereignis
Wird für jede API-Anfrage an Claude protokolliert.
Ereignisname: claude_code.api_request
Attribute:
- Alle Standard-Attribute
event.name
:"api_request"
event.timestamp
: ISO 8601-Zeitstempelmodel
: Verwendetes Modell (z.B. “claude-3-5-sonnet-20241022”)cost_usd
: Geschätzte Kosten in USDduration_ms
: Anfragedauer in Millisekundeninput_tokens
: Anzahl der Eingabe-Tokenoutput_tokens
: Anzahl der Ausgabe-Tokencache_read_tokens
: Anzahl der aus dem Cache gelesenen Tokencache_creation_tokens
: Anzahl der für Cache-Erstellung verwendeten Token
API-Fehler-Ereignis
Wird protokolliert, wenn eine API-Anfrage an Claude fehlschlägt.
Ereignisname: claude_code.api_error
Attribute:
- Alle Standard-Attribute
event.name
:"api_error"
event.timestamp
: ISO 8601-Zeitstempelmodel
: Verwendetes Modell (z.B. “claude-3-5-sonnet-20241022”)error
: Fehlermeldungstatus_code
: HTTP-Statuscode (falls zutreffend)duration_ms
: Anfragedauer in Millisekundenattempt
: Versuchsnummer (für wiederholte Anfragen)
Tool-Entscheidungs-Ereignis
Wird protokolliert, wenn eine Tool-Berechtigungsentscheidung getroffen wird (akzeptieren/ablehnen).
Ereignisname: claude_code.tool_decision
Attribute:
- Alle Standard-Attribute
event.name
:"tool_decision"
event.timestamp
: ISO 8601-Zeitstempeltool_name
: Name des Tools (z.B. “Read”, “Edit”, “MultiEdit”, “Write”, “NotebookEdit”, etc.)decision
: Entweder"accept"
oder"reject"
source
: Entscheidungsquelle -"config"
,"user_permanent"
,"user_temporary"
,"user_abort"
oder"user_reject"
Interpretation von Metriken- und Ereignisdaten
Die von Claude Code exportierten Metriken bieten wertvolle Einblicke in Nutzungsmuster und Produktivität. Hier sind einige häufige Visualisierungen und Analysen, die Sie erstellen können:
Nutzungsüberwachung
Metrik | Analysemöglichkeit |
---|---|
claude_code.token.usage | Aufschlüsselung nach type (input/output), Benutzer, Team oder Modell |
claude_code.session.count | Adoption und Engagement über die Zeit verfolgen |
claude_code.lines_of_code.count | Produktivität messen durch Verfolgung von Code-Hinzufügungen/-Entfernungen |
claude_code.commit.count & claude_code.pull_request.count | Auswirkungen auf Entwicklungsworkflows verstehen |
Kostenüberwachung
Die Metrik claude_code.cost.usage
hilft bei:
- Verfolgung von Nutzungstrends über Teams oder Einzelpersonen
- Identifizierung von Sitzungen mit hoher Nutzung zur Optimierung
Kostenmetriken sind Näherungswerte. Für offizielle Abrechnungsdaten beziehen Sie sich auf Ihren API-Anbieter (Anthropic Console, AWS Bedrock oder Google Cloud Vertex).
Alarmierung und Segmentierung
Häufige Alarme zu berücksichtigen:
- Kostenspitzen
- Ungewöhnlicher Token-Verbrauch
- Hohes Sitzungsvolumen von bestimmten Benutzern
Alle Metriken können nach user.account_uuid
, organization.id
, session.id
, model
und app.version
segmentiert werden.
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-Erfolgsraten
- Durchschnittliche Tool-Ausführungszeiten
- Fehlermuster nach Tool-Typ
Leistungsüberwachung: Verfolgen Sie API-Anfragedauern und Tool-Ausführungszeiten, um Leistungsengpässe zu identifizieren.
Backend-Überlegungen
Ihre Wahl der Metriken- und Logs-Backends bestimmt die Arten von Analysen, die Sie durchführen können:
Für Metriken:
- Zeitreihendatenbanken (z.B. Prometheus): Ratenberechnungen, aggregierte Metriken
- Spaltenorientierte Speicher (z.B. ClickHouse): Komplexe Abfragen, eindeutige Benutzeranalyse
- Vollständige Observability-Plattformen (z.B. Honeycomb, Datadog): Erweiterte Abfragen, Visualisierung, Alarmierung
Für Ereignisse/Logs:
- Log-Aggregationssysteme (z.B. Elasticsearch, Loki): Volltextsuche, Log-Analyse
- Spaltenorientierte Speicher (z.B. ClickHouse): Strukturierte Ereignisanalyse
- Vollständige Observability-Plattformen (z.B. Honeycomb, Datadog): Korrelation zwischen Metriken und Ereignissen
Für Organisationen, die Daily/Weekly/Monthly Active User (DAU/WAU/MAU) Metriken benötigen, sollten Sie Backends in Betracht ziehen, die effiziente eindeutige Wert-Abfragen unterstützen.
Service-Informationen
Alle Metriken und Ereignisse werden mit den folgenden Ressourcen-Attributen exportiert:
service.name
:claude-code
service.version
: Aktuelle Claude Code-Versionos.type
: Betriebssystemtyp (z.B.linux
,darwin
,windows
)os.version
: Betriebssystem-Versionsstringhost.arch
: Host-Architektur (z.B.amd64
,arm64
)wsl.version
: WSL-Versionsnummer (nur vorhanden bei Ausführung auf Windows Subsystem for Linux)- Meter Name:
com.anthropic.claude_code
ROI-Messungsressourcen
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 gebrauchsfertige Docker Compose-Konfigurationen, Prometheus- und OpenTelemetry-Setups sowie Vorlagen für die Generierung von Produktivitätsberichten, die mit Tools wie Linear integriert sind.
Sicherheits-/Datenschutzüberlegungen
- Telemetrie ist opt-in und erfordert explizite Konfiguration
- Sensible Informationen wie API-Schlüssel oder Dateiinhalte werden niemals in Metriken oder Ereignissen enthalten
- Benutzer-Prompt-Inhalte werden standardmäßig redigiert - nur die Prompt-Länge wird aufgezeichnet. Um die Protokollierung von Benutzer-Prompts zu aktivieren, setzen Sie
OTEL_LOG_USER_PROMPTS=1