Monitoreo
Aprende cómo habilitar y configurar OpenTelemetry para Claude Code.
Rastrea el uso de Claude Code, costos y actividad de herramientas en toda tu organización exportando datos de telemetría a través de OpenTelemetry (OTel). Claude Code exporta métricas como datos de series temporales a través del protocolo estándar de métricas, eventos a través del protocolo de registros/eventos, y opcionalmente trazas distribuidas a través del protocolo de trazas.
Inicio rápido
Configura OpenTelemetry usando variables de entorno:
# 1. Habilitar telemetría
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. Elegir exportadores (ambos son opcionales - configura solo lo que necesites)
export OTEL_METRICS_EXPORTER=otlp # Opciones: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # Opciones: otlp, console, none
# 3. Configurar punto final OTLP (para exportador OTLP)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. Establecer autenticación (si es requerida)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. Para depuración: reducir intervalos de exportación, y restablecerlos para uso en producción
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 segundos (predeterminado: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 segundos (predeterminado: 5000ms)
# 6. Ejecutar Claude Code
claude
Para verificar una configuración que exporta métricas, comprueba tu backend para la métrica claude_code.session.count, que Claude Code emite cuando se inicia una sesión. Para verificar una configuración solo de registros, envía un mensaje y comprueba el evento claude_code.user_prompt.
Si nada llega, ejecuta claude --debug y comprueba el registro de depuración. Claude Code reporta fallos de los exportadores que configures como errores [3P telemetry], donde 3P significa terceros. Las líneas con prefijo [Anthropic telemetry] describen la telemetría operativa separada de Anthropic y no indican un problema con tu configuración.
Para opciones de configuración completas, consulta la especificación de OpenTelemetry.
Configuración del administrador
Los administradores pueden configurar los ajustes de OpenTelemetry para todos los usuarios a través del archivo de configuración administrada. Consulta la precedencia de configuración para obtener más información sobre cómo se aplican los ajustes.
Ejemplo de configuración de ajustes administrados:
{
"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"
}
}
Claude Code ignora las variables del exportador de OpenTelemetry en el .claude/settings.json y .claude/settings.local.json de un repositorio, por lo que un repositorio no puede usarlas para activar la telemetría, elegir dónde va, o capturar contenido. Establécelas en los ajustes administrados, o haz que cada desarrollador las establezca en su shell o ~/.claude/settings.json. Un repositorio aún puede desactivar una señal estableciendo su selector de exportador, como OTEL_LOGS_EXPORTER, en none, a menos que los ajustes administrados, un archivo --settings, o el entorno desde el que inicias Claude Code establezca esa variable.
Claude Code no pasa variables de entorno OTEL_* a los subprocesos que genera, incluyendo la herramienta Bash, hooks, servidores MCP, y servidores de lenguaje. Una aplicación instrumentada con OpenTelemetry que ejecutes a través de la herramienta Bash no hereda el punto final del exportador de Claude Code ni los encabezados, así que establece esas variables directamente en el comando si esa aplicación necesita exportar su propia telemetría.
Cómo los ajustes administrados bloquean el destino OTLP
Cuando estableces una variable OTEL_EXPORTER_OTLP_* en los ajustes administrados, Claude Code elimina las variables conflictivas establecidas por el desarrollador al inicio y registra una advertencia que puedes ver con claude --debug. Lo que elimina depende de qué variable establezca:
-
Puntos finales: cuando estableces
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code elimina todos los puntos finales por señal establecidos por el desarrollador. Los desarrolladores no pueden apuntar una señal a un recopilador diferente, así que no necesitas establecer también las variables de punto final por señal en los ajustes administrados. -
Protocolos: cuando estableces
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code elimina todos los protocolos por señal establecidos por el desarrollador. -
Credenciales: cuando estableces
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEY, uOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code elimina las versiones por señal establecidas por el desarrollador de esa variable, más todas las variables de punto final establecidas por el desarrollador, genéricas o por señal, ya que esas credenciales de otro modo llegarían a un recopilador que los ajustes administrados no eligieron. -
Selectores de exportador:
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTER, y elOTEL_TRACES_EXPORTERbeta siguen la precedencia normal por clave. Un ajuste del desarrollador aún puede desactivar una señal o cambiarla al exportador de consola, así que establece también los selectores en los ajustes administrados si necesitas que estén bloqueados. En fuentes de administrador,OTEL_LOGS_EXPORTERsigue la unidad de telemetría mientras que los otros dos selectores se fusionan por clave. Requiere Claude Code v2.1.223 o posterior. -
Puntos finales de rastreo beta: con rastreo beta detallado activo, Claude Code exporta registros y rastreos a
BETA_TRACING_ENDPOINTen lugar de a través de los exportadores de registros y rastreos. Claude Code por lo tanto elimina unBETA_TRACING_ENDPOINTestablecido por el desarrollador siempre que cualquiera de estos ajustes administrados decida el destino de cualquiera de las señales:- Un punto final genérico o de registros/rastreos o credencial
- Un
otelHeadersHelper - Un selector de exportador de registros o rastreos establecido en
none,console, o vacío, valores que mantienen la señal fuera de un recopilador CLAUDE_CODE_ENABLE_TELEMETRYdesactivado
Un punto final o credencial solo de métricas no lo elimina. Antes de v2.1.251, un
BETA_TRACING_ENDPOINTestablecido por el desarrollador redirigía los registros y rastreos que el rastreo beta detallado exporta incluso cuando los ajustes administrados fijaban el recopilador.
Claude Code no elimina variables por señal que estableces en los ajustes administrados en sí, así que puedes enrutar una señal a un recopilador diferente estableciendo su variable allí, como hace el ejemplo SIEM. Si estableces una credencial por señal allí, Claude Code elimina el punto final establecido por el desarrollador para esa señal.
Este comportamiento de eliminación cambia dónde se entrega la telemetría, no lo que Claude Code recopila.
Antes de v2.1.217, cada variable seguía la precedencia de ajustes por clave de forma independiente, así que un punto final específico de señal establecido en los ajustes del usuario o el shell redirigía esa señal lejos del recopilador administrado.
Cuando la aplicación de escritorio o un ejecutor de entorno autohospedado inicia Claude Code y nombra un punto final OTLP en el entorno que proporciona, Claude Code fija el destino de la misma manera: las variables de telemetría del iniciador eliminan variables establecidas por el desarrollador exactamente como lo hacen los ajustes administrados. Claude Code no elimina variables que el iniciador en sí estableció. Requiere Claude Code v2.1.251 o posterior.
Detalles de configuración
Variables de configuración comunes
Estas variables configuran exportadores, puntos finales y comportamiento de exportación para todas las implementaciones.
Si estableces una variable de punto final o protocolo por señal, como OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code la utiliza en lugar de la variable genérica para esa señal. Si estableces una variable de encabezados por señal, como OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code la fusiona con la genérica OTEL_EXPORTER_OTLP_HEADERS para esa señal.
En máquinas con configuración administrada, consulta Cómo la configuración administrada bloquea el destino OTLP para ver qué elimina Claude Code.
| Variable de Entorno | Descripción | Valores de Ejemplo |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
Habilita la recopilación de telemetría (requerido) | 1 |
OTEL_METRICS_EXPORTER |
Tipos de exportador de métricas, separados por comas. Usa none para deshabilitar |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
Tipos de exportador de registros/eventos, separados por comas. Usa none para deshabilitar |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protocolo para exportador OTLP, se aplica a todas las señales. Claude Code no tiene protocolo predeterminado, así que establece esto o la variable de protocolo específica de la señal para cada exportador otlp que habilites |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
Punto final del recopilador OTLP para todas las señales | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
Protocolo para métricas, anula la configuración general | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
Punto final de métricas OTLP, anula la configuración general | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
Protocolo para registros, anula la configuración general | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Punto final de registros OTLP, anula la configuración general | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS |
Encabezados de autenticación para OTLP | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_HEADERS |
Encabezados de autenticación para métricas, fusionados con los encabezados generales | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_LOGS_HEADERS |
Encabezados de autenticación para registros, fusionados con los encabezados generales | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
Intervalo de exportación en milisegundos (predeterminado: 60000) | 5000, 60000 |
OTEL_LOGS_EXPORT_INTERVAL |
Intervalo de exportación de registros en milisegundos (predeterminado: 5000) | 1000, 10000 |
OTEL_LOG_USER_PROMPTS |
Habilitar registro del contenido del mensaje del usuario (predeterminado: deshabilitado) | 1 para habilitar |
OTEL_LOG_ASSISTANT_RESPONSES |
Habilitar registro del texto de respuesta del asistente en eventos assistant_response (predeterminado: deshabilitado). Cuando no está establecido, recurre al valor de OTEL_LOG_USER_PROMPTS. Requiere Claude Code v2.1.193 o posterior |
1 para habilitar, 0 para mantener redactado |
OTEL_LOG_TOOL_DETAILS |
Habilitar registro de parámetros de herramientas e argumentos de entrada en eventos de herramientas y atributos de span de traza: comandos Bash, nombres de servidor MCP y herramienta, nombres de habilidades, nombres de flujo de trabajo creados por el usuario, e entrada de herramienta. También habilita nombres de comandos personalizados, de plugin y MCP en eventos user_prompt (predeterminado: deshabilitado). Para los servidores integrados de Claude Desktop, en sesiones que Claude Desktop posee, mcp_server_name/mcp_tool_name se emiten en tool_decision/tool_result incluso con la bandera desactivada. La excepción requiere Claude Code v2.1.214 o posterior |
1 para habilitar |
OTEL_LOG_TOOL_CONTENT |
Habilitar registro de contenido de herramientas en el evento de span tool.output (predeterminado: deshabilitado). Los atributos de span llevan contenido de herramientas bajo sus propias puertas. Requiere trazas. El contenido se trunca en el límite de contenido (60 KB por defecto) |
1 para habilitar |
OTEL_LOG_MANAGED_SETTINGS |
Agregar la configuración administrada redactada, y un resumen SHA-256 de la configuración antes de la redacción, a eventos managed settings resolved (predeterminado: deshabilitado). Un valor en configuración de proyecto o local no lo activa. Requiere Claude Code v2.1.274 o posterior | 1 para habilitar |
OTEL_LOG_RAW_API_BODIES |
Emitir el cuerpo completo de solicitud y respuesta JSON de la API de Mensajes de Anthropic como eventos de registro api_request_body / api_response_body (predeterminado: deshabilitado). Los cuerpos incluyen el historial de conversación completo. Habilitar esto implica consentimiento a todo lo que OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS, y OTEL_LOG_TOOL_CONTENT revelarían |
1 para cuerpos en línea truncados en el límite de contenido (60 KB por defecto), o file:<dir> para cuerpos sin truncar en disco con un puntero body_ref en el evento |
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH |
Límite de contenido: la longitud máxima de atributos que contienen contenido como respuestas de modelo, contenido de herramientas, mensajes del sistema, y cuerpos de API sin procesar, incluido el marcador de truncamiento, en unidades de código UTF-16 (predeterminado: 61440, es decir, 60 KB). El predeterminado está dimensionado para backends que limitan valores de atributos a 64 KB; auméntalo solo si tu backend acepta valores más grandes, o redúcelo para cortar el volumen de telemetría. Cuando un límite de atributo del SDK de OpenTelemetry, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT o uno de sus variantes de logrecord y span, se establece más bajo, Claude Code trunca en ese valor más pequeño para que el marcador [TRUNCATED ...] permanezca dentro del límite del SDK. Requiere Claude Code v2.1.214 o posterior |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
Preferencia de temporalidad de métricas (predeterminado: delta). Establece en cumulative si tu backend espera temporalidad acumulativa |
delta, cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
Intervalo para actualizar encabezados dinámicos (predeterminado: 1740000ms / 29 minutos) | 900000 |
Para los protocolos http/protobuf e http/json, Claude Code envía cada solicitud de exportación con un encabezado Content-Length. Antes de v2.1.212, las versiones de Claude Code desde v2.1.191 en adelante enviaban estas solicitudes con codificación de transferencia fragmentada; Azure Monitor y otros puntos finales que requieren una longitud declarada las rechazaban con errores 411 Length Required o 400.
Autenticación mTLS
Cómo configures certificados de cliente para el exportador OTLP depende del protocolo OTLP en uso para esa señal, establecido a través de OTEL_EXPORTER_OTLP_PROTOCOL o la anulación por señal. La misma configuración se aplica a métricas, registros y trazas.
| Protocolo | Variables de certificado de cliente | Confiar en la CA del recopilador con |
|---|---|---|
http/protobuf, http/json |
CLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY, y opcionalmente CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. Consulta Configuración de red |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY y OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, o las variantes por señal como OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY para usar un certificado diferente por señal |
OTEL_EXPORTER_OTLP_CERTIFICATE |
Para grpc, el SDK de OpenTelemetry lee las variables OTLP estándar directamente, por lo que las configuraciones existentes que establecen las variables de métricas por señal continúan funcionando. En máquinas con configuración administrada, Claude Code puede eliminar credenciales y puntos finales por señal establecidos por desarrolladores al inicio.
Control de cardinalidad de métricas
Las siguientes variables de entorno controlan qué atributos se incluyen en las métricas para gestionar la cardinalidad:
| Variable de Entorno | Descripción | Valor Predeterminado | Ejemplo para Deshabilitar |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
Incluir atributo session.id en métricas | true |
false |
OTEL_METRICS_INCLUDE_VERSION |
Incluir atributo app.version en métricas | false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
Incluir atributos user.account_uuid y user.account_id en métricas | true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
Incluir atributo app.entrypoint en métricas | false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
Incluir claves de OTEL_RESOURCE_ATTRIBUTES como atributos en puntos de datos de métricas |
true |
false |
OTEL_METRICS_INCLUDE_REPOSITORY |
Incluir atributos de identidad de repositorio vcs.* en métricas y eventos. Requiere Claude Code v2.1.269 o posterior |
false |
true |
Una cardinalidad más baja generalmente significa mejor rendimiento y costos de almacenamiento más bajos, pero datos menos granulares para el análisis.
Trazas (beta)
Las trazas distribuidas exportan spans que vinculan cada mensaje del usuario a las solicitudes de API y ejecuciones de herramientas que desencadena, para que puedas ver una solicitud completa como una única traza en tu backend de trazas.
Las trazas están deshabilitadas por defecto. Para habilitarlas, establece tanto CLAUDE_CODE_ENABLE_TELEMETRY=1 como CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, luego establece OTEL_TRACES_EXPORTER para elegir dónde se envían los spans. Las trazas reutilizan la configuración OTLP común para punto final, protocolo, encabezados, y mTLS. En máquinas con configuración administrada, Claude Code puede eliminar credenciales y puntos finales por señal establecidos por desarrolladores al inicio.
| Variable de Entorno | Descripción | Valores de Ejemplo |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
Habilitar trazas de span (requerido). ENABLE_ENHANCED_TELEMETRY_BETA también se acepta |
1 |
OTEL_TRACES_EXPORTER |
Tipos de exportador de trazas, separados por comas. Usa none para deshabilitar |
console, otlp, none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
Protocolo para trazas, anula OTEL_EXPORTER_OTLP_PROTOCOL |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Punto final de trazas OTLP, anula OTEL_EXPORTER_OTLP_ENDPOINT |
http://localhost:4318/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
Encabezados de autenticación para trazas, fusionados con OTEL_EXPORTER_OTLP_HEADERS |
Authorization=Bearer token |
OTEL_TRACES_EXPORT_INTERVAL |
Intervalo de exportación de lote de span en milisegundos (predeterminado: 5000) | 1000, 10000 |
Los spans redactan el texto del mensaje del usuario, los detalles de entrada de herramientas y el contenido de herramientas por defecto. Establece OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1, y OTEL_LOG_TOOL_CONTENT=1 para incluirlos.
Cuando el trazado está activo, los subprocesos de Bash y PowerShell heredan automáticamente una variable de entorno TRACEPARENT que contiene el contexto de traza W3C del span de ejecución de herramienta activo. Esto permite que cualquier subproceso que lea TRACEPARENT padre sus propios spans bajo la misma traza, habilitando trazado distribuido de extremo a extremo a través de scripts y comandos que Claude ejecuta.
Cuando el trazado está activo y Claude Code está conectado directamente a la API de Anthropic, cada solicitud de modelo lleva un encabezado W3C traceparent establecido en el contexto del span claude_code.llm_request, y el encabezado traceresponse de la API se registra como un enlace de span. Juntos, estos conectan los spans del lado del cliente de Claude Code a la traza del lado del servidor a través de cualquier intermediario compatible. Las solicitudes HTTP MCP salientes llevan traceparent de la misma manera. El encabezado no se envía a proveedores de terceros.
Por defecto, el encabezado traceparent en solicitudes de modelo y HTTP MCP se envía solo cuando ANTHROPIC_BASE_URL no está establecido o apunta a la API de Anthropic, ya que algunos proxies rechazan encabezados no reconocidos. La variable TRACEPARENT del subproceso se controla por el mismo interruptor por consistencia. Si ejecutas Claude Code a través de un proxy ANTHROPIC_BASE_URL personalizado y deseas que se propague el contexto de traza, establece CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
En sesiones del SDK de Agent y no interactivas iniciadas con -p, Claude Code también lee TRACEPARENT y TRACESTATE de su propio entorno cuando inicia cada span de interacción. Esto permite que un proceso de incrustación pase su contexto de traza W3C activo al subproceso para que los spans de Claude Code aparezcan como hijos de la traza distribuida del llamador. Las sesiones interactivas ignoran TRACEPARENT entrante para evitar heredar accidentalmente valores ambientes de entornos de CI o contenedor.
El contexto de traza entrante también se aplica a eventos. En sesiones del SDK de Agent y -p con TRACEPARENT establecido, cada registro de evento de registro OTLP lleva valores trace_id y span_id que lo unen a la traza de tu aplicación, incluso cuando el exportador de trazas no está configurado, para que tu backend de registro pueda correlacionar eventos con el resto de la traza.
Un registro emitido mientras una interacción está activa lleva los IDs del span de interacción, incluso cuando Claude Code lo emite fuera del contexto asincrónico del span, como en una devolución de llamada de solicitud de permiso o para un registro almacenado en búfer durante el inicio y exportado más tarde. Un registro emitido sin span de interacción activo lleva los IDs de TRACEPARENT entrante directamente. Antes de v2.1.214, los registros emitidos fuera del contexto asincrónico del span llevaban los IDs de TRACEPARENT entrante en lugar de los IDs del span. Antes de v2.1.212, los registros de eventos emitidos fuera de un span activo no llevaban trace_id o span_id.
Jerarquía de spans
Cada mensaje del usuario inicia un span raíz claude_code.interaction. Las llamadas de API, llamadas de herramientas y ejecuciones de hooks se registran como sus hijos. Los spans de herramientas tienen dos spans hijos propios: uno para el tiempo dedicado a esperar una decisión de permiso y otro para la ejecución en sí. Cuando la herramienta Agent o la herramienta Task heredada genera un subagente, los spans de API y herramienta del subagente se anidan bajo el span claude_code.tool del padre.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (requiere trazado beta detallado)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (herramienta Agent) spans de claude_code.llm_request / claude_code.tool del subagente
En sesiones del SDK de Agent y claude -p, claude_code.interaction en sí se convierte en un hijo del span del llamador cuando TRACEPARENT se establece en el entorno.
Cuando un hook PreToolUse difiere una llamada de herramienta, Claude Code guarda el contexto de traza del turno que lo difirió. Cuando reanudas la sesión y la herramienta se ejecuta nuevamente, los spans de la herramienta se unen a la traza de ese turno anterior como hijos del span claude_code.interaction del turno.
Atributos de spans
Cada span lleva los atributos estándar más un atributo span.type que coincide con su nombre. Las tablas a continuación enumeran los atributos adicionales establecidos en cada span. Los spans llm_request, tool.execution, y hook establecen el estado de OpenTelemetry ERROR cuando registran una falla; los otros spans siempre terminan con estado UNSET.
claude_code.interaction
| Atributo | Descripción | Controlado Por |
|---|---|---|
user_prompt |
Texto del mensaje. El valor es <REDACTED> a menos que la puerta esté establecida |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
Longitud del mensaje en caracteres | |
interaction.sequence |
Contador basado en 1 de interacciones, contado por proceso de Claude Code en lugar de por sesión, como se describe para event.sequence |
|
parent.source |
Cómo el span obtuvo su padre de traza: env cuando se emparentó bajo un TRACEPARENT entrante, none cuando inició su propia traza. Requiere Claude Code v2.1.268 o posterior |
|
interaction.duration_ms |
Duración de pared del turno |
claude_code.llm_request
| Atributo | Descripción | Controlado Por |
|---|---|---|
model |
Identificador de modelo | |
gen_ai.system |
Siempre anthropic. Convención semántica de GenAI de OpenTelemetry |
|
gen_ai.request.model |
Mismo valor que model. Convención semántica de GenAI de OpenTelemetry |
|
query_source |
Subsistema que emitió la solicitud, como repl_main_thread o un nombre de subagente |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
Forma acotada de query_source, emitida independientemente de si el trazado beta detallado está activo, con valores como repl_main_thread o agent.builtin.general-purpose. : se convierte en . y los agentes nombrados por el usuario aparecen como agent.custom. Requiere Claude Code v2.1.268 o posterior |
|
agent_id |
Identificador del subagente o compañero que emitió la solicitud. Ausente en la sesión principal | |
parent_agent_id |
Identificador del agente que generó este. Ausente para la sesión principal y para agentes generados directamente desde ella | |
workflow.run_id |
Identificador de ejecución de la ejecución de la herramienta Workflow, prefijado con wf_. Ausente para agentes no generados por un workflow |
|
workflow.name |
Nombre del workflow que generó este agente. Los nombres creados por el usuario se reemplazan con custom a menos que la puerta esté establecida |
OTEL_LOG_TOOL_DETAILS |
speed |
fast o normal |
|
effort |
Nivel de esfuerzo aplicado a la solicitud: low, medium, high, xhigh, o max. Ausente cuando Claude Code no envía nivel de esfuerzo, por ejemplo en un modelo que no lo soporta. Requiere Claude Code v2.1.274 o posterior |
|
llm_request.context |
interaction, tool, o standalone dependiendo del span padre |
|
duration_ms |
Duración de pared incluyendo reintentos | |
ttft_ms |
Tiempo al primer token en milisegundos | |
first_content_ms |
Tiempo desde el inicio de la solicitud hasta el primer bloque de contenido del intento exitoso, en milisegundos. Ausente en solicitudes que retrocedieron a la ruta sin transmisión. Requiere Claude Code v2.1.268 o posterior | |
input_tokens |
Recuento de tokens de entrada del bloque de uso de API | |
output_tokens |
Recuento de tokens de salida | |
cache_read_tokens |
Tokens leídos del caché de mensaje | |
cache_creation_tokens |
Tokens escritos en el caché de mensaje | |
request_id |
ID de solicitud de API de Anthropic del encabezado de respuesta request-id |
|
gen_ai.response.id |
Mismo valor que request_id. Convención semántica de GenAI de OpenTelemetry |
|
client_request_id |
x-client-request-id generado por cliente del intento final |
|
attempt |
Intentos totales realizados para esta solicitud | |
success |
true o false |
|
status_code |
Código de estado HTTP cuando la solicitud falló | |
error |
Mensaje de error cuando la solicitud falló | |
error_class |
Token de clase de error corto cuando la solicitud falló, como api_timeout o server_overload. Requiere Claude Code v2.1.268 o posterior |
|
response.has_tool_call |
true cuando la respuesta contenía bloques de uso de herramientas |
|
stop_reason |
Respuesta de API stop_reason, como end_turn, tool_use, max_tokens, stop_sequence, pause_turn, o refusal |
|
gen_ai.response.finish_reasons |
Mismo valor que stop_reason, envuelto en una matriz de cadena. Convención semántica de GenAI de OpenTelemetry |
Cada intento de reintento también se registra como un evento de span gen_ai.request.attempt con atributos attempt e client_request_id.
claude_code.tool
| Atributo | Descripción | Controlado Por |
|---|---|---|
tool_name |
Nombre de la herramienta | |
tool_name_safe |
Forma de tool_name que no lleva nombres elegidos por el usuario. Los nombres de herramientas integradas pasan verbatim. Los nombres de herramientas MCP aparecen como mcp_other, excepto los nombres de herramientas que coinciden con algunas formas fijas, como herramientas playwright nombradas browser_*, que pasan verbatim. Requiere Claude Code v2.1.268 o posterior |
|
bash_command_class |
Para la herramienta Bash: categoría del primer programa del comando de una lista fija, como vcs o package_manager. other para un programa fuera de la lista, unparsed cuando la línea no se puede analizar. Requiere Claude Code v2.1.268 o posterior |
|
bash_argv0 |
Para la herramienta Bash: el primer programa del comando cuando está en la misma lista fija, como git o npm. other para cualquier programa fuera de la lista. Requiere Claude Code v2.1.268 o posterior |
|
duration_ms |
Duración de pared incluyendo espera de permiso y ejecución | |
result_tokens |
Tamaño aproximado de token del resultado de la herramienta | |
agent_id |
Identificador del subagente o compañero que ejecutó la herramienta. Ausente en la sesión principal | |
parent_agent_id |
Identificador del agente que generó este. Ausente para la sesión principal y para agentes generados directamente desde ella | |
workflow.run_id |
Identificador de ejecución de la ejecución de la herramienta Workflow que generó este agente, prefijado con wf_. Ausente para agentes no generados por un workflow |
|
workflow.name |
Nombre del workflow que generó este agente. Los nombres creados por el usuario se reemplazan con custom a menos que la puerta esté establecida |
OTEL_LOG_TOOL_DETAILS |
tool_use_id |
El ID del bloque tool_use del modelo para esta llamada. Coincide con el tool_use_id en los eventos tool_result y tool_decision y en cargas útiles de hooks, para que puedas unir el span a esos registros |
|
gen_ai.tool.call.id |
Mismo valor que tool_use_id. Convención semántica de GenAI de OpenTelemetry |
|
file_path |
Ruta de archivo de destino para herramientas Read, Edit, y Write | OTEL_LOG_TOOL_DETAILS |
full_command |
Cadena de comando para la herramienta Bash | OTEL_LOG_TOOL_DETAILS |
skill_name |
Nombre de habilidad para la herramienta Skill | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Tipo de subagente para la herramienta Agent o herramienta Task heredada | OTEL_LOG_TOOL_DETAILS |
tool.output span event on claude_code.tool
Si estableces OTEL_LOG_TOOL_CONTENT=1, las llamadas Read y Bash pueden registrar un evento de span tool.output en el span claude_code.tool. Las llamadas Edit y Write registran uno solo cuando también estableces OTEL_LOG_TOOL_DETAILS=1. Esa variable no está limitada a esas dos herramientas, así que verifica su fila en la tabla de configuración para los argumentos que agrega en otros lugares.
Claude Code escribe este evento desde el retorno exitoso de una llamada de herramienta, por lo que una llamada que genera un error no registra nada, sea cual sea la herramienta. Entre las llamadas que sí retornan, no registra un evento tool.output para:
- Una llamada a cualquier herramienta que no sea Read, Edit, Write, y Bash, incluyendo herramientas MCP y WebFetch
- Un Read que retorna algo que no sea texto de archivo, como una imagen, un PDF, o una relectura de un archivo cuyo contenido no ha cambiado
- Una llamada Edit o Write, a menos que también establezca
OTEL_LOG_TOOL_DETAILS=1
El evento lleva estos atributos, cada uno truncado en el límite de contenido (60 KB por defecto). Controlado Por nombra la variable que un atributo necesita además de OTEL_LOG_TOOL_CONTENT=1, y para Edit y Write esa variable controla el evento en sí en lugar del atributo.
| Atributo | Descripción | Controlado Por |
|---|---|---|
content |
Texto que la herramienta Read retornó, o el texto que una llamada Write fue solicitada a escribir | OTEL_LOG_TOOL_DETAILS para la herramienta Write |
output |
Salida combinada de un comando Bash, con stderr intercalado en stdout | |
diff |
Parche estructurado que la herramienta Edit aplicó | OTEL_LOG_TOOL_DETAILS |
file_path |
Ruta de archivo de destino para las herramientas Read, Edit, y Write, repitiendo el atributo de span del mismo nombre | OTEL_LOG_TOOL_DETAILS |
bash_command |
Cadena de comando para la herramienta Bash | OTEL_LOG_TOOL_DETAILS |
El atributo tool_name del span padre te dice de qué herramienta vino un evento. Un atributo cortado en el límite de contenido va acompañado de <attribute>_truncated y <attribute>_original_length.
claude_code.tool.blocked_on_user
| Atributo | Descripción | Controlado Por |
|---|---|---|
duration_ms |
Tiempo dedicado a esperar la decisión de permiso | |
decision |
accept o reject |
|
source |
Fuente de decisión, coincidiendo con el evento Tool decision event |
claude_code.tool.execution
| Atributo | Descripción | Controlado Por |
|---|---|---|
duration_ms |
Tiempo dedicado a ejecutar el cuerpo de la herramienta | |
tool_use_id |
Mismo valor que en el span padre claude_code.tool |
|
gen_ai.tool.call.id |
Mismo valor que tool_use_id. Convención semántica de GenAI de OpenTelemetry |
|
success |
true o false |
|
error |
Cadena de categoría de error cuando la ejecución falló, como Error:ENOENT o ShellError. Contiene el mensaje de error completo en su lugar cuando la puerta está establecida |
OTEL_LOG_TOOL_DETAILS |
error_class |
La categoría de error en forma de identificador, con caracteres fuera de letras, dígitos y guiones bajos reemplazados por _, como Error_ENOENT o ShellError. Lleva la categoría incluso cuando error lleva el mensaje completo. Requiere Claude Code v2.1.268 o posterior |
claude_code.hook
Este span aparece solo cuando el trazado beta detallado está activo, lo que requiere ENABLE_BETA_TRACING_DETAILED=1 y BETA_TRACING_ENDPOINT, un par que también cambia dónde van tus registros y trazas. Establece el par en tu shell, configuración de usuario, o configuración administrada; ambas variables se ignoran en configuración de proyecto y local. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA solo no lo produce.
En sesiones de CLI interactivas, el trazado beta detallado también requiere que tu organización esté en la lista de permitidos para la característica. Las sesiones del SDK de Agent y no interactivas -p no requieren lista de permitidos.
| Atributo | Descripción | Controlado Por |
|---|---|---|
hook_event |
Tipo de evento de hook, como PreToolUse |
|
hook_name |
Nombre completo del hook, como PreToolUse:Write |
|
num_hooks |
Número de comandos de hook coincidentes ejecutados | |
hook_definitions |
Configuración de hook serializada en JSON | OTEL_LOG_TOOL_DETAILS |
duration_ms |
Duración de pared de todos los hooks coincidentes | |
num_success |
Recuento de hooks que se completaron exitosamente | |
num_blocking |
Recuento de hooks que devolvieron una decisión de bloqueo | |
num_non_blocking_error |
Recuento de hooks que fallaron sin bloquear | |
num_cancelled |
Recuento de hooks cancelados antes de completarse |
Atributos adicionales que contienen contenido como new_context, system_prompt_preview, user_system_prompt, tool_input, y response.model_output se emiten solo cuando el trazado beta detallado está activo. No son parte del esquema de span estable.
La puerta en new_context depende de qué span lo lleva, y cada copia se trunca en el límite de contenido (60 KB por defecto). En el span claude_code.tool lleva el resultado de esa llamada de herramienta, sea cual sea la herramienta, y requiere OTEL_LOG_TOOL_CONTENT=1. En el span claude_code.interaction lleva el mensaje del usuario, y en el span claude_code.llm_request los nuevos mensajes del usuario y resultados de herramientas de esa solicitud. Ambos requieren OTEL_LOG_USER_PROMPTS=1.
user_system_prompt además requiere OTEL_LOG_USER_PROMPTS=1. Lleva solo el texto del mensaje del sistema que proporcionas a través de la opción systemPrompt del SDK o las banderas --system-prompt y --append-system-prompt, truncado en el límite de contenido (60 KB por defecto), y se emite una vez por sesión en lugar de por solicitud.
Encabezados dinámicos
Para entornos empresariales que requieren autenticación dinámica, puedes configurar un script para generar encabezados dinámicamente. Los encabezados dinámicos se aplican solo a los protocolos http/protobuf e http/json. Con el protocolo grpc, Claude Code usa solo las variables de encabezados estáticos, OTEL_EXPORTER_OTLP_HEADERS y sus variantes por señal.
Configuración de ajustes
Agrega a tu .claude/settings.json, reemplazando la ruta con la tuya propia:
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
El valor puede ser la ruta a un archivo ejecutable, incluyendo una ruta que contiene espacios, o una línea de comando de shell con argumentos. En Windows, el valor siempre se ejecuta a través del shell, así que entrecomilla una ruta que contiene espacios dentro del valor JSON.
Requisitos del script
El script debe generar JSON válido con pares clave-valor de cadena que representen encabezados HTTP:
#!/bin/bash
# Ejemplo: Múltiples encabezados
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
Si el auxiliar falla o imprime salida que no cumple con estos requisitos, las exportaciones fallan y tu backend de telemetría no recibe nada de la sesión hasta que el auxiliar funcione nuevamente. Claude Code reporta el error en:
- Una notificación de advertencia en sesiones interactivas,
otelHeadersHelper failed; telemetry is not being exported, mostrada una vez por sesión cuando el auxiliar falla por primera vez - Salida de
/status - El registro de depuración, cuando se ejecuta con
--debugo después de ejecutar/debugen la sesión - stderr, en sesiones no interactivas iniciadas con
-p
Comportamiento de actualización
El script auxiliar de encabezados se ejecuta al inicio y periódicamente después para admitir la actualización de tokens. Por defecto, el script se ejecuta cada 29 minutos. Personaliza el intervalo con la variable de entorno CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Soporte de organización multi-equipo
Las organizaciones con múltiples equipos o departamentos pueden agregar atributos personalizados para distinguir entre diferentes grupos usando la variable de entorno OTEL_RESOURCE_ATTRIBUTES:
# Agregar atributos personalizados para identificación de equipo
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Estos atributos personalizados se incluirán en todas las métricas y eventos, permitiéndote:
- Filtrar métricas por equipo o departamento
- Rastrear costos por centro de costos
- Crear paneles específicos del equipo
- Configurar alertas para equipos específicos
Claude Code adjunta estos valores como atributos en cada punto de datos de métrica y registro de evento, además de enviarlos en el bloque de recursos OTLP. Debido a que la mayoría de los backends de métricas exponen atributos de punto de datos como etiquetas consultables, puedes agrupar y filtrar métricas por tus claves personalizadas directamente. Excepto por los atributos de repositorio vcs.*, las claves personalizadas nunca anulan los atributos estándar como user.id o session.id: cuando una clave colisiona, Claude Code mantiene el valor integrado.
Cada clave personalizada se convierte en una etiqueta en cada serie de métricas, por lo que los valores de alta cardinalidad aumentan el costo de almacenamiento en tu backend de métricas. Para enviar atributos personalizados solo en el bloque de recursos y omitirlos de las etiquetas de punto de datos, establece OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Consulta Control de cardinalidad de métricas.
La variable de entorno OTEL_RESOURCE_ATTRIBUTES utiliza pares clave=valor separados por comas con requisitos de formato estrictos:
- No se permiten espacios: Los valores no pueden contener espacios. Por ejemplo,
user.organizationName=My Companyes inválido - Formato: Debe ser pares clave=valor separados por comas:
key1=value1,key2=value2 - Caracteres permitidos: Solo caracteres US-ASCII excluyendo caracteres de control, espacios en blanco, comillas dobles, comas, puntos y comas, y barras invertidas
- Caracteres especiales: Los caracteres fuera del rango permitido deben estar codificados en porcentaje
Para un valor que necesitaría un espacio, usa guiones bajos o camelCase en su lugar. Los siguientes ejemplos establecen org.name con cada forma:
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"
Puedes codificar en porcentaje cualquier carácter, no solo los excluidos. Este ejemplo codifica tanto el espacio como el apóstrofo:
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
Envolver valores entre comillas no escapa espacios. Por ejemplo, org.name="My Company" resulta en el valor literal "My Company" con las comillas incluidas, no My Company.
Configuraciones de ejemplo
Establece estas variables de entorno antes de ejecutar claude. Cada escenario a continuación muestra una configuración completa, y cada variable se describe bajo Variables de configuración comunes. Para confirmar que una configuración tuvo efecto, verifica tu backend para la métrica claude_code.session.count después de iniciar una sesión; la Guía de inicio rápido cubre verificación solo de registros y qué verificar cuando nada llega.
Para depuración de consola con intervalo de exportación de 1 segundo:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
Para OTLP sobre 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
Para Prometheus, raspado desde http://localhost:9464/metrics:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
En un entorno autohospedado, la sesión vincula el puerto 9464 solo en la capacidad predeterminada del ejecutor de uno. A mayor capacidad, el ejecutor reexpone contadores y medidores de sesión en su propio punto final /metrics en su lugar.
Para enviar métricas a múltiples exportadores:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
Para enviar métricas y registros a diferentes puntos finales o backends:
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
Para exportar solo métricas, sin eventos o registros:
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
Para exportar solo eventos y registros, sin métricas:
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
Métricas y eventos disponibles
Atributos estándar
Todas las métricas y eventos comparten estos atributos estándar:
| Atributo | Descripción | Controlado por |
|---|---|---|
session.id |
Identificador único de sesión | OTEL_METRICS_INCLUDE_SESSION_ID (predeterminado: true) |
app.version |
Versión actual de Claude Code | OTEL_METRICS_INCLUDE_VERSION (predeterminado: false) |
app.entrypoint |
Cómo se inició la sesión, como cli, sdk-cli, sdk-ts, sdk-py, o claude-vscode |
OTEL_METRICS_INCLUDE_ENTRYPOINT (predeterminado: false) |
organization.id |
UUID de la organización (cuando está autenticado) | Siempre se incluye cuando está disponible |
user.account_uuid |
UUID de la cuenta (cuando está autenticado) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true) |
user.account_id |
ID de cuenta en formato etiquetado que coincide con las API de administración de Anthropic (cuando está autenticado), como user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true) |
user.id |
Identificador anónimo aleatorio generado en la primera ejecución y persistido en ~/.claude.json. No contiene información personal y no se deriva de su cuenta de Claude. Eliminar el archivo produce un nuevo valor no relacionado en la siguiente ejecución. |
Siempre se incluye |
user.email |
Dirección de correo electrónico del usuario, de su inicio de sesión o, en una sesión en la nube, de las credenciales de la propia sesión | Siempre se incluye cuando está disponible |
terminal.type |
Tipo de terminal, como iTerm.app, vscode, cursor, o tmux |
Siempre se incluye cuando se detecta |
Claves de OTEL_RESOURCE_ATTRIBUTES |
Atributos personalizados que establece, como department o team.id. Consulte Soporte de organización multiequipo |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (predeterminado: true) |
vcs.repository.url.full, vcs.owner.name, vcs.repository.name, vcs.provider.name |
La identidad del repositorio de la sesión, derivada de su remoto origin. Consulte Atributos del repositorio |
OTEL_METRICS_INCLUDE_REPOSITORY (predeterminado: false). Requiere Claude Code v2.1.269 o posterior |
Cuando Claude Code está autenticado en una puerta de enlace de aplicaciones Claude, la CLI marca las exportaciones con la identidad autenticada de la sesión de la puerta de enlace: user.id es el asunto del IdP en lugar de un identificador de instalación anónimo, user.email es el correo electrónico con sesión iniciada, y user.groups lleva la pertenencia al grupo del IdP como una cadena separada por comas. Cada exportación también lleva identity.source: gateway-oidc. La identidad de la puerta de enlace se aplica en último lugar, por lo que las claves user.* e identity.* establecidas a través de OTEL_RESOURCE_ATTRIBUTES se ignoran en sesiones de puerta de enlace.
Los eventos incluyen además los siguientes atributos. Estos nunca se adjuntan a las métricas porque causarían cardinalidad ilimitada:
prompt.id: UUID que correlaciona un mensaje del usuario con todos los eventos posteriores hasta el siguiente mensaje. Consulte Atributos de correlación de eventos.workspace.host_paths: directorios del espacio de trabajo del host seleccionados en la aplicación de escritorio, como una matriz de cadenasworkflow.run_id: identificador de ejecución, con prefijowf_, en los eventos de API y herramienta emitidos por agentes que pertenecen a una ejecución de herramienta Workflow. Filtrar eventos por unworkflow.run_idreconstruye las solicitudes de API y resultados de herramientas de esa ejecución. El identificador cubre los agentes que el script del flujo de trabajo genera y cualquier agente que esos generen a su vez, como invocaciones de habilidades. Coincide con el identificador de ejecución reportado en el resultado de la herramienta Workflow. Ausente en todos los demás eventos. Requiere Claude Code v2.1.202 o posteriorworkflow.name: nombre del flujo de trabajo, elmeta.namede su script, emitido junto conworkflow.run_id. Los nombres de flujo de trabajo integrados aparecen literalmente cuando la ejecución ejecuta el script integrado sin modificar. Los nombres creados por el usuario, incluidas las copias editadas de scripts integrados, se reemplazan concustoma menos que se establezcaOTEL_LOG_TOOL_DETAILS=1. Requiere Claude Code v2.1.202 o posterior
Atributos del repositorio
Establezca OTEL_METRICS_INCLUDE_REPOSITORY=true para etiquetar métricas y eventos con la identidad del repositorio de la sesión, de modo que un recopilador compartido pueda atribuir el uso por repositorio. Requiere Claude Code v2.1.269 o posterior.
Claude Code deriva estos atributos una vez por sesión desde el remoto origin del repositorio. Los remotos HTTPS y SSH de un repositorio producen valores idénticos:
| Atributo | Valor |
|---|---|
vcs.repository.url.full |
La URL del navegador del repositorio sin .git, como https://github.com/example-org/example-repo |
vcs.owner.name |
La ruta del propietario o grupo, como example-org; omitido cuando la ruta remota tiene un solo segmento |
vcs.repository.name |
El nombre del repositorio desnudo, como example-repo |
vcs.provider.name |
github, gitlab, bitbucket, o gitea cuando Claude Code reconoce el host remoto o la forma de URL como uno de esos proveedores; omitido de lo contrario |
Los valores se convierten a minúsculas, y las credenciales, cadenas de consulta y fragmentos de la URL remota nunca aparecen en ellos. Los atributos se omiten cuando la sesión no tiene un remoto origin, cuando el remoto no tiene forma de URL, o cuando el único repositorio envolvente es su directorio de inicio.
Una clave vcs.* que declare en OTEL_RESOURCE_ATTRIBUTES reemplaza el valor derivado para esa clave. Si declara vcs.repository.url.full, Claude Code nunca lee el remoto e informa solo las claves que declara.
Los atributos fluyen solo a sus propios exportadores; la telemetría de Anthropic descarta cada clave vcs.*.
Métricas
Claude Code exporta las siguientes métricas. La columna Unit muestra la cadena de unidad de OpenTelemetry adjunta a cada métrica; las métricas de conteo no llevan ninguna.
| Nombre de métrica | Descripción | Unidad |
|---|---|---|
claude_code.session.count |
Conteo de sesiones de CLI iniciadas | ninguna |
claude_code.lines_of_code.count |
Conteo de líneas de código modificadas | ninguna |
claude_code.pull_request.count |
Número de solicitudes de extracción creadas | ninguna |
claude_code.commit.count |
Número de confirmaciones de git creadas | ninguna |
claude_code.cost.usage |
Costo de la sesión de Claude Code | USD |
claude_code.token.usage |
Número de tokens utilizados | tokens |
claude_code.code_edit_tool.decision |
Conteo de decisiones de permiso de herramienta de edición de código | ninguna |
claude_code.active_time.total |
Tiempo activo total | s |
Cuando prometheus es el único exportador listado en OTEL_METRICS_EXPORTER, Claude Code omite las unidades USD, tokens, y s de las métricas exportadas para que el raspado permanezca en formato de texto Prometheus válido. Los nombres de las métricas no cambian, y las configuraciones que combinan exportadores, como otlp,prometheus, mantienen las unidades. Antes de v2.1.216, el raspado de Prometheus incluía líneas # UNIT solo de OpenMetrics que algunos raspadores rechazaban.
Detalles de métricas
Cada métrica incluye los atributos estándar listados arriba. Las métricas con atributos adicionales específicos del contexto se notan a continuación.
Contador de sesión
Se incrementa al inicio de cada sesión.
Atributos:
- Todos los atributos estándar
start_type: Cómo se inició la sesión. Uno de"fresh","resume","continue", o"agents_view". El valor"agents_view"identifica el proceso del panel de controlclaude agents, una interfaz de usuario local lanzada por el usuario en lugar de una sesión conversacional. Filtre en este valor para separar los lanzamientos de procesos de interfaz de usuario de las sesiones conversacionales en sus paneles de control.
Contador de líneas de código
Se incrementa cuando se agrega o se elimina código.
Atributos:
- Todos los atributos estándar
type: ("added","removed")model: Identificador de modelo para el modelo que realizó el cambio (por ejemplo, "claude-sonnet-5")
Contador de solicitud de extracción
Se incrementa cuando Claude Code crea una solicitud de extracción o solicitud de fusión a través de un comando de shell o una herramienta MCP.
Atributos:
- Todos los atributos estándar
Contador de confirmación
Se incrementa al crear confirmaciones de git a través de Claude Code.
Atributos:
- Todos los atributos estándar
Contador de costo
Se incrementa después de cada solicitud de API.
Atributos:
- Todos los atributos estándar
model: Identificador de modelo (por ejemplo, "claude-sonnet-5")query_source: Categoría del subsistema que emitió la solicitud. Uno de"main","subagent", o"auxiliary"speed:"fast"cuando la solicitud utilizó modo rápido. Ausente de lo contrarioeffort: Nivel de esfuerzo aplicado a la solicitud:"low","medium","high","xhigh", o"max". Ausente cuando Claude Code no envía un nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo.agent.name: Tipo de subagente que emitió la solicitud. Los nombres de agentes integrados y los agentes de plugins del mercado oficial aparecen literalmente. Otros nombres de agentes definidos por el usuario se reemplazan con"custom"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1. Ausente cuando la solicitud no fue emitida por un tipo de subagente nombrado.skill.name: Habilidad activa para la solicitud, establecida por la herramienta Skill, un comando/, o heredada por un subagente generado. Los nombres de habilidades integradas, agrupadas, definidas por el usuario y del plugin del mercado oficial aparecen literalmente. Los nombres de habilidades de plugins de terceros se reemplazan con"third-party"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1. Ausente cuando no hay habilidad activa.plugin.name: Plugin propietario cuando la habilidad activa o subagente es proporcionado por un plugin. Los nombres de plugins del mercado oficial aparecen literalmente. Los nombres de plugins de terceros se reemplazan con"third-party"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1. Ausente cuando ni la habilidad ni el subagente tienen un plugin propietario.marketplace.name: Mercado desde el cual se instaló el plugin propietario. Solo se emite para plugins del mercado oficial. Ausente de lo contrario.mcp_server.name: Servidor MCP cuyo resultado de herramienta consumió esta solicitud. Los nombres de servidores integrados, proxificados por claude.ai, y del registro oficial aparecen literalmente. Los nombres de servidores configurados por el usuario se reemplazan con"custom"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1. Ausente cuando la solicitud no consumió ningún resultado de herramienta MCP. Antes de v2.1.222, Claude Code establecía este atributo en cada solicitud después de una llamada de herramienta MCP, no solo en solicitudes que consumieron un resultado de herramienta, por lo que los paneles de control que lo agregan muestran una caída después de actualizar.mcp_tool.name: Herramienta MCP cuyo resultado consumió esta solicitud, con el mismo comportamiento de redacción y versión quemcp_server.name. Ausente cuando la solicitud no consumió ningún resultado de herramienta MCP.
Contador de tokens
Se incrementa después de cada solicitud de API.
Atributos:
- Todos los atributos estándar
type: ("input","output","cacheRead","cacheCreation")model: Identificador de modelo (por ejemplo, "claude-sonnet-5")query_source: Categoría del subsistema que emitió la solicitud. Uno de"main","subagent", o"auxiliary"speed:"fast"cuando la solicitud utilizó modo rápido. Ausente de lo contrarioeffort: Nivel de esfuerzo aplicado a la solicitud. Consulte Contador de costo para obtener detalles.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de habilidad, plugin, agente y MCP para la solicitud. Consulte Contador de costo para obtener definiciones y comportamiento de redacción.
Contador de decisión de herramienta de edición de código
Se incrementa cuando el usuario acepta o rechaza el uso de la herramienta Edit, Write, o NotebookEdit.
Atributos:
- Todos los atributos estándar
tool_name: Nombre de herramienta ("Edit","Write","NotebookEdit")decision: Decisión del usuario ("accept","reject")source: De dónde vino la decisión. Uno de"config","hook","user_permanent","user_temporary","user_abort", o"user_reject". Consulte el evento de decisión de herramienta para ver qué significa cada valor.language: Lenguaje de programación del archivo editado, como"TypeScript","Python","JavaScript", o"Markdown". Devuelve"unknown"para extensiones de archivo no reconocidas.
Contador de tiempo activo
Rastrea el tiempo real dedicado a usar activamente Claude Code, excluyendo el tiempo inactivo. Esta métrica se incrementa durante las interacciones del usuario, como escribir y leer respuestas, y durante el procesamiento de CLI, como la ejecución de herramientas y la generación de respuestas de IA.
Atributos:
- Todos los atributos estándar
type:"user"para interacciones de teclado,"cli"para ejecución de herramientas y respuestas de IA
Eventos
Claude Code exporta los siguientes eventos a través de registros/eventos de OpenTelemetry (cuando OTEL_LOGS_EXPORTER está configurado):
Atributos de correlación de eventos
Cuando un usuario envía un mensaje, Claude Code puede hacer múltiples llamadas de API y ejecutar varias herramientas. El atributo prompt.id le permite vincular todos esos eventos al único mensaje que los desencadenó.
| Atributo | Descripción |
|---|---|
prompt.id |
Identificador UUID v4 que vincula todos los eventos producidos mientras se procesa un único mensaje del usuario |
event.sequence |
Contador basado en 0 para ordenar eventos, contado por proceso de Claude Code en lugar de por sesión |
message.uuid |
UUID del mensaje tal como se persiste en la transcripción de la sesión, los archivos ~/.claude/projects/*/*.jsonl. Presente en assistant_response, en api_response_body, y en user_prompt excepto para envíos de comandos, que pueden producir cero o muchos mensajes. En assistant_response y api_response_body, esta es la entrada de transcripción final de la respuesta, desde la cual el parentUuid del siguiente turno se encadena. Requiere Claude Code v2.1.214 o posterior, o v2.1.274 o posterior en api_response_body |
client_request_id |
UUID generado por el cliente enviado como encabezado de solicitud x-client-request-id. Presente en api_request y api_error en conexiones de API de primera parte; ausente en backends de proveedores de terceros y cuando la solicitud se reintentó a través de la alternativa sin transmisión. Empareja una solicitud con su respuesta y permanece disponible para fallos como tiempos de espera que nunca produjeron un request_id del servidor. Coincide con el mismo atributo en el intervalo de rastreo llm_request. Requiere Claude Code v2.1.214 o posterior |
Para rastrear toda la actividad desencadenada por un único mensaje, filtre sus eventos por un valor específico de prompt.id. Esto devuelve el evento user_prompt, cualquier evento api_request, y cualquier evento tool_result que ocurrió mientras se procesaba ese mensaje.
event.sequence comienza en 0 cada vez que se inicia un proceso de Claude Code y cuenta hacia arriba durante la vida de ese proceso. Continúa contando a través de /clear, que asigna un nuevo session.id. Si reanuda una sesión sin bifurcar, la sesión mantiene su session.id pero toma sus valores de event.sequence del proceso que la reanudó, por lo que dentro de una sesión un evento posterior puede llevar un valor más bajo que uno anterior, o repetir uno. Para ordenar los eventos de una sesión, ordene por event.timestamp y use event.sequence para ordenar eventos que comparten una marca de tiempo.
Para la reconstrucción a nivel de mensaje, cada clase de evento lleva una clave que coincide con un campo en la transcripción de la sesión. El formato de entrada de transcripción es interno a Claude Code y cambia entre versiones, por lo que un pipeline que se une en estos campos puede romperse en cualquier versión; trate las uniones como específicas de la versión en lugar de un contrato estable:
message.uuidenuser_prompt,assistant_response, yapi_response_bodyrequest_iden los eventos de API, persistido comorequestIden las entradas del asistente de la transcripcióntool_use_iden eventostool_resultytool_decision
Evento de mensaje del usuario
Se registra cuando un usuario envía un mensaje.
Nombre del evento: claude_code.user_prompt
Atributos:
- Todos los atributos estándar
event.name:"user_prompt"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosprompt_length: Longitud del mensajeprompt: Contenido del mensaje. Redactado por defecto. EstablezcaOTEL_LOG_USER_PROMPTS=1para incluirlomessage.uuid: UUID del mensaje del usuario resultante, coincidiendo con la entrada de transcripción persistida. Ausente en envíos de comandos, que pueden producir cero o muchos mensajes. Requiere Claude Code v2.1.214 o posteriorcommand_name: Nombre del comando cuando el mensaje invoca uno. Los nombres de comandos integrados y agrupados comocompactodebugse emiten tal cual; los alias comoresetse emiten tal como se escribieron en lugar del nombre canónico. Los nombres de comandos personalizados, de plugin y MCP se contraen acustomomcpa menos que se establezcaOTEL_LOG_TOOL_DETAILS=1command_source: Origen del comando cuando está presente:builtin,custom, omcp. Los comandos proporcionados por plugins reportan comocustom
Evento de respuesta del asistente
Se registra después de cada solicitud de API que devuelve contenido de texto del modelo. Solo se incluyen los bloques de texto de la respuesta; los bloques de pensamiento y los bloques de uso de herramientas se excluyen. Requiere Claude Code v2.1.193 o posterior.
Nombre del evento: claude_code.assistant_response
Atributos:
- Todos los atributos estándar
event.name:"assistant_response"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosresponse_length: Longitud del texto de respuesta en caracteresresponse: Texto de respuesta, truncado en el límite de contenido (60 KB por defecto). Redactado a<REDACTED>por defecto. EstablezcaOTEL_LOG_ASSISTANT_RESPONSES=1para incluirlo. CuandoOTEL_LOG_ASSISTANT_RESPONSESno está establecido,OTEL_LOG_USER_PROMPTSlo controla en su lugar, por lo que establezcaOTEL_LOG_ASSISTANT_RESPONSES=0para mantener las respuestas redactadas mientras el registro de mensajes está activadomodel: Identificador de modelo (por ejemplo, "claude-sonnet-5")request_id: ID de solicitud de API de Anthropic del encabezadorequest-idde la respuesta. Presente solo cuando la API devuelve unomessage.uuid: UUID de la entrada de transcripción final de la respuesta. Una respuesta de API se persiste como una entrada de transcripción por bloque de contenido; esta es la última, desde la cual elparentUuiddel siguiente turno se encadena. Requiere Claude Code v2.1.214 o posteriorquery_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact", o un nombre de subagente
Evento de resultado de herramienta
Se registra cuando una herramienta completa la ejecución. No se emite si la llamada de herramienta fue rechazada; consulte el evento de decisión de herramienta para rechazos.
Nombre del evento: claude_code.tool_result
Atributos:
- Todos los atributos estándar
event.name:"tool_result"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventostool_name: Nombre de la herramientatool_use_id: Identificador único para esta invocación de herramienta. Coincide con eltool_use_idpasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.success:"true"o"false"duration_ms: Tiempo de ejecución en milisegundoserror_type: Cadena de categoría de error cuando la herramienta falló, como"Error:ENOENT"o"ShellError"error(cuandoOTEL_LOG_TOOL_DETAILS=1): Mensaje de error completo cuando la herramienta fallódecision_type: Siempre"accept", ya que este evento solo se emite después de que la herramienta se ejecuta. Las llamadas rechazadas no producen un resultado de herramientadecision_source: De dónde vino la decisión de permiso. Uno de"config","hook","user_permanent", o"user_temporary". Consulte el evento de decisión de herramienta para ver qué significa cada valor. Las fuentes solo de rechazo"user_abort"y"user_reject"nunca aparecen en este evento.tool_input_size_bytes: Tamaño de la entrada de herramienta serializada en JSON en bytestool_result_size_bytes: Tamaño del resultado de la herramienta en bytesmcp_server_scope: Identificador de alcance del servidor MCP (para herramientas MCP)vcs.ref.head.revision,vcs.ref.head.name,vcs.ref.head.type(cuandoOTEL_LOG_TOOL_DETAILS=1): la identidad de confirmación de una ejecución exitosa degit commitejecutada por la herramienta Bash o PowerShell.vcs.ref.head.revisiones el SHA de confirmación,vcs.ref.head.namees la rama en la que se confirmó, yvcs.ref.head.typeesbranch. El nombre y tipo se omiten cuando la confirmación se realizó en un HEAD desconectado. Requiere Claude Code v2.1.269 o posteriortool_parameters(cuandoOTEL_LOG_TOOL_DETAILS=1): Cadena JSON que contiene parámetros específicos de la herramienta. Para los servidores integrados de Claude Desktop, en sesiones que Claude Desktop posee, el parmcp_server_name/mcp_tool_namese incluye incluso con la bandera desactivada, la misma excepción creada por el host que el evento de decisión de herramienta, requiriendo Claude Code v2.1.214 o posterior. Los parámetros varían según la herramienta:- Para herramienta Bash: incluye
bash_command,full_command,timeout,description, ydangerouslyDisableSandbox, másgit_commit_idygit_branchcuando un comandogit committiene éxito.git_commit_ides el SHA de confirmación completo cuando la confirmación es el HEAD del directorio de trabajo de la sesión, y el SHA abreviado de git de lo contrario.git_branches la rama en la que se confirmó, omitida en un HEAD desconectado - Para la herramienta Bash del espacio de trabajo de la aplicación de escritorio, que también reporta
tool_namecomoBash: incluye solobash_command,full_command, ytimeout - Para herramientas MCP: incluye
mcp_server_name,mcp_tool_name - Para herramienta Skill: incluye
skill_name - Para herramienta Agent o herramienta Task heredada: incluye
subagent_type
- Para herramienta Bash: incluye
tool_input(cuandoOTEL_LOG_TOOL_DETAILS=1): Argumentos de herramienta serializados en JSON. Los valores individuales superiores a 512 caracteres se truncan, y la carga útil completa se limita a aproximadamente 4 K caracteres. Se aplica a todas las herramientas, incluidas las herramientas MCP.
Evento de solicitud de API
Se registra para cada solicitud de API a Claude.
Nombre del evento: claude_code.api_request
Atributos:
- Todos los atributos estándar
event.name:"api_request"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmodel: Modelo utilizado (por ejemplo, "claude-sonnet-5")cost_usd: Costo estimado en USDcost_usd_micros: Costo estimado en millonésimas de dólar estadounidense, emitido como un enteroduration_ms: Duración de la solicitud en milisegundosinput_tokens: Número de tokens de entradaoutput_tokens: Número de tokens de salidacache_read_tokens: Número de tokens leídos de la cachécache_creation_tokens: Número de tokens utilizados para la creación de cachérequest_id: ID de solicitud de API de Anthropic del encabezadorequest-idde la respuesta, como"req_011...". Presente solo cuando la API devuelve uno.client_request_id: UUID generado por el cliente enviado como encabezado de solicitudx-client-request-id; consulte la tabla atributos de correlación de eventos para saber cuándo está presente. Requiere Claude Code v2.1.214 o posteriorspeed:"fast"o"normal", indicando si el modo rápido estaba activoquery_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact", o un nombre de subagenteeffort: Nivel de esfuerzo aplicado a la solicitud:"low","medium","high","xhigh", o"max". Ausente cuando Claude Code no envía un nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de habilidad, plugin, agente y MCP para la solicitud. Consulte Contador de costo para obtener definiciones y comportamiento de redacción.
Evento de error de API
Se registra cuando una solicitud de API a Claude falla.
Nombre del evento: claude_code.api_error
Atributos:
- Todos los atributos estándar
event.name:"api_error"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmodel: Modelo utilizado (por ejemplo, "claude-sonnet-5")error: Mensaje de errorstatus_code: Código de estado HTTP como número. Ausente para errores no HTTP como fallos de conexión.duration_ms: Duración de la solicitud en milisegundosattempt: Número total de intentos realizados, incluida la solicitud inicial (1significa que no ocurrieron reintentos)request_id: ID de solicitud de API de Anthropic del encabezadorequest-idde la respuesta, como"req_011...". Presente solo cuando la API devuelve uno.client_request_id: UUID generado por el cliente enviado como encabezado de solicitudx-client-request-id. Disponible incluso cuando un fallo como un tiempo de espera o error de conexión nunca produjo unrequest_iddel servidor; consulte la tabla atributos de correlación de eventos para saber cuándo está presente. Requiere Claude Code v2.1.214 o posteriorspeed:"fast"o"normal", indicando si el modo rápido estaba activoquery_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact", o un nombre de subagenteeffort: Nivel de esfuerzo aplicado a la solicitud. Ausente cuando Claude Code no envía un nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de habilidad, plugin, agente y MCP para la solicitud. Consulte Contador de costo para obtener definiciones y comportamiento de redacción.
Evento de rechazo de API
Se registra cuando una solicitud de API devuelve stop_reason: "refusal". Los rechazos llegan en una transmisión de respuesta exitosa en lugar de como un error HTTP, por lo que el evento api_error no se activa para ellos. Este evento le permite rastrear la frecuencia de rechazo y agrupar rechazos por los mismos atributos que api_request y api_error.
Nombre del evento: claude_code.api_refusal
Atributos:
- Todos los atributos estándar
event.name:"api_refusal"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmodel: Identificador de modelo de la solicitudrequest_id: ID de solicitud de API de Anthropic del encabezadorequest-idde la respuesta, como"req_011...". Presente solo cuando la API devuelve uno.query_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact", o un nombre de subagente. Consulteapi_requestpara obtener definiciones.speed: Ya sea"fast"cuando Modo rápido está activo, o"normal"attempt: Número de intento de reintento. El primer intento es1.effort: Nivel de esfuerzo aplicado a la solicitud. Ausente cuando Claude Code no envía un nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo.server_fallback_hop:truecuando la alternativa de modelo del lado del servidor de la API ya reintentó este rechazo en un modelo diferente, por lo que el usuario no vio este rechazo en particular.falsecuando la solicitud terminó en un rechazo. Un único turno puede emitir tanto un evento de saltotruecomo un evento finalfalseposterior cuando el modelo de alternativa también rechaza.has_category:truecuando la respuesta de la API llevaba unstop_details.categoryde"cyber","bio","frontier_llm", o"reasoning_extraction".falsecuando la respuesta no llevaba categoría o un valor fuera de ese conjunto. Ausente cuandoserver_fallback_hopestrue, porque los saltos no llevanstop_details.has_explanation:truecuando la respuesta de la API llevaba unstop_details.explanation, de lo contrariofalse. Ausente cuandoserver_fallback_hopestrue.category: El valorstop_details.categoryde la respuesta de la API. Uno de"cyber","bio","frontier_llm", o"reasoning_extraction". Solo presente cuandoOTEL_LOG_TOOL_DETAILS=1está establecido yhas_categoryestrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de habilidad, plugin, agente y MCP para la solicitud. Consulte Contador de costo para obtener definiciones y comportamiento de redacción.
Evento de cuerpo de solicitud de API
Se registra para cada intento de solicitud de API cuando OTEL_LOG_RAW_API_BODIES está establecido. Se emite un evento por intento, por lo que los reintentos con parámetros ajustados producen cada uno su propio evento.
Nombre del evento: claude_code.api_request_body
Atributos:
- Todos los atributos estándar
event.name:"api_request_body"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosbody: Parámetros de solicitud de API de Messages serializados en JSON, como el mensaje del sistema, mensajes y herramientas, truncados en el límite de contenido (60 KB por defecto). El contenido de pensamiento extendido en turnos anteriores del asistente se redacta. Se emite solo en modo en línea (OTEL_LOG_RAW_API_BODIES=1).body_ref: Ruta absoluta a un archivo<dir>/<uuid>.request.jsonque contiene el cuerpo sin truncar. Se emite solo en modo de archivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Longitud del cuerpo sin truncar. Bytes UTF-8 cuandoOTEL_LOG_RAW_API_BODIES=file:<dir>, o unidades de código UTF-16 cuando=1body_truncated:"true"cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.model: Identificador de modelo de los parámetros de solicitudquery_source: Subsistema que emitió la solicitud (por ejemplo,"compact")request_body_id: UUID que identifica el cuerpo de solicitud de este intento. El eventoapi_response_bodypara el intento que tiene éxito lleva el mismo valor, por lo que puede emparejar una respuesta con la solicitud exacta que la produjo. Requiere Claude Code v2.1.274 o posterior
Evento de cuerpo de respuesta de API
Se registra para cada respuesta de API exitosa cuando OTEL_LOG_RAW_API_BODIES está establecido.
En modo de archivo (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code también añade una línea JSON a <dir>/index.jsonl para cada respuesta exitosa, con los campos timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file, y response_file. Léalo para encontrar los archivos de solicitud y respuesta detrás de un mensaje de transcripción dado sin consultar su backend de telemetría. El archivo de índice requiere Claude Code v2.1.274 o posterior.
Nombre del evento: claude_code.api_response_body
Atributos:
- Todos los atributos estándar
event.name:"api_response_body"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosbody: Respuesta de API de Messages serializada en JSON, incluido el id, bloques de contenido, uso y razón de parada, truncada en el límite de contenido (60 KB por defecto). El contenido de pensamiento extendido se redacta. Se emite solo en modo en línea (OTEL_LOG_RAW_API_BODIES=1).body_ref: Ruta absoluta a un archivo<dir>/<request_id>.response.jsonque contiene el cuerpo sin truncar. Se emite solo en modo de archivo (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Longitud del cuerpo sin truncar. Bytes UTF-8 cuandoOTEL_LOG_RAW_API_BODIES=file:<dir>, o unidades de código UTF-16 cuando=1body_truncated:"true"cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.model: Identificador de modeloquery_source: Subsistema que emitió la solicitudrequest_id: ID de solicitud de API de Anthropic del encabezadorequest-idde la respuesta, como"req_011...". Presente solo cuando la API devuelve uno.request_body_id: Elrequest_body_iddel eventoapi_request_bodyque esta respuesta responde. Requiere Claude Code v2.1.274 o posteriormessage.id: ID de mensaje que la API asignó a la respuesta, el campoiddel cuerpo de respuesta. Requiere Claude Code v2.1.274 o posteriormessage.uuid: UUID de la entrada de transcripción final de la respuesta. Junto conrequest_body_id, vincula un mensaje de transcripción a los cuerpos de solicitud y respuesta detrás de él. Requiere Claude Code v2.1.274 o posterior
Evento de decisión de herramienta
Se registra cuando se toma una decisión de permiso de herramienta (aceptar/rechazar).
Nombre del evento: claude_code.tool_decision
Atributos:
- Todos los atributos estándar
event.name:"tool_decision"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventostool_name: Nombre de la herramienta (por ejemplo, "Read", "Edit", "Write", "NotebookEdit")tool_use_id: Identificador único para esta invocación de herramienta. Coincide con eltool_use_idpasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.decision: Ya sea"accept"o"reject"tool_source: Siempre presente. La procedencia de la herramienta, como un conjunto cerrado de valores creados por CLI. Requiere Claude Code v2.1.214 o posterior"builtin": las herramientas propias de la CLI"mcp": servidores MCP en general"sdk_host_builtin_mcp": un servidor en proceso integrado en Claude Desktop mismo, en una sesión que Claude Desktop posee. Claude Desktop posee una sesión que inició desde uno de sus propios puntos de entrada,claude-desktop,claude-desktop-3p, olocal-agent, cuando esa sesión no es un hijo anidado; las sesiones anidadas, incluidas las sesiones que Claude Code mismo genera, reportan estos servidores como"mcp"
source: De dónde vino la decisión:"config": Decidido automáticamente sin preguntar, basado en la configuración del proyecto, reglas de permitir o denegar en la configuración personal del usuario, política gestionada empresarial, banderas--allowedToolso--disallowedTools, el modo de permiso activo, una concesión con alcance de sesión de un mensaje anterior en la misma sesión de CLI interactiva, o porque la herramienta es inherentemente segura. El evento no indica cuál de estas fuentes coincidió. Claude Code también reporta"config"cuando la solicitud de mensaje de permiso en sí falla, por ejemplo cuando la devolución de llamadacanUseTooldel SDK de Agent o la herramienta--permission-prompt-tooldevuelve un resultado inválido, o cuando el flujo de entrada se cierra mientras la solicitud está pendiente. Antes de v2.1.216, Claude Code reportaba estos fallos como"user_reject"."hook": Un hookPreToolUseoPermissionRequestdevolvió la decisión."user_permanent": Se emite cuando el usuario eligió "Sí, y no preguntar de nuevo para ..." en un mensaje de permiso, que guarda una regla de permitir en su configuración personal. En la CLI interactiva esto se emite solo para esa opción en sí; las llamadas posteriores que coinciden con la regla guardada emiten"config"en su lugar. En sesiones de SDK de Agent o no interactivas-p, tanto la opción inicial como las coincidencias de reglas posteriores emiten"user_permanent". Se trata como una aceptación."user_temporary": Se emite cuando el usuario eligió "Sí" en un mensaje de permiso para una aprobación única, u optó por una opción que otorga acceso para el resto de la sesión en un mensaje de edición o lectura de archivo. En la CLI interactiva esto se emite solo para la opción en sí; las llamadas posteriores permitidas por esa concesión con alcance de sesión emiten"config"en su lugar. En sesiones de SDK de Agent o no interactivas-p, tanto la opción como las coincidencias posteriores emiten"user_temporary". Se trata como una aceptación."user_abort": Se emite cuando el usuario descartó el mensaje de permiso sin responder. En sesiones de SDK de Agent y no interactivas-p, esto incluye interrumpir el turno mientras una solicitud de permisocanUseToolo--permission-prompt-toolestá pendiente; antes de v2.1.216, Claude Code reportaba esa interrupción como"user_reject". Se trata como un rechazo."user_reject": Se emite cuando el usuario eligió "No" cuando se le preguntó. En la CLI interactiva esto se emite solo para esa opción en sí; las llamadas que coinciden con una regla de denegar en la configuración personal del usuario emiten"config"en su lugar. En sesiones de SDK de Agent o no interactivas-p, las llamadas que coinciden con una regla de denegar en la configuración personal emiten"user_reject". Se trata como un rechazo.
tool_parameters(cuandoOTEL_LOG_TOOL_DETAILS=1): Cadena JSON que contiene parámetros específicos de la herramienta. Misma forma que el evento de resultado de herramienta, menos campos posteriores a la ejecución comogit_commit_id. Los valores pueden diferir detool_resultpara una llamada aceptada si la decisión de permiso reescribe la entrada de herramienta a través deupdatedInput. Use este atributo para ver qué comando fue rechazado cuandodecisiones"reject".- Para herramientas
"sdk_host_builtin_mcp":mcp_server_nameymcp_tool_namese incluyen incluso cuandoOTEL_LOG_TOOL_DETAILSestá desactivado, porque la aplicación host define estos nombres; sin ellos, una llamada rechazada a uno de estos servidores integrados sería inattribuible en la transmisión predeterminada. Para servidores MCP configurados por el usuario, eltool_namedel evento es siempre el literal"mcp_tool", y los nombres del servidor y herramienta aparecen solo entool_parameterscon la bandera activada; el contenido del argumento requiere la bandera en todas partes. Requiere Claude Code v2.1.214 o posterior - Para herramienta Bash: incluye
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. La herramienta bash del espacio de trabajo de la aplicación de escritorio también reportatool_namecomoBash, pero incluye solobash_command,full_command, ytimeout - Para herramientas MCP: incluye
mcp_server_name,mcp_tool_name - Para herramienta Skill: incluye
skill_name - Para herramienta Agent o herramienta Task heredada: incluye
subagent_type
- Para herramientas
Evento de cambio de modo de permiso
Se registra cuando el modo de permiso cambia, por ejemplo al ciclar con Shift+Tab, salir del modo de plan, o una verificación de puerta automática.
Nombre del evento: claude_code.permission_mode_changed
Atributos:
- Todos los atributos estándar
event.name:"permission_mode_changed"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosfrom_mode: El modo de permiso anterior, por ejemplo"default","plan","acceptEdits","auto", o"bypassPermissions"to_mode: El nuevo modo de permisotrigger: Qué causó el cambio. Uno de"shift_tab","exit_plan_mode","auto_gate_denied", o"auto_opt_in". Ausente cuando la transición se origina del SDK o puente
Evento de autenticación
Se registra cuando /login o /logout se completa.
Nombre del evento: claude_code.auth
Atributos:
- Todos los atributos estándar
event.name:"auth"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosaction:"login"o"logout"success:"true"o"false"auth_method: Método de autenticación, como"oauth"error_category: Tipo de error categórico cuando la acción falló. El mensaje de error sin procesar nunca se incluyestatus_code: Código de estado HTTP como cadena cuando la acción falló con un error HTTP
Evento de conexión del servidor MCP
Se registra cuando un servidor MCP se conecta, desconecta o falla al conectarse.
Nombre del evento: claude_code.mcp_server_connection
Atributos:
- Todos los atributos estándar
event.name:"mcp_server_connection"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosstatus:"connected","failed", o"disconnected"transport_type: Transporte del servidor, como"stdio","sse", o"http"server_scope: Alcance en el que está configurado el servidor, como"user","project", o"local"duration_ms: Duración del intento de conexión en milisegundoserror_code: Código de error cuando la conexión fallóis_plugin:truecuando el servidor es proporcionado por un plugin,falsede lo contrarioplugin_id_hash(cuandois_pluginestrue): Hash estable del nombre del plugin y mercado, para agrupar eventos por plugin sin exponer el nombre. Claude Code lo calcula como se describe en el evento de plugin cargadoplugin.name(cuandois_pluginestrue): Nombre del plugin que proporciona el servidor. Para plugins de terceros este es el literal"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1; esto protege los nombres de plugins de terceros de aparecer en registros por defecto. Los plugins de fuentes oficiales de Anthropic siempre se identifican por nombre. Los atributosplugin_id_hashyplugin.namefluyen a su propio backend de monitoreo y no se envían a Anthropicserver_name(cuandoOTEL_LOG_TOOL_DETAILS=1): Nombre del servidor configuradoerror(cuandoOTEL_LOG_TOOL_DETAILS=1): Mensaje de error completo cuando la conexión falló
Evento de error interno
Se registra cuando Claude Code detecta un error interno inesperado. Solo se registran el nombre de la clase de error y un código de estilo errno. El mensaje de error y el rastreo de pila nunca se incluyen. Este evento no se emite cuando se ejecuta contra Amazon Bedrock, la plataforma de agentes de Google Cloud, Microsoft Foundry, o cuando DISABLE_ERROR_REPORTING está establecido.
Nombre del evento: claude_code.internal_error
Atributos:
- Todos los atributos estándar
event.name:"internal_error"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventoserror_name: Nombre de la clase de error, como"TypeError"o"SyntaxError"error_code: Código errno de Node.js como"ENOENT"cuando está presente en el error
Evento de plugin instalado
Se registra cuando un plugin termina de instalarse, tanto desde el comando CLI claude plugin install como desde la interfaz de usuario interactiva /plugin.
Nombre del evento: claude_code.plugin_installed
Atributos:
- Todos los atributos estándar
event.name:"plugin_installed"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmarketplace.is_official:"true"si el mercado es un mercado oficial de Anthropic,"false"de lo contrarioinstall.trigger:"cli"o"ui"plugin.name: Nombre del plugin instalado. Para mercados de terceros esto se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1plugin.version: Versión del plugin cuando se declara en la entrada del mercado. Para mercados de terceros esto se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1marketplace.name: Mercado desde el cual se instaló el plugin. Para mercados de terceros esto se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1
Evento de plugin cargado
Se registra una vez por plugin habilitado al inicio de la sesión. Use este evento para inventariar qué plugins están activos en su flota, como complemento a plugin_installed que registra la acción de instalación en sí.
Nombre del evento: claude_code.plugin_loaded
Atributos:
- Todos los atributos estándar
event.name:"plugin_loaded"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosplugin.name: nombre del plugin. Para plugins fuera del mercado oficial y paquete integrado el valor es"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1marketplace.name: mercado desde el cual se instaló el plugin, cuando se conoce. Redactado a"third-party"bajo la misma condición queplugin.nameplugin.version: versión del manifiesto del plugin. Se incluye solo cuando el nombre no está redactado y el manifiesto declara una versiónplugin.scope: categoría de procedencia del plugin:"official","community","org","user-local", o"default-bundle"enabled_via: cómo el plugin llegó a estar habilitado:"default-enable","org-policy","admin-install","seed-mount", o"user-install". El valor"admin-install"significa que el plugin está configurado como requerido o instalación automática para su organización en Configuración de la organización > Plugins y habilidades. Antes de v2.1.246, Claude Code reportaba estos plugins como"user-install"o"seed-mount"plugin_id_hash: hash determinista del nombre del plugin y mercado, enviado solo a su exportador configurado. Le permite contar los plugins de terceros distintos cargados en su flota sin registrar sus nombres. Para plugins sincronizados desde claude.ai, Claude Code codifica el nombre del plugin con el nombre del mercado que claude.ai reporta para el plugin, o consyncedde lo contrario. Antes de v2.1.246, Claude Code no usaba el nombre del mercado que claude.ai reporta en el hashhas_hooks: si el plugin contribuye hookshas_mcp: si el plugin contribuye servidores MCPhost_owned_mcp:truecuando el host del SDK gestiona las conexiones MCP de este plugin y Claude Code omitió leer la configuración del servidor MCP del plugin,falsede lo contrario. Requiere Claude Code v2.1.172 o posteriorskill_path_count: número de directorios de habilidades que declara el plugincommand_path_count: número de directorios de comandos que declara el pluginagent_path_count: número de directorios de agentes que declara el pluginsafe_mode:"true"cuando la sesión se inició con--safe-mode,"false"de lo contrario. En modo seguro este evento reporta solo el inventario configurado; los comandos, habilidades, hooks y servidores MCP del plugin no se cargan. Requiere Claude Code v2.1.169 o posterior
Evento de habilidad activada
Se registra cuando se invoca una habilidad, ya sea que Claude la llame a través de la herramienta Skill o que la ejecute como un comando /.
Nombre del evento: claude_code.skill_activated
Atributos:
- Todos los atributos estándar
event.name:"skill_activated"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosskill.name: Nombre de la habilidad. Para habilidades definidas por el usuario y de plugins de terceros el valor es el marcador de posición"custom_skill"a menos queOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Cómo se activó la habilidad ("user-slash","claude-proactive", o"nested-skill")skill.source: De dónde se cargó la habilidad (por ejemplo,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"cuando la habilidad es una habilidad de flujo de trabajo. Ausente de lo contrarioplugin.name(cuandoOTEL_LOG_TOOL_DETAILS=1o el plugin es de un mercado oficial): Nombre del plugin propietario cuando la habilidad es proporcionada por un pluginmarketplace.name(cuandoOTEL_LOG_TOOL_DETAILS=1o el plugin es de un mercado oficial): Mercado desde el cual se instaló el plugin propietario, cuando la habilidad es proporcionada por un plugin
Evento de mención @
Se registra cuando Claude Code resuelve una mención @ en un mensaje. No todas las menciones emiten un evento: las rutas de salida temprana como denegaciones de permiso, archivos de tamaño excesivo, adjuntos de referencia PDF y fallos de listado de directorios se devuelven sin registrar.
Nombre del evento: claude_code.at_mention
Atributos:
- Todos los atributos estándar
event.name:"at_mention"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmention_type: Tipo de mención ("file","directory","agent","mcp_resource","peer"). El valor"peer"significa que mencionó una de sus otras sesiones de Claude Code. Requiere Claude Code v2.1.232 o posteriorsuccess: Si la mención se resolvió exitosamente ("true"o"false")
Evento de reintentos de API agotados
Se registra una vez cuando una solicitud de API falla después de más de un intento. Se emite junto con el evento api_error final.
Nombre del evento: claude_code.api_retries_exhausted
Atributos:
- Todos los atributos estándar
event.name:"api_retries_exhausted"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosmodel: Modelo utilizadoerror: Mensaje de error finalstatus_code: Código de estado HTTP como número. Ausente para errores no HTTP.total_attempts: Número total de intentos realizadostotal_retry_duration_ms: Tiempo total de reloj de pared en todos los intentosspeed:"fast"o"normal"
Evento de hook registrado
Se registra una vez por hook configurado al inicio de la sesión. Use este evento para inventariar qué hooks están activos en su flota, como complemento a los eventos por ejecución hook_execution_start y hook_execution_complete.
Nombre del evento: claude_code.hook_registered
Atributos:
- Todos los atributos estándar
event.name:"hook_registered"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventoshook_event: tipo de evento de hook, como"PreToolUse"o"PostToolUse"hook_type: tipo de implementación de hook:"command","prompt","mcp_tool","http", o"agent"hook_source: dónde se define el hook:"userSettings","projectSettings","localSettings","flagSettings","policySettings", o"pluginHook"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"de lo contrario. Requiere Claude Code v2.1.169 o posteriorhook_matcher(cuandoOTEL_LOG_TOOL_DETAILS=1): la cadena de coincidencia de la configuración del hook, cuando se estableceplugin.name(cuandohook_sourcees"pluginHook"): nombre del plugin contribuyente. Para plugins fuera del mercado oficial y paquete integrado el valor es"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(cuandohook_sourcees"pluginHook"): hash determinista del nombre del plugin y mercado, enviado solo a su exportador configurado. Le permite contar plugins contribuyentes distintos sin registrar sus nombres. Claude Code lo calcula como se describe en el evento de plugin cargado
Evento de inicio de ejecución de hook
Se registra cuando uno o más hooks comienzan a ejecutarse para un evento de hook.
Nombre del evento: claude_code.hook_execution_start
Atributos:
- Todos los atributos estándar
event.name:"hook_execution_start"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventoshook_event: Tipo de evento de hook, como"PreToolUse"o"PostToolUse"hook_name: Nombre completo del hook incluida la coincidencia, como"PreToolUse:Write"num_hooks: Número de comandos de hook coincidentesmanaged_only:"true"cuando solo se permiten hooks de política gestionadahook_source:"policySettings"o"merged"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"de lo contrario. Requiere Claude Code v2.1.169 o posteriorhook_definitions: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el rastreo beta detallado comoOTEL_LOG_TOOL_DETAILS=1están habilitados
Evento de finalización de ejecución de hook
Se registra cuando todos los hooks para un evento de hook han terminado.
Nombre del evento: claude_code.hook_execution_complete
Atributos:
- Todos los atributos estándar
event.name:"hook_execution_complete"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventoshook_event: Tipo de evento de hookhook_name: Nombre completo del hook incluida la coincidencianum_hooks: Número de comandos de hook coincidentesnum_success: Conteo que se completó exitosamentenum_blocking: Conteo que devolvió una decisión de bloqueonum_non_blocking_error: Conteo que falló sin bloquearnum_cancelled: Conteo cancelado antes de completarsetotal_duration_ms: Duración de reloj de pared de todos los hooks coincidentesstdout_chars: Total de caracteres de stdout en todos los hooks coincidentes que tuvieron éxito. Requiere Claude Code v2.1.280 o posterioradditional_context_chars: Total de caracteres deadditionalContextdevueltos por los hooks coincidentes. Requiere Claude Code v2.1.280 o posteriorsystem_message_chars: Total de caracteres desystemMessagedevueltos por los hooks coincidentes. Requiere Claude Code v2.1.280 o posteriorinitial_user_message_chars: Total de caracteres deinitialUserMessagedevueltos por los hooks coincidentes. Requiere Claude Code v2.1.280 o posteriornum_outputs_persisted: Número de salidas de hook sobre el límite de 10,000 caracteres que Claude Code guardó en un archivo. Requiere Claude Code v2.1.280 o posteriormanaged_only:"true"cuando solo se permiten hooks de política gestionadahook_source:"policySettings"o"merged"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"de lo contrario. Requiere Claude Code v2.1.169 o posteriorhook_definitions: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el rastreo beta detallado comoOTEL_LOG_TOOL_DETAILS=1están habilitados
Evento de métricas de plugin de hook
Se registra cuando un hook de plugin del mercado oficial emite métricas por invocación. Solo los plugins instalados desde un mercado oficial de Anthropic pueden emitir estos. Los plugins de mercado de terceros y los hooks configurados por el usuario no emiten a este evento. Use este evento para monitorear el comportamiento del plugin como tasas de búsqueda, costos y duraciones desde su propia pila de observabilidad.
Nombre del evento: claude_code.hook_plugin_metrics
Atributos:
- Todos los atributos estándar
event.name:"hook_plugin_metrics"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosplugin_id: identificador del plugin en forma<name>@<marketplace>hook_event: tipo de evento de hook que emitió las métricas- Hasta 20 claves de métrica emitidas por el plugin. Los nombres coinciden con
^[a-z][a-z0-9_]{0,39}$. Los valores son booleanos o números.
Evento de compactación
Se registra cuando la compactación de conversación se completa.
Nombre del evento: claude_code.compaction
Atributos:
- Todos los atributos estándar
event.name:"compaction"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventostrigger:"auto"o"manual"success:"true"o"false"duration_ms: Duración de la compactaciónpre_tokens: Conteo aproximado de tokens antes de la compactaciónpost_tokens: Conteo aproximado de tokens después de la compactaciónerror: Mensaje de error cuando la compactación fallóprecompute_reuse: Solo se establece cuandotriggeres"manual". La compactación automática puede preparar un resumen en el fondo antes de que la ventana de contexto se llene, y este atributo registra si/compactreutilizó ese resumen preparado."hit"significa que se reutilizó;"miss_custom_instructions","miss_hook", y"miss_not_ready"dan la razón por la que se calculó un resumen fresco en su lugar. Requiere Claude Code v2.1.153 o posterior
Evento de subagente completado
Se registra cuando un subagente termina y devuelve su resultado a la conversación que lo inició. Úselo para acumular el uso de herramientas y tiempo de ejecución por tipo de subagente; para acumulaciones de tokens o costo, use el contador de tokens y contador de costo filtrados a query_source "subagent", ya que el total_tokens de este evento cubre solo la solicitud final. La categoría "subagent" también cuenta solicitudes de hooks basados en agentes, que no emiten evento de subagente.
Nombre del evento: claude_code.subagent_completed
Atributos:
- Todos los atributos estándar
event.name:"subagent_completed"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosagent_type: El tipo de subagente. Los nombres de agentes integrados y los agentes de plugins del mercado oficial aparecen literalmente; otros nombres de agentes se reemplazan con"custom"a menos queOTEL_LOG_TOOL_DETAILS=1esté establecidoagent.source: De dónde vino la definición del agente:built-in,plugin, o la fuente de configuración que definió un agente personalizado, comouserSettingsoprojectSettingsis_built_in: Si el subagente es un tipo de agente integradois_async: Si el subagente se ejecutó en segundo planototal_tokens: La huella de tokens de la solicitud de API final del subagente: esa solicitud única de entrada, creación de caché, lectura de caché y tokens de salida, aproximadamente el tamaño de contexto del subagente al completarse. No es una suma en toda la ejecucióntotal_tool_uses: Número de llamadas de herramienta que realizó el subagente en toda la ejecuciónduration_ms: Tiempo de ejecución en milisegundosmodel: El modelo en el que se resolvió el subagente para ejecutarsefinal_model: El modelo que produjo la respuesta final del subagente, que difiere demodeldespués de un cambio a mitad de ejecución como una alternativa. Requiere Claude Code v2.1.212 o posteriormodel_swapped: Si más de un modelo sirvió las solicitudes del subagente. Requiere Claude Code v2.1.212 o posteriorplugin_id_hash,plugin.name: Presente para agentes proporcionados por plugins. Los nombres de plugins del mercado oficial aparecen literalmente; otros nombres de plugins se reemplazan con"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1esté establecido
Evento de encuesta de retroalimentación
Se registra cuando se muestra o se responde una encuesta de calidad de sesión. Consulte Encuestas de calidad de sesión para ver qué recopilan las encuestas y cómo controlarlas.
Nombre del evento: claude_code.feedback_survey
Atributos:
- Todos los atributos estándar
event.name:"feedback_survey"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosevent_type: Evento del ciclo de vida de la encuesta, por ejemplo"appeared","responded", o"transcript_prompt_appeared"appearance_id: ID único que vincula los eventos emitidos para una instancia de encuestasurvey_type: Qué encuesta produjo el evento."session"es el mensaje de calificación "¿Cómo está Claude?"response: La selección del usuario en eventosrespondedenabled_via_override:truecuandoCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELestá establecido. Se emite como booleano, no como cadena. Presente en eventos de encuestasession. Filtre en este atributo para confirmar que la anulación se aplica en toda una flota
Evento de barrido de retención
Se registra una vez por ejecución del barrido de limpieza de retención, que elimina transcripciones de sesión y otros datos de aplicación más antiguos que la configuración cleanupPeriodDays. Claude Code ejecuta el barrido en el fondo como máximo una vez por sesión, y una ejecución que no elimina nada aún emite el evento. Si Claude Code ejecutó el barrido en cualquier sesión en la misma máquina en las últimas 24 horas, retrasa el barrido de esta sesión al menos 10 minutos, por lo que una sesión que sale antes no emite nada. Cuando ejecuta claude -p con --bare, Claude Code no ejecuta el barrido y no emite nada.
Como todos los eventos OTel en esta página, solo va al backend de telemetría que configura. Requiere Claude Code v2.1.227 o posterior.
Cuando Claude Code no puede determinar de forma segura el período de retención, pausa el barrido y emite el evento con result establecido en "skipped" y un skip_reason. Cuando configuración gestionada establece cleanupPeriodDays, el valor gestionado fija el período de retención y el barrido se ejecuta incluso cuando un archivo de configuración en un alcance de prioridad más baja está roto o es inválido. Cuando managed-settings.json en sí no se puede leer, Claude Code aún pausa el barrido a menos que el nivel gestionado suministre cleanupPeriodDays desde otro lugar, como configuración gestionada por servidor o un drop-in managed-settings.d/ junto al archivo roto. Los atributos del contador de eliminación están presentes solo cuando result es "complete".
Nombre del evento: claude_code.retention_sweep
Atributos:
- Todos los atributos estándar
event.name:"retention_sweep"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventosresult:"complete"cuando el barrido se ejecutó,"skipped"cuando Claude Code lo pausóperiod_days: El valorcleanupPeriodDaysde la configuración fusionada, en días, o30cuando ninguna fuente lo establece. En eventos omitidos, el valor que el barrido habría utilizado, calculado a partir de las fuentes de configuración que Claude Code pudo leerused_default:"true"cuando ninguna fuente de configuración legible establececleanupPeriodDays,"false"de lo contrario. En eventos completos,"true"significa que se aplicó el predeterminado de 30 díasskip_reason: Por qué Claude Code pausó el barrido. Presente solo cuandoresultes"skipped":"user_source_disabled": La configuración del usuario está excluida, por ejemplo por la bandera--setting-sourceso la opciónsettingSourcesdel SDK, y ninguna fuente habilitada proporcionacleanupPeriodDays"settings_unknowable": Un archivo de configuración no se pudo leer o analizar, por lo quecleanupPeriodDaysodesktopSessionCleanupPeriodDayspueden estar establecidos en un valor que Claude Code no puede ver"settings_invalid_key_set": La configuración tiene errores de validación ycleanupPeriodDaysodesktopSessionCleanupPeriodDaysestá explícitamente establecido, por lo que recurrir al predeterminado podría eliminar o mantener archivos contra esa configuración
transcripts_deleted: Número de transcripciones de sesión, los archivos de nivel superior~/.claude/projects/*/*.jsonl, que el barrido eliminótranscripts_exempted_desktop: Número de transcripciones pasadas el período de retención que el barrido mantuvo bajo la regla de Claude Desktop y Cowork. Estos no cuentan haciafiles_past_cutoff. Requiere Claude Code v2.1.248 o posteriorsession_files_deleted: Número de artefactos que el barrido de archivos de sesión eliminó: transcripciones más archivos complementarios por sesión como barras laterales, grabaciones y resultados de herramientasartifacts_deleted: Total de elementos que el barrido eliminó en todos los directorios de datos que cubre, incluidos los archivos de sesión. Algunos barridos cuentan un árbol de directorios completo eliminado como un elemento y algunos pases de limpieza no contribuyen al contador, por lo que trate el valor como un piso en lugar de un conteo exacto de archivosfiles_retained_fresh: Archivos inspeccionados y dejados en su lugar porque aún están dentro del período de retención. Solo los barridos por archivo cuentan estos, por lo que el valor es un piso; un valor distinto de cero es el estado estable normalfiles_past_cutoff: Archivos más antiguos que el período de retención que el barrido no pudo eliminar, por ejemplo debido a un error de permiso o un archivo mantenido abierto. Un valor superior a cero significa que los archivos sobrevivieron al período de retención configurado; cero no es prueba de que ninguno lo hizo, porque una eliminación fallida de un directorio completo cuenta haciaerror_counten su lugarerror_count: Número de errores que el barrido encontró mientras listaba o eliminaba archivos
Evento de configuración gestionada resuelta
Se registra con la configuración gestionada que una sesión resolvió: una vez al inicio de la sesión, nuevamente cuando la configuración gestionada o el asistente de política cambia de estado durante la sesión, y cuando Claude Code se niega a iniciar o termina la sesión por una de las razones que el atributo error.type lista.
Use este evento para encontrar máquinas ejecutándose en una fuente gestionada inesperada, máquinas cuyo asistente de política está fallando, y la razón por la que una máquina se negó a iniciar.
Requiere Claude Code v2.1.274 o posterior.
Por defecto, el evento lleva las fuentes gestionadas y el estado del asistente de política pero no la configuración en sí. Para agregar el atributo managed_settings.settings redactado y el resumen managed_settings.resolved_sha256, establezca OTEL_LOG_MANAGED_SETTINGS=1:
- Establézcalo en el bloque
envde configuración gestionada, configuración del usuario, o--settings, o en el entorno con el que inicia Claude Code. Un valor en configuración de proyecto o local no lo activa, porque un repositorio clonado puede escribirlos. - La configuración gestionada por servidor puede establecerlo sin mostrar el diálogo de aprobación de seguridad, porque la variable solo agrega su propia política redactada de la organización a un evento que su organización ya recibe.
En una sesión interactiva en una carpeta que no ha confiado, Claude Code no exporta el evento de rechazo.
Nombre del evento: claude_code.managed_settings_resolved
Atributos:
-
Todos los atributos estándar
-
event.name:"managed_settings_resolved" -
event.timestamp: Marca de tiempo ISO 8601 -
event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventos -
managed_settings.trigger:"startup"para el evento de inicio de sesión,"change"cuando la configuración gestionada o el estado del asistente de política cambió más tarde en la sesión, o"refused"cuando una política de configuración gestionada detuvo la sesión. Claude Code envía un eventochangesolo cuando un atributo difiere del último evento que envió, y un valor de configuración cambiado cuenta incluso cuandoOTEL_LOG_MANAGED_SETTINGSestá desactivado -
error.type: por qué Claude Code detuvo la sesión. Presente solo en eventosrefused:"helper_failed": una ejecución del asistente de política falló"policy_invalid": la configuración gestionada contiene un error que detiene a Claude Code de iniciar, o una fuente de administrador no se pudo cargar, por lo que Claude Code no puede verificar la aplicación de inicio de sesión de la organización"consent_rejected": el usuario rechazó el diálogo de aprobación de seguridad para configuración gestionada por servidor"force_refresh_failed": la búsqueda de configuración queforceRemoteSettingsRefreshrequiere falló"gateway_rejected": una puerta de enlace de aplicaciones Claude respondió a la carga de configuración gestionada con HTTP 403"version_below_minimum": esta versión de Claude Code está por debajo derequiredMinimumVersiono por encima derequiredMaximumVersion"_OTHER": la carga de configuración gestionada de la puerta de enlace de aplicaciones Claude falló por otra razón
-
managed_settings.sources: cada fuente gestionada que entrega al menos una clave de política, prioridad más alta primero, incluidas fuentes cuyas claves no tienen efecto bajofirst-wins. Los valores son"remote","plist"o"hklm"para la política de MDM o nivel de SO,"file"para archivos de configuración gestionada y drop-ins,"parent"cuando un host de incrustación suministra configuración, y"hkcu"para el valor del registro HKCU de Windows cuando Claude Code lo lee. Una fuente que lleva solo claves de control, o que Claude Code no pudo leer, no está listada. Se emite como una matriz de cadenas, vacía cuando ninguna fuente gestionada entrega una clave de política -
managed_settings.source_behavior: el valormanagedSourcesBehaviorque Claude Code leyó,"first-wins"o"merge"."first-wins"cuando ninguna fuente establece la clave -
managed_settings.helper.state: estado del asistente de política que la fuente de MDM o archivo seleccionada configura:"ok": la salida del asistente sirve como la configuración gestionada"bad_path","not_a_file","exit_nonzero","timed_out","oversize","parse_failed","envelope_invalid", o"schema_rejected": la última ejecución del asistente falló. Fallos del asistente describe los casos"none": ningún asistente está configurado, o la fuente que lo configura no es una política de MDM o archivo de configuración gestionada
-
managed_settings.helper.applied:"output"mientras la salida propia del asistente sirve como la configuración gestionada,"none"cuando no lo hace -
managed_settings.helper.entry:"policyHelper"cuando Claude Code seleccionó unpolicyHelper. Ausente cuando no seleccionó ningún asistente. -
managed_settings.helper.path: lapathconfigurada del asistente. Presente siempre que Claude Code seleccionó un asistente, independientemente de siOTEL_LOG_MANAGED_SETTINGSestá establecido -
managed_settings.resolved_sha256(cuandoOTEL_LOG_MANAGED_SETTINGS=1): SHA-256 de la configuración gestionada resuelta antes de la redacción, serializada como JSON con claves ordenadas recursivamente y sin espacios en blanco. Las máquinas con el mismo resumen ejecutan la misma política. Claude Code envía el resumen solo con la opción de participación porque una política corta se puede recuperar codificando adivinanzas. Ausente cuando no se resolvió configuración gestionada, y en eventosrefused -
managed_settings.settings(cuandoOTEL_LOG_MANAGED_SETTINGS=1): los nombres y forma de la configuración gestionada resuelta como una cadena JSON, con los valores redactados. Ausente en eventosrefused. Claude Code lo construye a partir de su esquema de configuración:- Un nombre de configuración que el esquema declara se exporta, y una clave que no declara se deja fuera
- Booleanos, números y valores de cadena que el esquema restringe a un conjunto fijo de opciones, como
permissions.defaultMode, se exportan tal cual.sandbox.network.httpProxyPortysandbox.network.socksProxyPortse exportan como"[REDACTED]" - Cada otra cadena, como
model,apiKeyHelper, cada valorenv, cada URL, y cada comando, se exporta como"[REDACTED]" - Los nombres de entrada de mapas, como nombres de variables
enve IDs de plugins, se exportan tal cual. Una configuración cuyas entradas el esquema no escribe, comovimInsertModeRemaps, se exporta como un único"[REDACTED]", ysandbox.ignoreViolationsse exporta como una lista de sus listas de rutas sin los patrones de comando - Una lista mantiene su longitud, con cada entrada redactada por las mismas reglas
- Una regla
permissions.allow,permissions.deny, opermissions.askse exporta como su nombre de herramienta con el contenido redactado, comoRead([REDACTED]), cuando la herramienta está integrada en esta versión de Claude Code o es una referenciamcp__comomcp__jira__create_issue. Cualquier otra regla se exporta como"[REDACTED]" - Los hooks siguen las mismas reglas, por lo que los campos de opción fija y numéricos como
typeytimeoutse muestran, mientras que cada comando, URL,matcher, y condiciónifse exporta como"[REDACTED]"
Por ejemplo, la configuración gestionada con
apiKeyHelper, dos variablesenv, y una regla de denegar se exporta como{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}.Claude Code corta el valor en 8 KB de UTF-8, y el valor cortado no es JSON válido
-
managed_settings.settings_truncated(cuandomanaged_settings.settingsestá presente):truecuando Claude Code cortómanaged_settings.settingsen 8 KB,falsede lo contrario. Se emite como booleano, no como cadena
Interpretar datos de métricas y eventos
Las métricas y eventos exportados admiten una variedad de análisis:
Monitoreo de uso
| Métrica | Oportunidad de Análisis |
|---|---|
claude_code.token.usage |
Desglosar por type (entrada/salida), usuario, equipo, modelo, skill.name, plugin.name, o agent.name |
claude_code.session.count |
Rastrear adopción y compromiso a lo largo del tiempo |
claude_code.lines_of_code.count |
Medir productividad rastreando adiciones y eliminaciones de código, desglosado por modelo |
claude_code.commit.count & claude_code.pull_request.count |
Entender el impacto en los flujos de trabajo de desarrollo |
Monitoreo de costos
La métrica claude_code.cost.usage ayuda con:
- Rastrear tendencias de uso entre equipos o individuos
- Identificar sesiones de alto uso para optimización
- Atribuir gastos a habilidades, plugins, o tipos de subagente específicos a través de los atributos
skill.name,plugin.name, yagent.name
Las métricas de costo son aproximaciones. Para datos de facturación oficiales, consulte su proveedor de API (Claude Console, Amazon Bedrock, o Google Cloud's Agent Platform).
Claude Code cuenta cada respuesta de transmisión hacia las métricas de costo y token exactamente una vez, incluyendo cuando una puerta de enlace o proxy detrás de ANTHROPIC_BASE_URL transmite el uso progresivamente a través de múltiples fotogramas. Antes de v2.1.214, las transmisiones que llevaban uso en más de un fotograma inflaban claude_code.cost.usage y claude_code.token.usage aproximadamente una solicitud completa adicional por fotograma adicional.
Alertas y segmentación
Alertas comunes a considerar:
- Picos de costo
- Consumo inusual de tokens
- Alto volumen de sesiones de usuarios específicos
Todas las métricas pueden segmentarse por los atributos estándar. El atributo model está disponible en claude_code.token.usage, claude_code.cost.usage, y a partir de v2.1.172, claude_code.lines_of_code.count.
Los desgloses por modelo de confirmaciones solo pueden aproximarse uniéndose contra las métricas de token o costo en session.id, ya que una sesión puede abarcar múltiples modelos. Filtre el lado de token o costo a filas donde query_source es "main" para que las solicitudes auxiliares y de subagente no atribuyan los compromisos de la sesión a un modelo que no los realizó.
Detectar agotamiento de reintentos
Claude Code reintenta solicitudes de API fallidas internamente y emite un único evento claude_code.api_error solo después de rendirse, por lo que el evento en sí es la señal terminal para esa solicitud. Los intentos de reintento intermedios no se registran como eventos separados.
El atributo attempt en el evento registra el número total de intentos. CLAUDE_CODE_MAX_RETRIES tiene un valor predeterminado de 10 y está limitado a 15. A partir de v2.1.199, puede establecer CLAUDE_CODE_RETRY_WATCHDOG para aumentar el valor predeterminado y eliminar el límite.
Cuando la solicitud agota todos los reintentos en un error transitorio, attempt es igual a uno más que ese límite efectivo: 11 por defecto, y nunca más de 16 a menos que el vigilante esté configurado. Un valor más bajo indica un error no reintentable como una respuesta 400, o una causa con su propio presupuesto de reintento más pequeño. Por ejemplo, Claude Code reintenta una falla al cargar credenciales de AWS o Google Cloud como máximo dos veces.
Para distinguir una sesión que se recuperó de una que se estancó, agrupe eventos por session.id y verifique si existe un evento api_request posterior después del error.
Análisis de eventos
Los datos de eventos proporcionan información detallada sobre las interacciones de Claude Code:
Patrones de Uso de Herramientas: analice eventos de resultado de herramientas para identificar:
- Herramientas más utilizadas frecuentemente
- Tasas de éxito de herramientas
- Tiempos de ejecución promedio de herramientas
- Patrones de error por tipo de herramienta
Monitoreo de Rendimiento: rastree duraciones de solicitudes de API y tiempos de ejecución de herramientas para identificar cuellos de botella de rendimiento.
Auditar eventos de seguridad
Los eventos de OpenTelemetry son la fuente de datos de auditoría para la actividad de Claude Code. Cada evento lleva atributos de identidad que vinculan llamadas de herramientas, actividad MCP y decisiones de permisos al usuario que las desencadenó. El exportador de registros OTLP puede entregar estos eventos a cualquier plataforma de Gestión de Información y Eventos de Seguridad (SIEM) con un receptor OTLP, o a un Recopilador de OpenTelemetry que reenvíe a su SIEM.
Atribuir acciones a usuarios
Los atributos estándar en cada evento incluyen la identidad del usuario autenticado: user.email, user.account_uuid, user.account_id, y organization.id cuando se inicia sesión con una cuenta de Claude o, en una sesión en la nube, cuando las credenciales propias de la sesión las llevan, más user.id y el session.id por sesión. user.id es un identificador con alcance de instalación, excepto en sesiones de Claude apps gateway, donde es el asunto del IdP del token emitido por la puerta de enlace.
Las llamadas de herramientas MCP, comandos Bash y ediciones de archivos se atribuyen por lo tanto al desarrollador que inició la sesión. Claude Code no actúa bajo una cuenta de servicio separada; la identidad registrada en cada evento es la propia cuenta de Claude del desarrollador, o la identidad del IdP del desarrollador en una sesión de Claude apps gateway.
Cuando Claude Code se autentica con una clave de API directa, o contra Amazon Bedrock, Google Cloud's Agent Platform, o Microsoft Foundry, no hay cuenta de Claude en la sesión y solo user.id y session.id se rellenan. En estas implementaciones, adjunte la identidad del usuario usted mismo con OTEL_RESOURCE_ATTRIBUTES, establecido por usuario a través del archivo de configuración administrada o un contenedor de lanzamiento. Las sesiones de Claude apps gateway no necesitan nada de esto: la CLI marca la identidad del IdP automáticamente, como se describe en Atributos estándar.
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
Auditar actividad MCP
Para capturar la actividad del servidor MCP con detalle completo de llamadas, habilite el exportador de registros y establezca OTEL_LOG_TOOL_DETAILS=1. Cada operación MCP produce entonces eventos estructurados que llevan el nombre del servidor, nombre de la herramienta y argumentos de llamada junto con los atributos de identidad estándar:
| Evento | Qué registra para MCP |
|---|---|
mcp_server_connection |
Conexión del servidor, desconexión y fallo de conexión con server_name, transport_type, server_scope, y detalle de error |
tool_result |
Cada llamada de herramienta MCP con tool_name y mcp_server_scope, una carga útil tool_parameters que contiene mcp_server_name y mcp_tool_name, y una carga útil tool_input que contiene los argumentos de llamada |
tool_decision |
Si la llamada fue permitida o denegada, si la decisión provino de configuración, un hook, o el usuario, y una carga útil tool_parameters que contiene mcp_server_name y mcp_tool_name |
Sin OTEL_LOG_TOOL_DETAILS, estos eventos descartan el detalle de identificación:
tool_result: mantienemcp_server_scopey untool_nameredactado al literal"mcp_tool"para servidores configurados por el usuario, omite contenido de argumentos. Para los servidores integrados de Claude Desktop, en sesiones que Claude Desktop posee, también mantiene el parmcp_server_name/mcp_tool_namedentro detool_parameters, la misma excepción autorizada por el host quetool_decision, requiere Claude Code v2.1.214 o posteriortool_decision: mantienetool_sourcey untool_nameredactado al literal"mcp_tool"para servidores configurados por el usuario, omite contenido de argumentos. Para los servidores integrados de Claude Desktop, en sesiones que Claude Desktop posee, también mantiene el parmcp_server_name/mcp_tool_namedentro detool_parameters;tool_sourcey el par de nombres requieren Claude Code v2.1.214 o posteriormcp_server_connection: omiteserver_namey el mensaje de error, pero mantieneis_plugin,plugin_id_hash, yplugin.name, con nombres de plugins que no son de Anthropic redactados al literal"third-party", por lo que los servidores proporcionados por plugins siguen siendo distinguibles sin registro detallado
Mapear preguntas de seguridad a eventos
Al construir reglas de detección, busque la señal que desea monitorear y consulte su backend para el evento correspondiente y atributos:
| Señal | Evento | Atributos Clave |
|---|---|---|
| Llamada de herramienta permitida o denegada, y por qué | tool_decision |
decision, source, tool_name, tool_parameters |
| Escalada de modo de permiso | permission_mode_changed |
from_mode, to_mode, trigger |
| Hook de política bloqueó una acción | hook_execution_complete |
hook_event, num_blocking |
| Inicio de sesión, cierre de sesión y fallo de autenticación | auth |
action, success, error_category |
| Conexión del servidor MCP o fallo | mcp_server_connection |
status, server_name, is_plugin, error_code |
| Plugin instalado y su origen | plugin_installed |
plugin.name, marketplace.name, marketplace.is_official |
| Comandos ejecutados y archivos tocados | tool_result (ejecutado) o tool_decision (rechazado) con OTEL_LOG_TOOL_DETAILS=1 |
tool_parameters; tool_input (tool_result solo) |
| Qué fuentes de configuración administrada ejecuta una máquina, si su asistente de política es saludable y por qué una máquina rechazó iniciar | managed_settings_resolved |
managed_settings.trigger, managed_settings.sources, managed_settings.source_behavior, managed_settings.helper.state, error.type; managed_settings.settings y managed_settings.resolved_sha256 con OTEL_LOG_MANAGED_SETTINGS=1 |
Claude Code emite solo el flujo de eventos sin procesar. La detección de anomalías, establecimiento de línea base, correlación entre sesiones y alertas son responsabilidad de su SIEM o backend de observabilidad.
Enviar eventos a un SIEM
Apunte OTEL_EXPORTER_OTLP_LOGS_ENDPOINT al receptor OTLP de su SIEM, o a un Recopilador de OpenTelemetry que reenvíe a la API de ingesta nativa de su SIEM. El siguiente ejemplo de configuración de ajustes administrados exporta solo eventos, con detalle completo de herramientas habilitado para auditoría de MCP y Bash:
{
"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"
}
}
Para confirmar que los eventos llegan, envíe un mensaje en una sesión que se ejecute bajo esta configuración y verifique su SIEM para el evento claude_code.user_prompt. Si nada llega, ejecute claude --debug y verifique el registro de depuración para errores de exportación [3P telemetry].
Consideraciones de backend
Tu elección de backends de métricas, registros y trazas determina los tipos de análisis que puedes realizar:
Para métricas
- Bases de datos de series temporales: Cálculos de tasa, métricas agregadas
- Almacenes columnares: Consultas complejas, análisis de usuario único
- Plataformas de observabilidad completas: Consultas avanzadas, visualización, alertas
Para eventos/registros
- Sistemas de agregación de registros: Búsqueda de texto completo, análisis de registros
- Almacenes columnares: Análisis de eventos estructurados
- Plataformas de observabilidad completas: Correlación entre métricas y eventos
Para trazas
Elige un backend que admita almacenamiento de trazas distribuidas y correlación de spans:
- Sistemas de trazas distribuidas: Visualización de spans, cascadas de solicitudes, análisis de latencia
- Plataformas de observabilidad completas: Búsqueda de trazas y correlación con métricas y registros
Para organizaciones que requieren métricas de Usuarios Activos Diarios/Semanales/Mensuales (DAU/WAU/MAU), considera backends que admitan consultas de valores únicos eficientes.
Información del servicio
Todas las métricas y eventos se exportan con los siguientes atributos de recurso:
service.name:claude-codepara sesiones de terminal,claude-code-desktoppara sesiones iniciadas desde la pestaña Code en la aplicación Claude Desktopservice.version: Versión actual de Claude Code, o la versión de la aplicación Desktop para sesiones de la pestaña Codeos.type: Tipo de sistema operativo (por ejemplo,linux,darwin,windows)os.version: Cadena de versión del sistema operativohost.arch: Arquitectura del host (por ejemplo,amd64,arm64)wsl.version: Número de versión de WSL (solo presente cuando se ejecuta en Windows Subsystem for Linux)- Nombre del Medidor:
com.anthropic.claude_code
Si sus canalizaciones de recopilador o paneles filtran por service.name = claude-code, agregue claude-code-desktop al filtro para capturar también la telemetría de sesiones de la pestaña Code.
Recursos de medición de ROI
Para una guía completa sobre cómo medir el retorno de inversión para Claude Code, incluyendo configuración de telemetría, análisis de costos, métricas de productividad e informes automatizados, consulta la Guía de Medición de ROI de Claude Code. Este repositorio proporciona configuraciones de Docker Compose listas para usar, configuraciones de Prometheus y OpenTelemetry, y plantillas para generar informes de productividad integrados con herramientas como Linear.
Seguridad y privacidad
- La exportación de OpenTelemetry a tu backend es opcional y requiere configuración explícita. Para la telemetría operativa separada de Anthropic y cómo deshabilitarla, consulta Uso de datos
- Los contenidos de archivos sin procesar y fragmentos de código no se incluyen en métricas o eventos. Las trazas de span son una ruta de datos separada: consulta la viñeta
OTEL_LOG_TOOL_CONTENTa continuación - Cuando está autenticado a través de OAuth,
user.emailse incluye en atributos de telemetría, enviados solo al punto final de OTel que configures, nunca a Anthropic. Si esto es una preocupación para tu organización, trabaja con tu backend de telemetría para filtrar o redactar este campo - El contenido del mensaje del usuario no se recopila por defecto. Solo se registra la longitud del mensaje. Para incluir contenido del mensaje, establece
OTEL_LOG_USER_PROMPTS=1. Bajo el rastreo beta detallado, esta variable llega más lejos que el texto del mensaje: también controla el atributo de spannew_context, que lleva resultados de herramientas en el spanclaude_code.llm_request - El texto de respuesta del asistente no se recopila por defecto. Solo se registra la longitud de la respuesta. Para incluir texto de respuesta, establece
OTEL_LOG_ASSISTANT_RESPONSES=1. Como todos los datos de OpenTelemetry de Claude Code, el texto de respuesta se envía solo al punto final de OTel que configures, nunca a Anthropic. Cuando esta variable no está establecida,OTEL_LOG_USER_PROMPTSse utiliza como alternativa, así que estableceOTEL_LOG_ASSISTANT_RESPONSES=0si deseas contenido de mensaje sin contenido de respuesta - Los argumentos de entrada de herramientas y parámetros no se registran por defecto. Para incluirlos, establece
OTEL_LOG_TOOL_DETAILS=1. Para los servidores integrados de Claude Desktop, en sesiones que Claude Desktop posee,tool_decisionytool_resultllevan el parmcp_server_name/mcp_tool_name, nombres creados por el host en lugar de contenido de argumentos, incluso con la bandera desactivada. La excepción requiere Claude Code v2.1.214 o posterior. Estos datos se envían solo al punto final de OTEL que configures, nunca a Anthropic. Los argumentos aún pueden contener valores sensibles, así que configura tu backend de telemetría para filtrar o redactar estos atributos según sea necesario. Cuando está habilitado:- Los eventos
tool_resultytool_decisionincluyen un atributotool_parameterscon comandos Bash, nombres de servidor MCP y herramienta, y nombres de skills. Los campos comofull_commandse emiten sin truncar - Los eventos
tool_resultademás incluyen un atributotool_inputcon rutas de archivo, URLs, patrones de búsqueda y otros argumentos. Los valores individuales superiores a 512 caracteres se truncan y el total está limitado a aproximadamente 4 K caracteres - Los eventos
user_promptincluyen elcommand_nameverbatim para comandos personalizados, de plugin y MCP - Los spans de traza incluyen el mismo atributo
tool_inpute atributos derivados de entrada comofile_path, con el mismo truncamiento quetool_input
- Los eventos
- El contenido de herramientas no se registra en spans de trazas por defecto. Para incluirlo, establece
OTEL_LOG_TOOL_CONTENT=1. El spanclaude_code.toolentonces lleva un evento de spantool.outputcon contenidos de archivo sin procesar y salida de comandos Bash, truncado en el límite de contenido (60 KB por defecto) por atributo. El contenido de herramientas también llega a los spans a través denew_context, cuya puerta difiere por span. Configura tu backend de telemetría para filtrar o redactar estos atributos según sea necesario - Los cuerpos de solicitud y respuesta de la API de Mensajes de Anthropic sin procesar no se registran por defecto. Para incluirlos, establece
OTEL_LOG_RAW_API_BODIESen tu shell, configuración de usuario o configuración administrada. Se ignora en configuración de proyecto y local. Los cuerpos contienen el historial de conversación completo, incluido el mensaje del sistema, cada turno anterior de usuario y asistente, y resultados de herramientas, así que habilitar esto implica consentimiento a todo lo que las otras banderas de contenidoOTEL_LOG_*revelarían. Claude Code siempre redacta el contenido de pensamiento extendido de Claude de estos cuerpos, independientemente de otras configuraciones. El valor que estableces determina cómo Claude Code entrega los cuerpos:-
Con
=1, Claude Code emite eventos de registroapi_request_bodyyapi_response_bodypara cada llamada de API. El atributobodyde los eventos lleva la carga útil serializada en JSON, truncada en el límite de contenido (60 KB por defecto) -
Con
=file:<dir>, Claude Code escribe cuerpos sin truncar en archivos.request.jsony.response.jsonbajo ese directorio, y los eventos llevan una rutabody_refen su lugar del cuerpo en línea. Envía el directorio con un recopilador de registros o sidecar en lugar de a través del flujo de telemetría.Para cada respuesta exitosa, Claude Code también añade una línea a
index.jsonlen ese directorio, vinculando el archivo de respuesta al archivo de solicitud que lo produjo y al mensaje de transcripción en el que se convirtió. Cada línea no contiene contenido de mensaje, y la sección evento de cuerpo de respuesta de API enumera sus campos. El archivo de índice requiere Claude Code v2.1.274 o posterior
-
Monitorear Claude Code en Amazon Bedrock
Para orientación detallada sobre monitoreo de uso de Claude Code para Amazon Bedrock, consulta Implementación de Monitoreo de Claude Code (Amazon Bedrock).