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 de OpenTelemetry.
[!NOTE]
Para la API de Claude o Managed Agents, consulta OpenTelemetry para la API de Claude.
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, inicia Claude Code con claude --debug-file <path> y comprueba el registro que escribe en esa ruta. 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"
}
}
En la aplicación Claude Desktop, las sesiones de la pestaña Code leen estos ajustes administrados de las fuentes que llegan a cada tipo de sesión de Desktop. El formulario de OpenTelemetry para Cowork bajo Monitoring en los ajustes de Datos y privacidad de la consola de administrador se aplica solo a sesiones de Cowork, por lo que ni la CLI de terminal ni la pestaña Code exportan a un recopilador que establezca allí.
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 en el registro de depuración. 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 establece 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 establece 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, consulte 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. Use none para deshabilitar |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
Tipos de exportador de registros/eventos, separados por comas. Use none para deshabilitar |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protocolo para el exportador OTLP, se aplica a todas las señales. Claude Code no tiene protocolo predeterminado, así que establezca esto o la variable de protocolo específica de la señal para cada exportador otlp que habilite |
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 el registro del contenido del mensaje del usuario (predeterminado: deshabilitado) | 1 para habilitar |
OTEL_LOG_ASSISTANT_RESPONSES |
Habilitar el 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 |
1 para habilitar, 0 para mantener redactado |
OTEL_LOG_TOOL_DETAILS |
Habilitar el registro de parámetros de herramientas y argumentos de entrada en eventos de herramientas y atributos de tramo: comandos Bash, nombres de servidores MCP y herramientas, nombres de skills, nombres de flujos de trabajo creados por el usuario y entrada de herramientas. También habilita nombres de comandos personalizados, de plugins y MCP en eventos user_prompt, y nombres reales de agentes, skills, plugins y servidores y herramientas MCP en los contadores de costo y tokens (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 el registro del contenido de la herramienta en el evento de tramo tool.output (predeterminado: deshabilitado). Los atributos de tramo llevan contenido de herramientas bajo sus propias compuertas. Requiere tracing. El contenido se trunca en el límite de contenido (60 KB de forma predeterminada) |
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 la configuración del proyecto o local no lo activa. Requiere Claude Code v2.1.274 o posterior | 1 para habilitar |
OTEL_LOG_RAW_API_BODIES |
Emitir la solicitud y respuesta JSON completa de la API de Mensajes de Anthropic como eventos de registro api_request_body / api_response_body (predeterminado: deshabilitado). Los cuerpos incluyen todo el historial de conversación. Habilitar esto implica consentimiento para 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 de forma predeterminada), 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 los atributos que llevan contenido, como respuestas del modelo, contenido de herramientas, prompts 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 valor predeterminado está dimensionado para backends que limitan los valores de atributos a 64 KB; auméntalo solo si tu backend acepta valores más grandes, o redúcelo para disminuir el volumen de telemetría. Cuando un límite de atributos del SDK de OpenTelemetry, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT o una de sus variantes de logrecord y span, se establece en un valor menor, Claude Code trunca en ese valor más pequeño para que el marcador [TRUNCATED ...] permanezca dentro del límite del SDK |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
Preferencia de temporalidad de métricas (predeterminado: delta). Establezca en cumulative si su 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 y http/json, Claude Code envía cada solicitud de exportación con un encabezado Content-Length.
Autenticación mTLS
La forma en que configura certificados de cliente para el exportador OTLP depende del protocolo OTLP en uso para esa señal, establecido mediante OTEL_EXPORTER_OTLP_PROTOCOL o la anulación específica de la 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. Consulte Configuración de red |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY y OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, o las variantes específicas de la 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 específicas de la señal continúan funcionando. En máquinas con configuración administrada, Claude Code puede eliminar credenciales y puntos finales específicos de la señal establecidos por el desarrollador al iniciar.
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 atributos session.id y, en sesiones en la nube, ccr.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.* repository identity attributes 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.
Traces (beta)
El tracing distribuido exporta tramos que vinculan cada mensaje del usuario a las solicitudes de API y ejecuciones de herramientas que desencadena, para que pueda ver una solicitud completa como un único tramo en su backend de tracing.
El tracing está deshabilitado de forma predeterminada. Para habilitarlo, establezca tanto CLAUDE_CODE_ENABLE_TELEMETRY=1 como CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, luego establezca OTEL_TRACES_EXPORTER para elegir dónde se envían los tramos. Los trazos 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 específicos de la señal establecidos por el desarrollador al iniciar.
| Variable de entorno | Descripción | Valores de ejemplo |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
Habilitar tracing de tramos (requerido). ENABLE_ENHANCED_TELEMETRY_BETA también se acepta |
1 |
OTEL_TRACES_EXPORTER |
Tipos de exportador de trazas, separados por comas. Use 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 lotes de tramos en milisegundos (predeterminado: 5000) | 1000, 10000 |
Los tramos redactan el texto del mensaje del usuario, los detalles de entrada de la herramienta y el contenido de la herramienta de forma predeterminada. Establezca OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 y OTEL_LOG_TOOL_CONTENT=1 para incluirlos.
Cuando el tracing está activo, los subprocesos de Bash y PowerShell heredan automáticamente una variable de entorno TRACEPARENT que contiene el contexto de traza W3C del tramo de ejecución de herramienta activo. Esto permite que cualquier subproceso que lea TRACEPARENT coloque sus propios tramos bajo el mismo tramo, habilitando el tracing distribuido de extremo a extremo a través de scripts y comandos que Claude ejecuta.
Cuando el tracing 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 tramo claude_code.llm_request, y el encabezado traceresponse de la API se registra como un vínculo de tramo. Juntos, estos conectan los tramos 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.
De forma predeterminada, 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 mediante el mismo interruptor por coherencia. Si ejecuta Claude Code a través de un proxy ANTHROPIC_BASE_URL personalizado y desea que se propague el contexto de traza, establezca 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 al iniciar cada tramo de interacción. Esto permite que un proceso de incrustación pase su contexto de traza W3C activo al subproceso para que los tramos 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 contenedores.
El contexto de traza entrante también se aplica a eventos. En sesiones de SDK de Agent y -p con TRACEPARENT establecido, cada registro de registro de evento OTLP lleva valores trace_id y span_id que lo unen a la traza de su aplicación, incluso cuando el exportador de trazas no está configurado, para que su 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 tramo de interacción, incluso cuando Claude Code lo emite fuera del contexto asíncrono del tramo, como en una devolución de llamada de una solicitud de permiso o en un registro almacenado en búfer durante el inicio y exportado más tarde. Un registro emitido sin un tramo de interacción activo lleva directamente los IDs del TRACEPARENT entrante.
Jerarquía de tramos
Cada mensaje del usuario inicia un tramo raíz claude_code.interaction. Las llamadas de API, llamadas de herramientas y ejecuciones de hooks se registran como sus hijos. Los tramos de herramientas tienen dos tramos secundarios 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 tramos de API y herramientas del subagente se anidan bajo el tramo claude_code.tool del padre.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (requires detailed beta tracing)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans
En sesiones del SDK de Agent y claude -p, claude_code.interaction en sí se convierte en un hijo del tramo 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 reanuda la sesión y la herramienta se vuelve a ejecutar, los tramos de la herramienta se unen a la traza del turno anterior como hijos del tramo claude_code.interaction del turno.
Atributos de tramo
Cada tramo 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 tramo. Los tramos llm_request, tool.execution y hook establecen el estado ERROR de OpenTelemetry cuando registran una falla; los otros tramos 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 compuerta 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 tramo obtuvo su padre de traza: env cuando se colocó bajo un TRACEPARENT entrante, none cuando inició su propia traza. Requiere Claude Code v2.1.268 o posterior |
|
interaction.duration_ms |
Duración de reloj de pared del turno |
claude_code.llm_request
| Atributo | Descripción | Controlado por |
|---|---|---|
model |
Identificador del 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 tracing 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 que generó este agente, con prefijo wf_. Ausente para agentes no generados por un flujo de trabajo |
|
workflow.name |
Nombre del flujo de trabajo que generó este agente. Los nombres creados por el usuario se reemplazan con custom a menos que la compuerta 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 ningún nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo. Requiere Claude Code v2.1.274 o posterior |
|
llm_request.context |
interaction, tool o standalone dependiendo del tramo padre |
|
duration_ms |
Duración de reloj 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 streaming. Requiere Claude Code v2.1.268 o posterior | |
input_tokens |
Recuento de tokens de entrada del bloque de uso de la API. Excluye los tokens leídos de la caché de prompts o escritos en ella, que se reportan en cache_read_tokens y cache_creation_tokens |
|
output_tokens |
Recuento de tokens de salida | |
cache_read_tokens |
Tokens leídos de la caché de mensajes | |
cache_creation_tokens |
Tokens escritos en la caché de mensajes | |
request_id |
ID de solicitud de API. Mismo valor que el atributo de correlación de eventos request_id event correlation attribute |
|
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 el cliente del intento final |
|
attempt |
Total de intentos 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 |
stop_reason de respuesta de API, 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 cadenas. Convención semántica de GenAI de OpenTelemetry |
Cada intento de reintento también se registra como un evento de tramo 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 literalmente. 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 literalmente. 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 reloj 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, con prefijo wf_. Ausente para agentes no generados por un flujo de trabajo |
|
workflow.name |
Nombre del flujo de trabajo que generó este agente. Los nombres creados por el usuario se reemplazan con custom a menos que la compuerta 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 pueda unir el tramo 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 skill 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 |
Evento de tramo tool.output en claude_code.tool
Si establece OTEL_LOG_TOOL_CONTENT=1, las llamadas de Read y Bash pueden registrar un evento de tramo tool.output en el tramo claude_code.tool. Las llamadas de Edit y Write registran uno solo cuando también establece OTEL_LOG_TOOL_DETAILS=1. Esa variable no está limitada a esas dos herramientas, así que consulte su fila en la tabla de configuración para los argumentos que agrega en otros lugares.
Las herramientas MCP, WebFetch y WebSearch también registran este evento, en Claude Code v2.1.283 o posterior.
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 ningún evento tool.output para:
- Una llamada a cualquier herramienta que no sea Read, Edit, Write, Bash, WebFetch, WebSearch y herramientas MCP
- Una 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 de Edit o Write, a menos que también establezca
OTEL_LOG_TOOL_DETAILS=1 - Una llamada a WebFetch o WebSearch que Claude Code movió a segundo plano mientras se ejecutaba para que un mensaje en espera pudiera llegar a Claude. El resultado que llega más tarde tampoco se registra. Para saber cuándo Claude Code mueve una llamada, consulta Cuándo Claude Code envía lo que pusiste en cola para la terminal y el campo
prioritypara las sesiones del Agent SDK
El evento lleva estos atributos, cada uno truncado en el límite de contenido (60 KB de forma predeterminada). 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 se le pidió a una llamada de Write que escribiera | OTEL_LOG_TOOL_DETAILS para la herramienta Write |
output |
Para la herramienta Bash, la salida combinada del comando, con stderr intercalado en stdout. Para una herramienta MCP, WebFetch o WebSearch, el resultado que la herramienta retornó: bloques de texto unidos por saltos de línea, con una imagen o documento reemplazado por un marcador de posición como [image] |
|
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 tramo 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 tramo padre le indica de qué herramienta provino 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, reject o cancelled, donde cancelled significa que Claude Code dejó de esperar una decisión de permiso sobre la llamada a herramienta y no la ejecutó |
|
source |
Para un accept o reject, de dónde provino la decisión, como config, hook o user_temporary, con los significados indicados en el evento Tool decision. Para un cancelled, qué terminó la espera antes de que se tomara alguna decisión, como user_abort |
Una decisión cancelled con source user_abort significa que un mensaje que necesitaba entrega inmediata interrumpió el turno mientras la solicitud de permiso o la comprobación del modo automático estaba pendiente. Por ejemplo, durante una comprobación del modo automático, el usuario tenía un mensaje en cola y lo envió de inmediato.
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 tramo 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 compuerta 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 tramo aparece solo cuando el tracing 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 sus registros y trazas. Establezca el par en su 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 tracing beta detallado también requiere que su organización esté en la lista de permitidos para la función. 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 reloj de pared de todos los hooks coincidentes | |
num_success |
Recuento de hooks que se completaron exitosamente | |
num_blocking |
Recuento de hooks que retornaron 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 de contenido con tracing beta detallado
[!NOTE]
Atributos adicionales que contienen contenido como
new_context,system_reminders,system_prompt_preview,user_system_prompt,tool_inputyresponse.model_outputse emiten solo cuando el tracing beta detallado está activo. No son parte del esquema de tramo estable.
Estos atributos aparecen en los tramos siguientes, y Controlado por nombra la variable que un atributo necesita además del tracing beta detallado. Los valores más largos que el límite de contenido (60 KB de forma predeterminada) se truncan.
| Atributo | Tramo | Descripción | Controlado por |
|---|---|---|---|
new_context |
claude_code.interaction |
El prompt del usuario | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.llm_request |
Los nuevos mensajes del usuario y resultados de herramientas enviados con la solicitud | OTEL_LOG_USER_PROMPTS |
system_reminders |
claude_code.llm_request |
El texto de los recordatorios del sistema entre los nuevos mensajes de la solicitud | OTEL_LOG_USER_PROMPTS |
system_prompt_preview |
claude_code.llm_request |
Primeros 500 caracteres del prompt del sistema completo enviado con la solicitud | OTEL_LOG_USER_PROMPTS |
user_system_prompt |
claude_code.llm_request |
Solo el texto del prompt del sistema que proporcionas a través de la opción systemPrompt del SDK o los flags --system-prompt y --append-system-prompt. Se emite una vez por sesión en lugar de por solicitud |
OTEL_LOG_USER_PROMPTS |
response.model_output |
claude_code.llm_request |
Texto de la respuesta del modelo a la solicitud | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.tool |
El resultado de la llamada a herramienta, sea cual sea la herramienta | OTEL_LOG_TOOL_CONTENT |
tool_input |
claude_code.tool |
La entrada serializada de la llamada a herramienta | OTEL_LOG_TOOL_DETAILS |
Con el tracing beta detallado y OTEL_LOG_USER_PROMPTS=1, Claude Code también emite un evento claude_code.system_prompt que lleva el prompt del sistema completo, truncado en el límite de contenido. Llega la primera vez que una sesión envía cada prompt del sistema distinto, y de nuevo después de la compactación.
Encabezados dinámicos
Para entornos empresariales que requieren autenticación dinámica, puede 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 específicas de la señal.
Configuración de ajustes
Agregue a su .claude/settings.json, reemplazando la ruta con su propio script:
{
"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 cite 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 asistente falla o imprime salida que no cumple con estos requisitos, las exportaciones fallan y su backend de telemetría no recibe nada de la sesión hasta que el asistente funcione nuevamente. Claude Code reporta la falla en:
- Una notificación de advertencia en sesiones interactivas,
otelHeadersHelper failed; telemetry is not being exported, mostrada una vez por sesión cuando el asistente 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 del asistente de encabezados se ejecuta al inicio y periódicamente después para admitir la actualización de tokens. De forma predeterminada, el script se ejecuta cada 29 minutos. Personalice el intervalo con la variable de entorno CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Soporte de organización de múltiples equipos
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 incluyen en todas las métricas y eventos, permitiéndole:
- 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, puede agrupar y filtrar métricas por sus claves personalizadas directamente. Excepto por los atributos de repositorio vcs.* repository attributes, 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 su backend de métricas. Para enviar atributos personalizados en el bloque de recursos solo y omitirlos de las etiquetas de punto de datos, establezca OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Consulte Control de cardinalidad de métricas.
[!WARNING]
La variable de entorno
OTEL_RESOURCE_ATTRIBUTESutiliza pares clave=valor separados por comas con requisitos de formato estricto:
- Sin espacios permitidos: 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 ASCII de EE.UU. 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, use guiones bajos o camelCase en su lugar. Los siguientes ejemplos establecen
org.namecon cada forma:export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization" export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"Puede 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, noMy Company.
Atribuir la telemetría a las sesiones SSH de Desktop
Para ver en qué máquina remota se ejecutó una sesión SSH de Desktop, nombra cada máquina en un atributo personalizado. Las métricas y los eventos no indican en qué máquina se ejecutó una sesión.
En cada máquina remota, agrega OTEL_RESOURCE_ATTRIBUTES al bloque env que activa la telemetría, en el archivo de configuración administrada que lee la sesión. Escribe el nombre de forma literal en el archivo de cada máquina. Claude Code no expande el valor, así que host.name=$(hostname) llega tal cual, con esos mismos caracteres.
El siguiente ejemplo nombra la máquina build-7:
{
"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_RESOURCE_ATTRIBUTES": "host.name=build-7"
}
}
Cuando nada más establece la variable, host.name llega en el bloque de recursos, tanto en las sesiones SSH de Desktop como en la CLI de esa máquina. Para ver dónde más aparecen los atributos personalizados, consulta Soporte de organización de múltiples equipos.
Si el nombre no llega, comprueba si se debe a una de estas causas:
- Lo estableciste en la computadora que ejecuta Desktop: Desktop no pasa a la sesión SSH un valor que establezcas ahí
- Lo exportaste en
/etc/profileu otro archivo que solo leen los shells de inicio de sesión: el nombre llega cuando ejecutasclaudedesde un shell de inicio de sesión, pero no en una sesión SSH de Desktop. Desktop no inicia Claude Code a través de un shell de inicio de sesión. En su lugar, establece la variable enenven el archivo de configuración administrada de la máquina remota. - Un valor contiene un espacio: en ese caso, Claude Code no copia ninguna de las claves en los eventos ni en los puntos de datos, y no reporta ningún error. Quita el espacio del valor.
- Algo más ya establece la variable: en una sesión que inicia la aplicación de escritorio, una variable ya establecida en el entorno de lanzamiento tiene precedencia sobre los archivos de configuración. El registro de depuración nombra cada variable ignorada. Cuando un despliegue de Desktop de terceros especifica un endpoint OTLP en el entorno que proporciona, ese entorno lleva el propio
OTEL_RESOURCE_ATTRIBUTESde Desktop.
Configuraciones de ejemplo
Establezca estas variables de entorno antes de ejecutar claude. Cada escenario a continuación muestra una configuración completa, y cada variable se describe en Variables de configuración comunes. Para confirmar que una configuración surtió efecto, verifique su backend para la métrica claude_code.session.count después de iniciar una sesión; el Inicio rápido cubre la verificación solo de registros y qué verificar cuando nada llega.
Para depuración de consola con un 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
Telemetría de sesiones en la nube y Claude Tag
Las sesiones en la nube, incluidas las sesiones del canal Claude Tag, se ejecutan en entornos en la nube en lugar de en los dispositivos de sus usuarios, por lo que un archivo de configuración administrado o un perfil de shell en esos dispositivos no configura su telemetría. Para las sesiones en entornos alojados por Anthropic, esta sección cubre dónde establecer las variables de telemetría, cómo hacer que su recopilador sea accesible desde el entorno y cómo distinguir las sesiones en la nube y Claude Tag en los datos exportados.
Para exportar telemetría de esas sesiones, establezca CLAUDE_CODE_ENABLE_TELEMETRY y las variables OTEL_*, utilizando las mismas claves que el ejemplo de configuración del administrador, en uno de dos lugares:
- Configuración administrada por el servidor: agréguelas al bloque
envde la configuración administrada por el servidor de su organización. Claude Code obtiene esa configuración al iniciarse dondequiera que se aplique la configuración administrada por el servidor, lo que incluye las máquinas de sus usuarios y las sesiones en la nube que no sean sesiones del canal Claude Tag. Las sesiones de Claude Tag no reciben su configuración administrada por el servidor, por lo que esta ruta no las configura. - Las variables del entorno: agréguelas a las variables de entorno de un entorno en la nube para configurar solo las sesiones que se ejecutan en ese entorno. Esta es la ruta que llega a las sesiones de Claude Tag.
Cualquiera que use un entorno puede leer sus variables, así que no coloques una credencial allí, como un token de recopilador en OTEL_EXPORTER_OTLP_HEADERS. Un secreto de red en el entorno tampoco ayuda, porque la exportación de telemetría propia de Claude Code es una de las solicitudes que nunca obtienen el secreto. Si tu recopilador requiere una credencial, configura toda la exportación a través de la configuración administrada por el servidor en su lugar, porque cuando estableces una credencial allí, Claude Code elimina las variables de endpoint establecidas fuera de la configuración administrada.
Tenga en cuenta estas restricciones cuando configure la telemetría para sesiones en la nube:
- Permita que las sesiones lleguen al recopilador: Claude Code envía la exportación a través de la red de la sesión, por lo que si llega al host en su
OTEL_EXPORTER_OTLP_ENDPOINTdepende del nivel de acceso de red del entorno. Si las sesiones no pueden llegar al dominio del recopilador en el nivel que eligió, agregue el dominio a la lista de permitidos del entorno, porque ninguna configuración administrada por el servidor agrega dominios a la lista de permitidos de red de un entorno. - Canales de Claude Tag: realiza los cambios en la lista de permitidos y en las variables de entorno en el entorno compartido establecido como predeterminado de tu organización o fijado al canal.
- Cowork se configura por separado: las sesiones de Cowork no reciben la configuración administrada por el servidor, como muestra la tabla de cobertura de superficie, por lo que el bloque
envadministrado por el servidor no configura su telemetría.
Atribuir telemetría a sesiones en la nube
De forma predeterminada, las métricas y eventos de una sesión en la nube llevan los atributos estándar, incluidos session.id, ccr.session.id y organization.id, por lo que puede filtrar por sesión u organización sin configuración adicional. El valor ccr.session.id es el CLAUDE_CODE_REMOTE_SESSION_ID de la sesión. Para convertirlo en la URL de transcripción de la sesión, consulte Vincular salida nuevamente a la sesión.
Para distinguir las sesiones en la nube, agrupa o filtra por ccr.session.id, no por session.id.
Para atribuir telemetría con más detalle, use estas opciones:
- Identificar sesiones de Claude Tag: establezca
OTEL_METRICS_INCLUDE_ENTRYPOINT=true, como se describe en Control de cardinalidad de métricas. Las métricas entonces llevanapp.entrypoint, cuyo valor esclaude-in-slackpara sesiones de Claude Tag. - Agregar atributos personalizados: establezca
OTEL_RESOURCE_ATTRIBUTESen el mismo lugar donde establece las otras variablesOTEL_*para esas sesiones. Si loexporten el script de configuración del entorno en su lugar, el valor no llega a Claude Code: el script de configuración es un script Bash separado que se ejecuta antes de que Claude Code se inicie, y las variables que exporta terminan con él.
En las sesiones del canal Claude Tag, Claude funciona como la identidad compartida de su organización en lugar de como cualquier miembro, así que no confíe en los atributos user.* para identificar quién etiquetó a Claude.
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 |
ID de sesión propio de Claude Code, que /clear reemplaza |
OTEL_METRICS_INCLUDE_SESSION_ID (predeterminado: true) |
ccr.session.id |
Identificador de la sesión en la nube, el valor de CLAUDE_CODE_REMOTE_SESSION_ID, en sesiones que se ejecutan en un entorno en la nube |
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, claude-vscode o claude-in-slack para sesiones de Claude Tag |
OTEL_METRICS_INCLUDE_ENTRYPOINT (predeterminado: false) |
organization.id |
UUID de la organización (cuando hay autenticación) | Siempre incluido cuando está disponible |
user.account_uuid |
UUID de la cuenta (cuando hay autenticación) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true) |
user.account_id |
ID de la cuenta en formato etiquetado que coincide con las API de administración de Anthropic (cuando hay autenticación), como user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true) |
user.id |
Identificador anónimo aleatorio generado en la primera ejecución y guardado en ~/.claude.json. No contiene información personal y no se deriva de tu cuenta de Claude. Eliminar el archivo produce un valor nuevo y no relacionado en la siguiente ejecución. |
Siempre incluido |
user.email |
Dirección de correo electrónico del usuario, obtenida de tu inicio de sesión o, en una sesión en la nube, de las propias credenciales de la sesión | Siempre incluido cuando está disponible |
terminal.type |
Tipo de terminal, como iTerm.app, vscode, cursor o tmux |
Siempre incluido cuando se detecta |
Claves de OTEL_RESOURCE_ATTRIBUTES |
Atributos personalizados que configuras, como department o team.id. Consulta Soporte para organizaciones con varios equipos |
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. Consulta Atributos del repositorio |
OTEL_METRICS_INCLUDE_REPOSITORY (predeterminado: false). Requiere Claude Code v2.1.269 o posterior |
En las sesiones que iniciaron sesión en un gateway de aplicaciones de Claude mediante /login, la CLI marca las exportaciones con la identidad autenticada: user.id es el sujeto del IdP, user.email es el correo con el que se inició sesión y user.groups contiene la pertenencia a grupos del IdP como una cadena separada por comas. Cada exportación también incluye identity.source: gateway-oidc. La identidad del gateway se aplica al final, por lo que las claves user.* e identity.* configuradas mediante OTEL_RESOURCE_ATTRIBUTES se ignoran en esas sesiones.
[!NOTE]
Los eventos que Claude Code registra antes de que un desarrollador inicie sesión no incluyen la identidad del gateway. Cuando Claude Code abre una sesión sin haber iniciado sesión en el gateway, por ejemplo después de que el gateway finaliza el inicio de sesión, los eventos de inicio registrados antes del inicio de sesión incluyen el
user.idanónimo y ningúnidentity.source. Entre ellos estánmanaged_settings_resolved,plugin_loadedymcp_server_connection.
Para los atributos de identidad en sesiones de Claude Desktop y Cowork que se conectan a través de un gateway, consulta la referencia de telemetry del gateway.
Los eventos incluyen además los siguientes atributos. Nunca se adjuntan a las métricas porque provocarían una cardinalidad ilimitada:
prompt.id: UUID que correlaciona un prompt del usuario con todos los eventos posteriores hasta el siguiente prompt. Consulta Atributos de correlación de eventos.workspace.host_paths: directorios del espacio de trabajo del host seleccionados en la aplicación de escritorio, como un arreglo de cadenasworkflow.run_id: identificador de ejecución, con el prefijowf_, en los eventos de API y de herramientas emitidos por agentes que pertenecen a una ejecución de la herramienta Workflow. Filtrar eventos por unworkflow.run_idreconstruye las solicitudes a la API y los resultados de herramientas de esa ejecución. El identificador abarca los agentes que genera el script del flujo de trabajo y cualquier agente que estos generen a su vez, como las invocaciones de skills. Coincide con el identificador de ejecución informado en el resultado de la herramienta Workflow.workflow.name: nombre del flujo de trabajo, elmeta.namede su script, emitido junto conworkflow.run_id. Los nombres de flujos de trabajo integrados aparecen textualmente cuando la ejecución usa el script integrado sin modificar. Los nombres creados por el usuario, incluidas las copias editadas de scripts integrados, se reemplazan porcustoma menos que se configureOTEL_LOG_TOOL_DETAILS=1.agent_id: identificador del subagente que generó el evento, comoa3f2c1b4d5e6f7a80. Los eventos que lo llevan incluyen los eventos de API y de herramientas de un subagente, sus eventosassistant_responseysubagent_completedpara el subagente finalizado. Ausente en los eventos de la sesión principal y de compañeros de equipo en proceso. Elagent_iddel span del subagente es el mismo valor, o agrega una etiqueta después de laainicial, como enacompact-3f2c1b4d5e6f7a80. Requiere Claude Code v2.1.310 o posteriorparent_agent_id: elagent_iddel agente que generó o reanudó por última vez al subagente que generó el evento. Ausente cuando ese agente es la sesión principal. Requiere Claude Code v2.1.310 o posterior
Atributos del repositorio
Configura OTEL_METRICS_INCLUDE_REPOSITORY=true para etiquetar las métricas y los eventos con la identidad del repositorio de la sesión, de modo que un recolector 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 a partir del remoto origin del repositorio. Cuando los remotos HTTPS y SSH de un repositorio indican el mismo host y la misma ruta, como ocurre en GitHub, GitLab y Bitbucket Cloud, ambos producen valores idénticos:
| Atributo | Valor |
|---|---|
vcs.repository.url.full |
La URL del repositorio para el navegador sin .git, como https://github.com/example-org/example-repo |
vcs.owner.name |
La ruta del propietario o grupo, como example-org; se omite cuando la ruta del remoto tiene un solo segmento |
vcs.repository.name |
El nombre simple del repositorio, como example-repo |
vcs.provider.name |
github, gitlab, bitbucket o gitea cuando Claude Code reconoce el host o la forma de la URL del remoto como uno de esos proveedores; se omite en caso contrario |
Los valores se convierten a minúsculas, y las credenciales, las cadenas de consulta y los fragmentos de la URL del remoto 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 que la contiene es tu directorio home.
Para obtener estos atributos desde una sesión en la nube, configura las variables de telemetría, incluida OTEL_METRICS_INCLUDE_REPOSITORY, en su entorno en la nube. Permite también el dominio de tu recolector en el acceso a la red del entorno.
Una clave vcs.* que declares en OTEL_RESOURCE_ATTRIBUTES reemplaza el valor derivado para esa clave. Si declaras vcs.repository.url.full, Claude Code nunca lee el remoto e informa solo las claves que declares.
Si los clones HTTPS y SSH de un mismo repositorio informan valores diferentes, como en una instalación autoalojada cuya URL de clonación HTTPS incluye un prefijo de ruta que la URL SSH no tiene, declara vcs.repository.url.full en OTEL_RESOURCE_ATTRIBUTES junto con todas las demás claves vcs.* que quieras que se informen. Así, cada clon informa la identidad que declares.
Los atributos fluyen solo hacia tus propios exportadores; la telemetría de Anthropic descarta todas las claves vcs.*.
Métricas
Claude Code exporta las siguientes métricas. La columna Unidad muestra la cadena de unidad de OpenTelemetry adjunta a cada métrica; las métricas de conteo no llevan ninguna.
| Nombre de la 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 pull requests creados | ninguna |
claude_code.commit.count |
Número de commits de git creados | ninguna |
claude_code.cost.usage |
Costo de la sesión de Claude Code | USD |
claude_code.token.usage |
Número de tokens usados | tokens |
claude_code.code_edit_tool.decision |
Conteo de decisiones de permisos de herramientas 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 scrape siga siendo un formato de texto de Prometheus válido. Los nombres de las métricas no cambian, y las configuraciones que combinan exportadores, como otlp,prometheus, conservan las unidades.
Detalles de las métricas
Cada métrica incluye los atributos estándar indicados arriba. Las métricas con atributos adicionales específicos del contexto se indican a continuación.
Contador de sesiones
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 panelclaude agents, una interfaz local iniciada por el usuario y no una sesión conversacional. Filtra por este valor para separar los inicios de procesos de interfaz de las sesiones conversacionales en tus paneles.
Contador de líneas de código
Se incrementa cuando se agrega o elimina código.
Atributos:
- Todos los atributos estándar
type: ("added","removed")model: Identificador del modelo que hizo el cambio (por ejemplo, "claude-sonnet-5")
Contador de pull requests
Se incrementa cuando Claude Code crea un pull request o un merge request mediante un comando del shell o una herramienta MCP.
Atributos:
- Todos los atributos estándar
Contador de commits
Se incrementa al crear commits de git mediante Claude Code.
Atributos:
- Todos los atributos estándar
Contador de costos
Se incrementa después de cada solicitud a la API.
Los atributos agent.name, skill.name, plugin.name, mcp_server.name y mcp_tool.name redactan de forma predeterminada algunos nombres a un marcador "custom" o "third-party". Si configuras OTEL_LOG_TOOL_DETAILS=1, contienen los nombres reales. Antes de v2.1.273, los contadores de costos y de tokens y los eventos api_request, api_error y api_refusal contenían los valores redactados incluso con OTEL_LOG_TOOL_DETAILS=1 configurado.
Atributos:
- Todos los atributos estándar
model: Identificador del 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 usó el modo rápido. Ausente en caso contrarioeffort: Nivel de esfuerzo aplicado a la solicitud:"low","medium","high","xhigh"o"max". Ausente cuando Claude Code no envía ningún 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 marketplace oficial aparecen textualmente. Los demás nombres de agentes definidos por el usuario se reemplazan por"custom". Ausente cuando la solicitud no la emitió un tipo de subagente con nombre.skill.name: Skill activo para la solicitud, establecido por la herramienta Skill o un comando/, o heredado por un subagente generado. Los nombres de skills integrados, incluidos, definidos por el usuario y de plugins del marketplace oficial aparecen textualmente. Los nombres de skills de plugins de terceros se reemplazan por"third-party". Ausente cuando no hay ningún skill activo.plugin.name: Plugin propietario cuando el skill o el subagente activo lo proporciona un plugin. Los nombres de plugins del marketplace oficial aparecen textualmente. Los nombres de plugins de terceros se reemplazan por"third-party". Ausente cuando ni el skill ni el subagente tienen un plugin propietario.marketplace.name: Marketplace desde el que se instaló el plugin propietario. Solo se emite para plugins del marketplace oficial, incluso conOTEL_LOG_TOOL_DETAILS=1configurado. Ausente en caso contrario.mcp_server.name: Servidor MCP cuyo resultado de herramienta consumió esta solicitud. Los nombres de servidores integrados, con proxy de claude.ai y del registro oficial aparecen textualmente. Los nombres de servidores configurados por el usuario se reemplazan por"custom". 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 posterior a una llamada a herramienta MCP, no solo en las solicitudes que consumían un resultado de herramienta, por lo que los paneles que lo agregan muestran un descenso después de actualizar.mcp_tool.name: Herramienta MCP cuyo resultado consumió esta solicitud, con el mismo comportamiento de redacción y de 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 a la API.
Atributos:
- Todos los atributos estándar
type: ("input","output","cacheRead","cacheCreation"). El tipo"input"excluye los tokens leídos de la caché de prompts o escritos en ella, que se cuentan en"cacheRead"y"cacheCreation". El tipo"cacheCreation"cuenta juntas las escrituras en caché con las duraciones de caché de cinco minutos y de una hora.model: Identificador del 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 usó el modo rápido. Ausente en caso contrarioeffort: Nivel de esfuerzo aplicado a la solicitud. Consulta Contador de costos para más detalles.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de skill, plugin, agente y MCP para la solicitud. Consulta Contador de costos para ver las definiciones y el comportamiento de redacción.
Contador de decisiones de herramientas de edición de código
Se incrementa cuando el usuario acepta o rechaza el uso de las herramientas Edit, Write o NotebookEdit.
Atributos:
- Todos los atributos estándar
tool_name: Nombre de la herramienta ("Edit","Write","NotebookEdit")decision: Decisión del usuario ("accept","reject")source: De dónde provino la decisión. Uno de"config","hook","user_permanent","user_temporary","user_abort"o"user_reject". Consulta el Evento de decisión de herramienta para saber 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
Registra el tiempo real dedicado a usar activamente Claude Code, excluyendo el tiempo de inactividad. Esta métrica se incrementa durante las interacciones del usuario, como escribir y leer respuestas, y durante el procesamiento de la 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 con el teclado,"cli"para la ejecución de herramientas y las respuestas de IA
Eventos
Claude Code exporta los siguientes eventos mediante logs/eventos de OpenTelemetry (cuando OTEL_LOGS_EXPORTER está configurado):
Atributos de correlación de eventos
Cuando un usuario envía un prompt, Claude Code puede hacer varias llamadas a la API y ejecutar varias herramientas. El atributo prompt.id te permite vincular todos esos eventos al prompt único que los desencadenó.
| Atributo | Descripción |
|---|---|
prompt.id |
Identificador UUID v4 que vincula todos los eventos producidos mientras se procesa un único prompt del usuario |
event.sequence |
Contador basado en 0 para ordenar eventos, contado por proceso de Claude Code y no por sesión |
message.uuid |
UUID del mensaje tal como se guarda 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 en los despachos de comandos, que pueden producir cero o varios mensajes. En assistant_response y api_response_body, es la entrada final de la transcripción de la respuesta, desde la que se encadena el parentUuid del siguiente turno. Requiere Claude Code v2.1.274 o posterior en api_response_body |
request_id |
ID asignado por el servidor a la solicitud a la API, leído del encabezado de respuesta request-id, como req_011.... En una respuesta sin encabezado request-id, como en Amazon Bedrock, el valor proviene en su lugar del encabezado x-amzn-requestid. Presente en api_request, api_error, api_refusal, assistant_response, api_response_body, tool_result y tool_decision cuando la respuesta lleva cualquiera de los dos encabezados. Coincide con el mismo atributo en el span de traza llm_request. La fuente x-amzn-requestid requiere Claude Code v2.1.282 o posterior |
client_request_id |
UUID generado por el cliente y enviado como el encabezado de solicitud x-client-request-id. Presente en api_request y api_error en conexiones a la API de primera parte; ausente en backends de proveedores de terceros y cuando la solicitud se reintentó mediante el respaldo sin streaming. Empareja una solicitud con su respuesta y sigue disponible en fallas como los tiempos de espera agotados que nunca produjeron un request_id del servidor. Coincide con el mismo atributo en el span de traza llm_request |
Para rastrear toda la actividad desencadenada por un único prompt, filtra tus 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 haya ocurrido mientras se procesaba ese prompt.
event.sequence empieza en 0 cada vez que se inicia un proceso de Claude Code y aumenta durante la vida de ese proceso. Sigue contando a través de /clear, que asigna un nuevo session.id. Si reanudas una sesión sin bifurcarla, la sesión conserva su session.id pero toma sus valores de event.sequence del proceso que la reanudó, por lo que dentro de una misma sesión un evento posterior puede tener un valor menor que uno anterior, o repetirlo. Para ordenar los eventos de una sesión, ordénalos por event.timestamp y usa event.sequence para ordenar los eventos que comparten una marca de tiempo.
Para la reconstrucción a nivel de mensaje, cada clase de evento incluye una clave que coincide con un campo de la transcripción de la sesión. El formato de las entradas de la transcripción es interno de Claude Code y cambia entre versiones, por lo que una canalización que une datos por estos campos puede romperse en cualquier versión; trata las uniones como específicas de la versión y no como un contrato estable:
message.uuidenuser_prompt,assistant_responseyapi_response_bodyrequest_iden los eventos de API, guardado comorequestIden las entradas del asistente de la transcripcióntool_use_iden los eventostool_resultytool_decision, y en los eventossafety_eventexcepto los del final de un turno
Evento de prompt del usuario
Se registra cuando se envía un prompt, incluso en los turnos que Claude Code inicia por sí mismo.
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 promptprompt: Contenido del prompt. Redactado de forma predeterminada. ConfiguraOTEL_LOG_USER_PROMPTS=1para incluirloprompt_text: Mismo valor queprompt, redactado bajo la misma condición. Un backend que almacena nombres de atributos con puntos como objetos anidados leeprompt.idcomoiddentro de un objeto llamadoprompty puede perder la cadena del prompt. En ese caso, leeprompt_text. Requiere Claude Code v2.1.287 o posteriormessage.uuid: UUID del mensaje de usuario resultante, que coincide con la entrada guardada en la transcripción. Ausente en los despachos de comandos, que pueden producir cero o varios mensajes.command_name: Nombre del comando cuando el prompt invoca uno. Los nombres de comandos integrados e incluidos, comocompactodebug, se emiten tal cual; los alias comoresetse emiten tal como se escribieron y no con el nombre canónico. Los nombres de comandos personalizados, de plugins y de MCP se reducen acustomomcpa menos que se configureOTEL_LOG_TOOL_DETAILS=1command_source: Origen del comando cuando está presente:builtin,customomcp. Los comandos proporcionados por plugins se informan comocustom
Evento de respuesta del asistente
Se registra después de cada solicitud a la API que devuelve contenido de texto del modelo. Solo se incluyen los bloques de texto de la respuesta; los bloques de pensamiento y de uso de herramientas se excluyen.
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 la respuesta en caracteresresponse: Texto de la respuesta, truncado en el límite de contenido (60 KB de forma predeterminada). Redactado como<REDACTED>de forma predeterminada. ConfiguraOTEL_LOG_ASSISTANT_RESPONSES=1para incluirlo. CuandoOTEL_LOG_ASSISTANT_RESPONSESno está configurada, lo controlaOTEL_LOG_USER_PROMPTS, así que configuraOTEL_LOG_ASSISTANT_RESPONSES=0para mantener redactadas las respuestas mientras el registro de prompts está activadomodel: Identificador del modelo (por ejemplo, "claude-sonnet-5")request_id: ID de la solicitud a la API, descrito en Atributos de correlación de eventosmessage.uuid: UUID de la entrada final de la transcripción de la respuesta. Una respuesta de la API se guarda como una entrada de transcripción por bloque de contenido; esta es la última, desde la que se encadena elparentUuiddel siguiente turno.query_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact"o el nombre de un subagente
Evento de resultado de herramienta
Se registra cuando una herramienta completa su ejecución. No se emite si la llamada a herramienta fue rechazada; consulta el Evento de decisión de herramienta para los 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 de esta invocación de la herramienta. Coincide con eltool_use_idque se pasa a los hooks, lo que permite correlacionar los eventos de OTel con los datos capturados por los hooks.request_id: elrequest_idde la respuesta de la API que contenía esta llamada a herramienta, para que puedas unir la llamada con los eventos de API de esa respuesta. Ausente cuando esa respuesta no tenía ID de solicitud o cuando ninguna respuesta de la API contenía la llamada. Requiere Claude Code v2.1.310 o posteriorsuccess:"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 provino la decisión de permisos. Uno de"config","hook","user_permanent"o"user_temporary". Consulta el Evento de decisión de herramienta para saber qué significa cada valor. Los orígenes exclusivos de rechazo"user_abort"y"user_reject"nunca aparecen en este evento.tool_input_size_bytes: Tamaño de la entrada de la herramienta serializada en JSON, en bytestool_result_size_bytes: Tamaño del resultado de la herramienta en bytesmcp_server_scope: Identificador del 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 del commit de ungit commitexitoso ejecutado por la herramienta Bash o PowerShell.vcs.ref.head.revisiones el SHA del commit,vcs.ref.head.namees la rama en la que se hizo el commit yvcs.ref.head.typeesbranch. El nombre y el tipo se omiten cuando el commit se hizo en un HEAD desacoplado. 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 pertenecen a Claude Desktop, el parmcp_server_name/mcp_tool_namese incluye incluso con el flag desactivado, la misma excepción definida por el host que en el Evento de decisión de herramienta. Los parámetros varían según la herramienta:- Para la herramienta Bash: incluye
bash_command,full_command,timeout,descriptionydangerouslyDisableSandbox, además degit_commit_idygit_branchcuando un comandogit committiene éxito.git_commit_ides el SHA completo del commit cuando el commit es el HEAD del directorio de trabajo de la sesión, y el SHA abreviado de git en caso contrario.git_branches la rama en la que se hizo el commit, y se omite en un HEAD desacoplado - Para la herramienta Bash del espacio de trabajo de la aplicación de escritorio, que también informa
tool_namecomoBash: incluye solobash_command,full_commandytimeout - Para herramientas MCP: incluye
mcp_server_name,mcp_tool_name - Para la herramienta Skill: incluye
skill_name - Para la herramienta Agent o la herramienta Task heredada: incluye
subagent_type
- Para la herramienta Bash: incluye
tool_input(cuandoOTEL_LOG_TOOL_DETAILS=1): Argumentos de la herramienta serializados en JSON. Los valores individuales de más de 512 caracteres se truncan, y el payload completo está limitado a ~4 K caracteres. Se aplica a todas las herramientas, incluidas las herramientas MCP.
Evento de solicitud a la API
Se registra para cada solicitud a la API de 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 usado (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 entrada, excluidos los tokens leídos de la caché de prompts o escritos en ellaoutput_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 usados para la creación de cachécache_creation_5m_tokens,cache_creation_1h_tokens: el número de tokens que la respuesta de la API informa como escritos en la caché con una duración de caché de cinco minutos y el número escrito con una duración de una hora. Ambos son0cuando la respuesta de la API no los informa, incluso cuandocache_creation_tokenses mayor que cero. Requiere Claude Code v2.1.300 o posteriorrequest_id: ID de la solicitud a la API, como"req_011...", descrito en Atributos de correlación de eventos.client_request_id: UUID generado por el cliente y enviado como el encabezado de solicitudx-client-request-id; consulta la tabla de atributos de correlación de eventos para saber cuándo está presentespeed:"fast"o"normal", que indica si el modo rápido estaba activoquery_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact"o el nombre de un subagenteeffort: Nivel de esfuerzo aplicado a la solicitud:"low","medium","high","xhigh"o"max". Ausente cuando Claude Code no envía ningún 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 skill, plugin, agente y MCP para la solicitud. Consulta Contador de costos para ver las definiciones y el comportamiento de redacción.
Evento de error de la API
Se registra cuando falla una solicitud a la API de Claude.
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 usado (por ejemplo, "claude-sonnet-5")error: Mensaje de errorstatus_code: Código de estado HTTP como número. Ausente para errores que no son HTTP, como las fallas de conexión.duration_ms: Duración de la solicitud en milisegundosattempt: Número de intentos realizados, incluida la solicitud inicial. Detectar el agotamiento de reintentos indica cuándo se reinicia el conteorequest_id: ID de la solicitud a la API, como"req_011...", descrito en Atributos de correlación de eventos.client_request_id: UUID generado por el cliente y enviado como el encabezado de solicitudx-client-request-id. Disponible incluso cuando una falla, como un tiempo de espera agotado o un error de conexión, nunca produjo unrequest_iddel servidor; consulta la tabla de atributos de correlación de eventos para saber cuándo está presente.speed:"fast"o"normal", que indica si el modo rápido estaba activoquery_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact"o el nombre de un subagenteeffort: Nivel de esfuerzo aplicado a la solicitud. Ausente cuando Claude Code no envía ningún 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 skill, plugin, agente y MCP para la solicitud. Consulta Contador de costos para ver las definiciones y el comportamiento de redacción.
Evento de rechazo de la API
Se registra cuando una solicitud a la API devuelve stop_reason: "refusal". Los rechazos llegan en un flujo de respuesta exitoso y no como un error HTTP, por lo que el evento api_error no se activa para ellos. Este evento te permite rastrear la frecuencia de rechazos y agruparlos 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 del modelo de la solicitudrequest_id: ID de la solicitud a la API, como"req_011...", descrito en Atributos de correlación de eventos.query_source: Subsistema que emitió la solicitud, como"repl_main_thread","compact"o el nombre de un subagente. Consultaapi_requestpara ver las definiciones.speed:"fast"cuando el 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 ningún nivel de esfuerzo, por ejemplo en un modelo que no admite esfuerzo.server_fallback_hop:truecuando el respaldo 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 mismo turno puede emitir tanto un evento de salto contruecomo un evento final posterior confalsecuando el modelo de respaldo también rechaza.has_category:truecuando la respuesta de la API incluyó unstop_details.categoryde"cyber","bio","frontier_llm"o"reasoning_extraction".falsecuando la respuesta no incluyó ninguna categoría o un valor fuera de ese conjunto. Ausente cuandoserver_fallback_hopestrue, porque los bloques de salto no incluyenstop_details.has_explanation:truecuando la respuesta de la API incluyó unstop_details.explanation; en caso contrario,false. Ausente cuandoserver_fallback_hopestrue.category: El valor destop_details.categoryde la respuesta de la API. Uno de"cyber","bio","frontier_llm"o"reasoning_extraction". Solo presente cuandoOTEL_LOG_TOOL_DETAILS=1está configurado yhas_categoryestrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribución de skill, plugin, agente y MCP para la solicitud. Consulta Contador de costos para ver las definiciones y el comportamiento de redacción.
Evento de cuerpo de la solicitud a la API
Se registra para cada intento de solicitud a la API cuando OTEL_LOG_RAW_API_BODIES está configurada. Se emite un evento por intento, por lo que cada reintento con parámetros ajustados produce 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 la solicitud a la API de Messages serializados en JSON, como el prompt del sistema, los mensajes y las herramientas, truncados en el límite de contenido (60 KB de forma predeterminada). El contenido de pensamiento extendido de 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 se produjo un truncamiento en línea. Ausente en modo de archivo y cuando no hubo truncamiento.model: Identificador del modelo de los parámetros de la solicitudquery_source: Subsistema que emitió la solicitud (por ejemplo,"compact")request_body_id: UUID que identifica el cuerpo de la solicitud de este intento. El eventoapi_response_bodydel intento que tiene éxito incluye el mismo valor, por lo que puedes emparejar una respuesta con la solicitud exacta que la produjo. Requiere Claude Code v2.1.274 o posterior
Evento de cuerpo de la respuesta de la API
Se registra para cada respuesta exitosa de la API cuando OTEL_LOG_RAW_API_BODIES está configurada.
En modo de archivo (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code también agrega una línea JSON a <dir>/index.jsonl por cada respuesta exitosa, con los campos timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file y response_file. Léelo para encontrar los archivos de solicitud y de respuesta detrás de un mensaje determinado de la transcripción sin consultar tu 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 la API de Messages serializada en JSON, incluidos el id, los bloques de contenido, el uso y el motivo de detención, truncada en el límite de contenido (60 KB de forma predeterminada). 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 se produjo un truncamiento en línea. Ausente en modo de archivo y cuando no hubo truncamiento.model: Identificador del modeloquery_source: Subsistema que emitió la solicitudrequest_id: ID de la solicitud a la API, como"req_011...", descrito en Atributos de correlación de eventos.request_body_id: Elrequest_body_iddel eventoapi_request_bodyal que responde esta respuesta. Requiere Claude Code v2.1.274 o posteriormessage.id: ID del mensaje que la API asignó a la respuesta, el campoiddel cuerpo de la respuesta. Requiere Claude Code v2.1.274 o posteriormessage.uuid: UUID de la entrada final de la transcripción de la respuesta. Junto conrequest_body_id, vincula un mensaje de la transcripción con los cuerpos de solicitud y respuesta que lo respaldan. Requiere Claude Code v2.1.274 o posterior
Evento de decisión de herramienta
Se registra cuando se toma una decisión de permisos sobre una 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 8601 -
event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventos -
tool_name: Nombre de la herramienta (por ejemplo, "Read", "Edit", "Write", "NotebookEdit") -
tool_use_id: Identificador único de esta invocación de la herramienta. Coincide con eltool_use_idque se pasa a los hooks, lo que permite correlacionar los eventos de OTel con los datos capturados por los hooks. -
request_id: elrequest_idde la respuesta de la API que contenía esta llamada a herramienta, para que puedas unir la llamada con los eventos de API de esa respuesta. Ausente cuando esa respuesta no tenía ID de solicitud o cuando ninguna respuesta de la API contenía la llamada. Requiere Claude Code v2.1.310 o posterior -
decision:"accept"o"reject" -
tool_source: Siempre presente. La procedencia de la herramienta, como un conjunto cerrado de valores definidos por la CLI:"builtin": las herramientas propias de la CLI"mcp": servidores MCP en general"sdk_host_builtin_mcp": un servidor en proceso integrado en el propio Claude Desktop, en una sesión que pertenece a Claude Desktop. Una sesión pertenece a Claude Desktop cuando la inició desde uno de sus propios puntos de entrada,claude-desktop,claude-desktop-3polocal-agent, y esa sesión no es un hijo anidado; las sesiones anidadas, incluidas las que genera el propio Claude Code, informan estos servidores como"mcp"
-
source: De dónde provino la decisión:-
"config": Decidida automáticamente sin preguntar, por uno de estos orígenes:- Configuración del proyecto
- Reglas de permitir o denegar en la configuración personal del usuario
- Política administrada empresarial
- Flags
--allowedToolso--disallowedTools - El modo de permisos activo
- El clasificador del modo automático, cuyo veredicto registra el mismo evento en
classifier_verdict - Una concesión para el resto de la sesión, otorgada en una solicitud de permiso anterior en la misma sesión interactiva de la CLI
- Que la herramienta sea intrínsecamente segura
El valor de
sourceno indica cuál de estas fuentes coincidió. Para averiguar cuál rechazó una llamada, busca el evento de seguridad con el mismotool_use_idy lee sus atributoscategoryyrule_source. Algunas llamadas rechazadas no tienen evento de seguridad.Claude Code también informa
"config"cuando falla la propia solicitud de permiso. Por ejemplo, esa solicitud falla cuando el callbackcanUseTooldel Agent SDK o la herramienta--permission-prompt-tooldevuelven un resultado no válido, o cuando el flujo de entrada se cierra mientras la solicitud está pendiente. -
"hook": Un hookPreToolUseoPermissionRequestdevolvió la decisión. -
"user_permanent": Se emite cuando el usuario eligió "Yes, and don't ask again for ..." en una solicitud de permiso, lo que guarda una regla de permitir en su configuración personal. En la CLI interactiva, esto se emite solo para esa elección en sí; las llamadas posteriores que coinciden con la regla guardada emiten"config"en su lugar. En sesiones del Agent SDK o sesiones no interactivas con-p, tanto la elección inicial como las coincidencias posteriores con la regla emiten"user_permanent". Se trata como una aceptación. -
"user_temporary": Se emite cuando el usuario eligió "Yes" en una solicitud de permiso para una aprobación única, o eligió una opción que otorga acceso durante el resto de la sesión en una solicitud de edición o lectura de archivos. En la CLI interactiva, esto se emite solo para la elección en sí; las llamadas posteriores permitidas por esa autorización limitada a la sesión emiten"config"en su lugar. En sesiones del Agent SDK o sesiones no interactivas con-p, tanto la elección como las coincidencias posteriores emiten"user_temporary". Se trata como una aceptación. -
"user_abort": Se emite cuando el usuario descartó la solicitud de permiso sin responder. En sesiones del Agent SDK y sesiones no interactivas con-p, esto incluye interrumpir el turno mientras hay una solicitud de permiso decanUseToolo--permission-prompt-toolpendiente. Se trata como un rechazo. -
"user_reject": Se emite cuando el usuario eligió "No" al solicitársele. En la CLI interactiva, esto se emite solo para esa elecció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 del Agent SDK o sesiones no interactivas con-p, las llamadas que coinciden con una regla de denegar en la configuración personal emiten"user_reject". Se trata como un rechazo.
-
-
classifier_verdict: El veredicto del clasificador del modo automático para la llamada, o el motivo por el que Claude Code denegó la llamada cuando no llegó ninguno. Requiere Claude Code v2.1.301 o posterior"allow": el clasificador aprobó la llamada"block": el clasificador bloqueó la llamada. Una comprobación del clasificador que falla a mitad de camino también puede terminar como"block", por lo que una interrupción parcial del clasificador puede aparecer como más bloqueos en lugar de como"unavailable""no_verdict": la comprobación se ejecutó pero no dio ningún veredicto utilizable, por lo que Claude Code denegó la llamada. La denegación no significa que el clasificador considerara insegura la llamada"unavailable": la solicitud al clasificador falló, por ejemplo por un rate limit, un tiempo de espera agotado o un error de conexión, por lo que Claude Code denegó la llamada. Con la revisión del clasificador del lado del servidor, también marca una llamada denegada porque el servidor no devolvió ningún veredicto de seguridad
El atributo también aparece en las llamadas en modo plan cuando el clasificador revisa los comandos en modo plan. El atributo está ausente en estos casos:
- Una regla de permisos de permitir o denegar decidió la llamada
- Claude Code aprobó la llamada en modo automático sin consultar al clasificador
- El usuario respondió la solicitud que Claude Code mostró después de bloqueos repetidos
- En una ejecución con
-psin--permission-prompt-tool, Claude Code denegó la llamada después de bloqueos repetidos porque no había nadie para responder una solicitud. Ese evento informadecisioncomo"reject"ysourcecomo"config"
-
classifier_category(cuandoOTEL_LOG_TOOL_DETAILS=1): El nombre de la regla integrada que el clasificador indicó al bloquear la llamada, en minúsculas con guiones bajos, como"data_exfiltration"para la regla Data Exfiltration. Requiere Claude Code v2.1.301 o posterior. El atributo está presente cuando se cumplen ambas condiciones:classifier_verdictes"block"- El clasificador indicó exactamente una regla, y esa regla es integrada y no una que escribiste tú
Antes de v2.1.302, el atributo también estaba ausente en cualquier bloqueo decidido por la revisión del clasificador del lado del servidor.
-
permission_mode: Modo de permisos activo cuando comenzó la comprobación de permisos de esta llamada:"default","plan","acceptEdits","bypassPermissions","dontAsk"o"auto". El modo manual aparece como"default". Una llamada de un subagente informa el modo de permisos del subagente y no el de la sesión. Requiere Claude Code v2.1.301 o posterior -
tool_parameters(cuandoOTEL_LOG_TOOL_DETAILS=1): Cadena JSON que contiene parámetros específicos de la herramienta. Misma forma que en el Evento de resultado de herramienta, sin los campos posteriores a la ejecución comogit_commit_id. Los valores pueden diferir detool_resulten una llamada aceptada si la decisión de permisos reescribe la entrada de la herramienta medianteupdatedInput. Usa este atributo para ver qué comando se rechazó cuandodecisiones"reject".- Para herramientas
"sdk_host_builtin_mcp":mcp_server_nameymcp_tool_namese incluyen incluso cuandoOTEL_LOG_TOOL_DETAILSestá desactivada, porque la aplicación host define estos nombres; sin ellos, una llamada rechazada a uno de estos servidores integrados no podría atribuirse en el flujo predeterminado. Para servidores MCP configurados por el usuario, eltool_namedel evento es siempre el literal"mcp_tool", y los nombres del servidor y de la herramienta aparecen solo entool_parameterscon el flag activado; el contenido de los argumentos requiere el flag en todos los casos. - Para la 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 informatool_namecomoBash, pero incluye solobash_command,full_commandytimeout - Para herramientas MCP: incluye
mcp_server_name,mcp_tool_name - Para la herramienta Skill: incluye
skill_name - Para la herramienta Agent o la herramienta Task heredada: incluye
subagent_type
- Para herramientas
Si reduces el OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT del SDK de OpenTelemetry por debajo del número de atributos de un evento tool_decision, el SDK descarta los atributos que Claude Code estableció al final. El SDK los descarta antes que cualquier otro atributo, en este orden, omitiendo los que el evento no lleve:
parent_agent_idagent_idrequest_idpermission_modeclassifier_categoryclassifier_verdict
permission_mode, classifier_category y classifier_verdict se descartan en este orden en Claude Code v2.1.302 o posterior. parent_agent_id, agent_id y request_id requieren v2.1.310 o posterior.
Evento de seguridad
Se registra cuando una comprobación rechaza una llamada a herramienta o requiere una solicitud de permiso, excepto en las llamadas sin evento de seguridad. También se registra cuando el proxy de red del sandbox rechaza una conexión o solicitud, y cuando un hook bloquea un resultado. Requiere Claude Code v2.1.307 o posterior.
El evento se exporta con los demás eventos y no tiene un ajuste independiente. Los atributos propios del evento no contienen texto de comandos, rutas de archivos, nombres de host ni nombres de servidores y herramientas MCP. El registro también incluye los atributos estándar que tiene todo evento, que pueden incluir workspace.host_paths y los atributos del repositorio. Para ver el comando o la herramienta MCP detrás de un evento, configura OTEL_LOG_TOOL_DETAILS=1 y lee tool_parameters en el evento tool_decision correspondiente.
Nombre del evento: claude_code.safety_event
Atributos:
- Todos los atributos estándar
event.name:"safety_event"event.timestamp: Marca de tiempo ISO 8601event.sequence: contador por proceso para ordenar eventos, descrito en Atributos de correlación de eventoscategory: La comprobación o el resultado, un valor de categoríadecision:"accept","reject"o"sent_back"cuando un hook bloqueó un resultado o el final de un turnodecision_source: Quién o qué decidió, un valor desourcedetool_decisiono"other"reason_code: El motivo de la comprobación, como"rule:policySettings","mode:dontAsk","hook:PreToolUse","classifier:auto-mode","bashMiss:too-complex"o"unknown"reason_type: El tipo de motivo de la comprobación, como"rule","subcommandResults","mode","hook","classifier"o"asyncAgent"rule_source: Fuente de configuración de la regla involucrada, como"policySettings","userSettings","projectSettings","localSettings","flagSettings","cliArg"o"session"grant_scope:"once"o"session"para una solicitud aprobada sin guardar una regla en un archivo de configuracióncircuit_breaker: La comprobación de seguridad integrada, como"dangerousRemoval","outsideReadsBlocked"o"claudeSettingsFile"classifier_category: ConOTEL_LOG_TOOL_DETAILS=1, la regla integrada detrás de un bloqueo del modo automático, como"data_exfiltration"hook_event:"pre_tool_use"para un hookPreToolUse, o"post_tool_use","post_tool_use_failure","stop"o"subagent_stop"en eventos"hook_review"tool_class:"bash"para Bash y Monitor,"powershell","file"para Read, Edit, Write, NotebookEdit, Glob y Grep,"web"para WebFetch y WebSearch,"mcp"u"other"tool_name: El nombre de la herramienta, como"Bash"para una herramienta integrada, o"mcp_tool","skill_tool","dynamic_tool"u"other_tool"tool_source:"builtin","mcp"o"sdk_host_builtin_mcp", como entool_decisionpermission_mode: El modo de permisos de la llamada cuando se comprobó:"default","plan","acceptEdits","bypassPermissions","dontAsk"o"auto"tool_use_id: El ID de la llamada, como entool_decisionytool_resultsandbox_violation_count: Cuántas conexiones o solicitudes distintas del comando de la llamada rechazó el proxy de red del sandbox, de"0"a"20"como cadena. Los rechazos se cuentan para un comando en el sandbox que terminó en primer planosandbox_enabled:"true"si el sandboxing está activado para la sesión; de lo contrario,"false"
Estos son los atributos propios del evento cuando una regla de denegar de la configuración administrada rechaza un comando Bash:
{
"event.name": "safety_event",
"category": "managed_policy",
"decision": "reject",
"decision_source": "config",
"reason_code": "rule:policySettings",
"rule_source": "policySettings",
"tool_class": "bash",
"tool_name": "Bash",
"tool_source": "builtin",
"permission_mode": "default",
"tool_use_id": "toolu_01ABC123...",
"sandbox_violation_count": "0",
"sandbox_enabled": "false"
}
Categorías de eventos de seguridad
| Valor | Comprobación o resultado | Atributo de detalle |
|---|---|---|
"permission_rule" |
Una regla de permisos de denegar o preguntar fuera de la configuración administrada | rule_source |
"managed_policy" |
Una regla de denegar o preguntar de la configuración administrada | rule_source |
"permission_mode" |
El modo dontAsk o plan, o una solicitud sin categoría en una sesión que no puede mostrar solicitudes, como con --permission-prompts none |
reason_code, reason_type |
"hook" |
Un hook, como PreToolUse o PermissionRequest |
hook_event, reason_code |
"auto_mode_block" |
El clasificador del modo automático bloqueó la llamada | classifier_category |
"auto_mode_no_verdict" |
Ningún veredicto del clasificador utilizable, por ejemplo después de una solicitud fallida | reason_code |
"safety_check" |
Una comprobación de seguridad integrada, como para Read, Edit o Write fuera de tus directorios de trabajo | circuit_breaker |
"static_analysis" |
Cómo está escrito un comando Bash o Monitor, por ejemplo uno demasiado complejo para analizar | reason_code |
"sandbox_override" |
La solicitud para ejecutar un comando fuera del sandbox | reason_code |
"user_rejected" |
Alguien rechazó o descartó una solicitud que no tenía categoría o que solo requería un hook, o un callback canUseTool o una herramienta --permission-prompt-tool denegó una |
decision_source |
"sandbox_network" |
La llamada se ejecutó y el proxy de red del sandbox rechazó una conexión o solicitud | sandbox_violation_count |
"sandbox_other" |
Como "sandbox_network", pero ningún destino rechazado se interpreta como un nombre de host o una dirección IP |
sandbox_violation_count |
"hook_review" |
Un hook bloqueó el resultado de la llamada o el final de un turno | hook_event |
"other" |
Un rechazo que ningún otro valor describe | reason_code |
Para encontrar rechazos del proxy en cualquier category, filtra por un sandbox_violation_count que esté presente y no sea "0".
Llamadas sin evento de seguridad
Para encontrar llamadas rechazadas porque nadie pudo responder una solicitud sin categoría, busca eventos tool_decision que informen "reject" con source "config" y sin ningún evento de seguridad que comparta su tool_use_id. Estos rechazos ocurren en una ejecución con -p sin --permission-prompt-tool ni --permission-prompts none.
Busca un evento tool_decision para llamadas como estas, ya que no tienen evento de seguridad, excepto los eventos "sandbox_network", "sandbox_other" o "hook_review" enviados después de que se ejecutan:
- Una llamada aprobada en una solicitud sin categoría
- Una llamada que un callback
canUseToolo una herramienta--permission-prompt-toolaprobó en una solicitud que solo requería un hookPreToolUse - Una llamada a
AskUserQuestionoExitPlanMode, rechazada o no
Solicitudes sin categoría
Una solicitud no tiene categoría cuando ningún valor de category nombra su comprobación, como la solicitud del modo default para una edición dentro de tu directorio de trabajo.
Evento de cambio de modo de permisos
Se registra cuando cambia el modo de permisos, por ejemplo al alternar con Shift+Tab, al salir del modo plan o por una comprobación de acceso del modo automático.
Para agrupar las llamadas a herramientas según el modo de permisos en el que se comprobó cada una, usa permission_mode en el Evento de decisión de herramienta.
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 permisos anterior, por ejemplo"default","plan","acceptEdits","auto"o"bypassPermissions"to_mode: El nuevo modo de permisostrigger: Qué causó el cambio, por ejemplo"shift_tab","exit_plan_mode"o"auto_gate_denied". Ausente en algunos cambios, como cuando el SDK establece el modo de permisos mediantesetPermissionMode()
Evento de autenticación
Se registra cuando se completa /login o /logout.
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 categórico de error 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 de servidor MCP
Se registra cuando un servidor MCP se conecta, se desconecta o no logra 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 lo proporciona un plugin,falseen caso contrarioplugin_id_hash(cuandois_pluginestrue): Hash estable del nombre del plugin y del marketplace, 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 es la cadena literal"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1; esto evita que los nombres de plugins de terceros aparezcan en los registros de forma predeterminada. Los plugins de fuentes oficiales de Anthropic siempre se identifican por su nombre. Los atributosplugin_id_hashyplugin.namefluyen hacia tu propio backend de monitoreo y no se envían a Anthropicserver_name(cuandoOTEL_LOG_TOOL_DETAILS=1): Nombre configurado del servidorerror(cuandoOTEL_LOG_TOOL_DETAILS=1): Mensaje de error completo cuando la conexión falló
Evento de error interno
Se registra cuando Claude Code captura un error interno inesperado. Solo se registran el nombre de la clase del error y un código de estilo errno. El mensaje de error y el stack trace nunca se incluyen. Este evento no se emite cuando se ejecuta con Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, ni cuando DISABLE_ERROR_REPORTING está configurada.
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 del 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 de CLI claude plugin install como desde la interfaz 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 marketplace es un marketplace oficial de Anthropic,"false"en caso contrarioinstall.trigger:"cli"o"ui"plugin.name: Nombre del plugin instalado. Para marketplaces de terceros, se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1plugin.version: Versión del plugin cuando está declarada en la entrada del marketplace. Para marketplaces de terceros, se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1marketplace.name: Marketplace desde el que se instaló el plugin. Para marketplaces de terceros, se incluye solo cuandoOTEL_LOG_TOOL_DETAILS=1
Evento de plugin cargado
Se registra una vez por cada plugin habilitado al inicio de la sesión. Usa este evento para hacer un inventario de qué plugins están activos en toda tu flota, como complemento de 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 marketplace oficial y del paquete integrado, el valor es"third-party"a menos queOTEL_LOG_TOOL_DETAILS=1marketplace.name: marketplace desde el que se instaló el plugin, cuando se conoce. Se redacta como"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 llegó a habilitarse el plugin:"default-enable","org-policy","admin-install","seed-mount"o"user-install". El valor"admin-install"significa que el plugin está configurado como obligatorio o de instalación automática para tu organización en Organization settings > Plugins & skills. Antes de v2.1.246, Claude Code informaba estos plugins como"user-install"o"seed-mount"plugin_id_hash: hash determinista del nombre del plugin y del marketplace, enviado solo a tu exportador configurado. Te permite contar los distintos plugins de terceros cargados en tu flota sin registrar sus nombres. Para plugins sincronizados desde claude.ai, Claude Code calcula el hash del nombre del plugin con el nombre del marketplace que claude.ai informa para el plugin, o consynceden caso contrario. Antes de v2.1.246, Claude Code no usaba en el hash el nombre del marketplace que informa claude.aihas_hooks: si el plugin aporta hooks, mediante configuración de hooks o como un modhas_mcp: si el plugin aporta servidores MCPhost_owned_mcp:truecuando el host del SDK administra las conexiones MCP de este plugin y Claude Code omitió leer la configuración de servidores MCP del plugin,falseen caso contrarioskill_path_count: número de directorios de skills 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"en caso contrario. En modo seguro, este evento informa solo el inventario configurado; los comandos, skills, hooks y servidores MCP del plugin no se cargan. Requiere Claude Code v2.1.169 o posterior
Evento de skill activado
Se registra cuando se invoca un skill, ya sea que Claude lo llame mediante la herramienta Skill o que tú lo ejecutes 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 del skill. Para skills definidos por el usuario y de plugins de terceros, el valor es el marcador"custom_skill"a menos queOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Cómo se activó el skill ("user-slash","claude-proactive"o"nested-skill")skill.source: Desde dónde se cargó el skill (por ejemplo,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"cuando el skill es un skill de flujo de trabajo. Ausente en caso contrarioplugin.name(cuandoOTEL_LOG_TOOL_DETAILS=1o el plugin proviene de un marketplace oficial): Nombre del plugin propietario cuando el skill lo proporciona un pluginmarketplace.name(cuandoOTEL_LOG_TOOL_DETAILS=1o el plugin proviene de un marketplace oficial): Marketplace desde el que se instaló el plugin propietario, cuando el skill lo proporciona un plugin
Evento de mención con @
Se registra cuando Claude Code resuelve una mención con @ en un prompt. No todas las menciones emiten un evento: las rutas de salida anticipada, como las denegaciones de permisos, los archivos demasiado grandes, los adjuntos de referencia PDF y las fallas al listar directorios, regresan sin registrar nada.
Cada vez que Claude Code lee un prompt, registra como máximo 100 eventos con un mention_type de "agent" y 100 con "mcp_resource". Las menciones que superan cualquiera de los dos límites se siguen resolviendo, pero no emiten ningún evento.
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 mencionaste otra de tus sesiones de Claude Code. Requiere Claude Code v2.1.232 o posteriorsuccess: Si la mención se resolvió correctamente ("true"o"false")
Evento de reintentos de la API agotados
Se registra una vez cuando una solicitud a la 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 usadoerror: Mensaje de error finalstatus_code: Código de estado HTTP como número. Ausente para errores que no son HTTP.total_attempts: Número total de intentos realizadostotal_retry_duration_ms: Tiempo real total entre todos los intentosspeed:"fast"o"normal"
Evento de hook registrado
Se registra una vez por cada hook configurado al inicio de la sesión. Usa este evento para hacer un inventario de qué hooks están activos en toda tu flota, como complemento de 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 del hook, como"PreToolUse"o"PostToolUse"hook_type: tipo de implementación del hook:"command","prompt","mcp_tool","http"o"agent"hook_source: dónde está definido el hook:"userSettings","projectSettings","localSettings","flagSettings","policySettings"o"pluginHook"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"en caso contrario. Requiere Claude Code v2.1.169 o posteriorhook_matcher(cuandoOTEL_LOG_TOOL_DETAILS=1): la cadena del matcher de la configuración del hook, cuando hay uno configuradoplugin.name(cuandohook_sourcees"pluginHook"): nombre del plugin que lo aporta. Para plugins fuera del marketplace oficial y del 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 del marketplace, enviado solo a tu exportador configurado. Te permite contar los distintos plugins que aportan hooks 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 del hook, como"PreToolUse"o"PostToolUse"hook_name: Nombre completo del hook, incluido el matcher, como"PreToolUse:Write"num_hooks: Número de comandos de hook coincidentesmanaged_only:"true"cuando solo se permiten hooks de política administradahook_source:"policySettings"o"merged"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"en caso contrario. Requiere Claude Code v2.1.169 o posteriorhook_definitions: Configuración del hook serializada en JSON. Se incluye solo cuando están habilitados tanto el rastreo beta detallado comoOTEL_LOG_TOOL_DETAILS=1
Evento de ejecución de hooks completada
Se registra cuando todos los hooks de 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, incluido el matchernum_hooks: número de comandos de hook que coincidennum_success: cantidad que se completó correctamentenum_blocking: cantidad que devolvió una decisión de bloqueonum_non_blocking_error: cantidad que falló sin bloquearnum_cancelled: cantidad cancelada antes de completarsetotal_duration_ms: duración en tiempo real de todos los hooks que coincidenstdout_chars: total de caracteres de stdout de los hooks que coinciden y que se completaron correctamente. Requiere Claude Code v2.1.280 o posterioradditional_context_chars: total de caracteres deadditionalContextdevueltos por los hooks que coinciden. Requiere Claude Code v2.1.280 o posteriorsystem_message_chars: total de caracteres desystemMessagedevueltos por los hooks que coinciden. Requiere Claude Code v2.1.280 o posteriorinitial_user_message_chars: total de caracteres deinitialUserMessagedevueltos por los hooks que coinciden. Requiere Claude Code v2.1.280 o posteriornum_outputs_persisted: número de salidas de hooks que superan el límite de 10,000 caracteres y que Claude Code guardó en un archivo. Requiere Claude Code v2.1.280 o posteriormanaged_only:"true"cuando solo se permiten hooks de políticas administradashook_source:"policySettings"o"merged"safe_mode:"true"cuando la sesión se inició con--safe-mode,"false"en caso contrario. Requiere Claude Code v2.1.169 o posteriorhook_definitions: configuración de hooks serializada en JSON. Solo se incluye cuando están habilitados tanto el rastreo beta detallado comoOTEL_LOG_TOOL_DETAILS=1
Evento de métricas de hooks de plugins
Se registra cuando un hook de un plugin del marketplace oficial emite métricas por invocación. Solo los plugins instalados desde un marketplace oficial de Anthropic pueden emitirlas. Los plugins de marketplaces de terceros y los hooks configurados por el usuario no emiten este evento. Usa este evento para supervisar el comportamiento de los plugins, como las tasas de hallazgos, los costos y las duraciones, desde tu 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 con el formato<name>@<marketplace>hook_event: tipo de evento de hook que emitió las métricas- Hasta 20 claves de métricas emitidas por el plugin. Los nombres coinciden con
^[a-z][a-z0-9_]{0,39}$. Los valores son booleanos o numéricos.
Evento de compactación
Se registra cuando se completa la compactación de la conversación.
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: recuento aproximado de tokens antes de la compactaciónpost_tokens: recuento aproximado de tokens después de la compactaciónerror: mensaje de error cuando la compactación fallóprecompute_reuse: solo se establece cuandotriggeres"manual", o cuandotriggeres"auto"para una compactación por inactividad en una sesión interactiva de terminal. La compactación automática puede preparar un resumen en segundo plano antes de que se llene la ventana de contexto, y este atributo registra si la compactación reutilizó ese resumen preparado."hit"significa que se reutilizó;"miss_custom_instructions","miss_hook"y"miss_not_ready"indican el motivo por el que, en su lugar, se calculó un resumen nuevo
Evento de subagente completado
Se registra cuando un subagente termina y devuelve su resultado a la conversación que lo inició. Úsalo para agregar el uso de herramientas y el tiempo de ejecución por tipo de subagente; para agregar tokens o costos, usa el contador de tokens y el contador de costos filtrados por query_source "subagent", ya que el total_tokens de este evento solo abarca la solicitud final. La categoría "subagent" también cuenta las solicitudes de los hooks basados en agentes, que no emiten ningún 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 marketplace oficial aparecen literalmente; los demás nombres de agentes se sustituyen por"custom"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1agent.source: de dónde proviene la definición del agente:built-in,plugino 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 final a la API del subagente: los tokens de entrada, de creación de caché, de lectura de caché y de salida de esa única solicitud, aproximadamente el tamaño del contexto del subagente al completarse. No es una suma de toda la ejecucióntotal_tool_uses: número de llamadas a herramientas que el subagente realizó durante toda la ejecuciónduration_ms: tiempo de ejecución en milisegundosmodel: el modelo con el que se resolvió ejecutar el subagentefinal_model: el modelo que produjo la respuesta final del subagente, que difiere demodeltras un cambio a mitad de la ejecución, como un respaldomodel_swapped: si más de un modelo atendió las solicitudes del subagenteplugin_id_hash,plugin.name: presentes para los agentes proporcionados por plugins. Los nombres de plugins del marketplace oficial aparecen literalmente; los demás nombres de plugins se sustituyen por"third-party"a menos que se establezcaOTEL_LOG_TOOL_DETAILS=1
Evento de encuesta de comentarios
Se registra cuando se muestra o se responde una encuesta de calidad de la sesión. Consulta Encuestas de calidad de la sesión para saber 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 prompt de calificación "How is Claude doing?"response: la selección del usuario en los eventosrespondedenabled_via_override:truecuando se estableceCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL. Se emite como booleano, no como cadena. Está presente en los eventos de encuestasession. Filtra por este atributo para confirmar que la sobrescritura se aplica en toda una flota
Evento de barrido de retención
Se registra una vez por cada ejecución del barrido de limpieza de retención, que elimina las transcripciones de sesiones y otros datos de la aplicación con una antigüedad mayor que el ajuste cleanupPeriodDays. Claude Code ejecuta el barrido en segundo plano como máximo una vez por sesión, y una ejecución que no elimina nada tambié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 termina antes no emite nada. Cuando ejecutas claude -p con --bare, Claude Code no ejecuta el barrido y no emite nada.
Como todos los eventos de OTel de esta página, solo se envía al backend de telemetría que configures. 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 la configuración administrada establece cleanupPeriodDays, el valor administrado fija el período de retención y el barrido se ejecuta incluso cuando un archivo de configuración de un alcance de menor prioridad está dañado o no es válido. Cuando no se puede leer el propio managed-settings.json, Claude Code sigue pausando el barrido a menos que el nivel administrado proporcione cleanupPeriodDays desde otro lugar, como la configuración administrada por el servidor o un archivo complementario de managed-settings.d/ junto al archivo dañado. Los atributos de contadores de eliminación solo están presentes 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 valor decleanupPeriodDaysde la configuración combinada, en días, o30cuando ninguna fuente lo establece. En los eventos omitidos, el valor que habría usado el barrido, 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"en caso contrario. En los eventos completados,"true"significa que se aplicó el valor 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 mediante el flag--setting-sourceso la opciónsettingSourcesdel SDK, y ninguna fuente habilitada proporcionacleanupPeriodDays"settings_unknowable": no se pudo leer o analizar un archivo de configuración, por lo quecleanupPeriodDaysodesktopSessionCleanupPeriodDayspodrían estar establecidos en un valor que Claude Code no puede ver"settings_invalid_key_set": la configuración tiene errores de validación ycleanupPeriodDaysodesktopSessionCleanupPeriodDaysestán establecidos explícitamente, por lo que recurrir al valor predeterminado podría eliminar o conservar archivos en contra de ese ajuste"remote_settings_unknowable": una sesión en la pestaña Code de Claude Desktop en un despliegue de terceros solicitó la configuración administrada por el servidor. No recibió ninguna respuesta utilizable, por lo quecleanupPeriodDayspodría estar establecido en un valor que Claude Code no puede ver
transcripts_deleted: número de transcripciones de sesiones, los archivos~/.claude/projects/*/*.jsonlde nivel superior, que eliminó el barridotranscripts_exempted_desktop: número de transcripciones que superan el período de retención y que el barrido conservó según la regla de Claude Desktop y Cowork. Estas no cuentan parafiles_past_cutoff. Requiere Claude Code v2.1.248 o posteriorsession_files_deleted: número de artefactos que eliminó el barrido de archivos de sesión: transcripciones más archivos complementarios por sesión, como archivos sidecar, grabaciones y resultados de herramientasartifacts_deleted: total de elementos que eliminó el barrido en los directorios de datos que abarca, incluidos los archivos de sesión. Algunos barridos cuentan un árbol de directorios eliminado completo como un solo elemento y algunas pasadas de limpieza no contribuyen al contador, así que trata el valor como un mínimo y no como un recuento exacto de archivosfiles_retained_fresh: archivos inspeccionados y conservados porque aún están dentro del período de retención. Solo los barridos por archivo los cuentan, por lo que el valor es un mínimo; un valor distinto de cero es el estado estable normalfiles_past_cutoff: archivos con una antigüedad mayor que el período de retención que el barrido no pudo eliminar, por ejemplo debido a un error de permisos o a un archivo que se mantiene abierto. El recuento también incluye cada carpeta obsoleta que el barrido encuentra enskills/synced/oplugins/synced/, tanto si mueve la carpeta a la papelera como si no. Aparte de esas carpetas, un valor mayor que cero significa que hay archivos que sobrevivieron al período de retención configurado; cero no prueba que ninguno lo hiciera, porque una eliminación fallida de un directorio completo cuenta paraerror_counten su lugarerror_count: número de errores que encontró el barrido al listar o eliminar archivos
Evento de configuración administrada resuelta
Se registra con la configuración administrada que resolvió una sesión: una vez al inicio de la sesión, de nuevo cuando cambia la configuración administrada o el estado del asistente de políticas durante la sesión, y cuando Claude Code se niega a iniciarse o finaliza la sesión por uno de los motivos que enumera el atributo error.type.
Usa este evento para encontrar máquinas que se ejecutan con una fuente administrada inesperada, máquinas cuyo asistente de políticas está fallando y el motivo por el que una máquina se negó a iniciarse.
Requiere Claude Code v2.1.274 o posterior.
De forma predeterminada, el evento incluye las fuentes administradas y el estado del asistente de políticas, pero no los ajustes en sí. Para agregar el atributo redactado managed_settings.settings y el resumen managed_settings.resolved_sha256, establece OTEL_LOG_MANAGED_SETTINGS=1:
- Establécelo en el bloque
envde la configuración administrada, la configuración del usuario o--settings, o en el entorno con el que inicias Claude Code. Un valor en la configuración del proyecto o en la configuración local no lo activa, porque un repositorio clonado puede escribirlas. - La configuración administrada por el servidor puede establecerlo sin mostrar el cuadro de diálogo de aprobación de seguridad, porque la variable solo agrega la propia política redactada de tu organización a un evento que tu organización ya recibe.
En una sesión interactiva en una carpeta en la que no has 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 administrada o el estado del asistente de políticas cambió más adelante en la sesión, o"refused"cuando una política de configuración administrada detuvo la sesión. Claude Code envía un eventochangesolo cuando un atributo difiere del último evento que envió, y un valor de ajuste modificado cuenta incluso cuandoOTEL_LOG_MANAGED_SETTINGSestá desactivado -
error.type: por qué Claude Code detuvo la sesión. Solo está presente en los eventosrefused:"helper_failed": una ejecución del asistente de políticas falló"policy_invalid": la configuración administrada contiene un error que impide que Claude Code se inicie, o una fuente de administración no se pudo cargar por un motivo distinto de una lectura denegada, por lo que Claude Code no puede comprobar el inicio de sesión de la organización ni la aplicación de proveedores"provider_not_allowed": la sesión usaría un proveedor de API, o enviaría el tráfico de un proveedor a un host, que la lista administradaallowedProvidersno permite. Requiere Claude Code v2.1.285 o posterior"consent_rejected": el usuario rechazó el cuadro de diálogo de aprobación de seguridad de la configuración administrada por el servidor"force_refresh_failed": falló la obtención de la configuración que requiereforceRemoteSettingsRefresh"gateway_rejected": un gateway de Claude apps respondió a la carga de la configuración administrada con HTTP 403"version_below_minimum": esta versión de Claude Code es inferior arequiredMinimumVersiono superior arequiredMaximumVersion"_OTHER": la carga de la configuración administrada del gateway de Claude apps falló por otro motivo
-
managed_settings.sources: cada fuente administrada que entrega al menos una clave de política, de mayor a menor prioridad, incluidas las fuentes cuyas claves no surten efecto confirst-wins. Los valores son"remote","plist"o"hklm"para la política de MDM o del sistema operativo,"file"para los archivos de configuración administrada y los archivos complementarios,"parent"cuando un host integrador proporciona la configuración, y"hkcu"para el valor del registro HKCU de Windows cuando Claude Code lo lee. Una fuente que solo contiene claves de control, o que Claude Code no pudo leer, no aparece en la lista. Se emite como un arreglo de cadenas, vacío cuando ninguna fuente administrada entrega una clave de política -
managed_settings.source_behavior: el valor demanagedSourcesBehaviorque leyó Claude Code,"first-wins"o"merge"."first-wins"cuando ninguna fuente establece la clave -
managed_settings.helper.state: estado del asistente de políticas que configura la fuente de MDM o de archivo seleccionada:"ok": la salida del asistente sirve como configuración administrada"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": no hay ningún asistente configurado, o la fuente que lo configura no es una política de MDM ni un archivo de configuración administrada
-
managed_settings.helper.applied:"output"mientras la propia salida del asistente sirve como configuración administrada,"none"cuando no es así -
managed_settings.helper.entry:"policyHelper"cuando Claude Code seleccionó unpolicyHelper. Ausente cuando no seleccionó ningún asistente -
managed_settings.helper.path: lapathconfigurada del asistente. Está 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 administrada resuelta antes de la redacción, serializada como JSON con las 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 habilitación explícita porque una política corta se puede recuperar calculando el hash de conjeturas. Ausente cuando no se resolvió ninguna configuración administrada, y en los eventosrefused -
managed_settings.settings(cuandoOTEL_LOG_MANAGED_SETTINGS=1): los nombres y la estructura de la configuración administrada resuelta como una cadena JSON, con los valores redactados. Ausente en los eventosrefused. Claude Code lo construye a partir de su esquema de configuración:- Se exporta un nombre de ajuste que el esquema declara, y se omite una clave que no declara
- Los booleanos, los números y los 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]" - Cualquier otra cadena, como
model,apiKeyHelper, cada valor deenv, cada URL y cada comando, se exporta como"[REDACTED]" - Los nombres de las entradas de los mapas, como los nombres de variables de
envy los IDs de plugins, se exportan tal cual. Un ajuste cuyas entradas el esquema no tipa, comovimInsertModeRemaps, se exporta como un único"[REDACTED]", ysandbox.ignoreViolationsse exporta como una lista de sus listas de rutas sin los patrones de comandos - Una lista conserva su longitud, con cada entrada redactada según las mismas reglas
- Una regla de
permissions.allow,permissions.denyopermissions.askse exporta como el nombre de su 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 se muestran los campos numéricos y de opciones fijas como
typeytimeout, mientras que cada comando, URL,matchery condiciónifse exporta como"[REDACTED]"
Por ejemplo, una configuración administrada con
apiKeyHelper, dos variables deenvy una regla de denegación se exporta como{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}.Claude Code recorta el valor a 8 KB de UTF-8, y el valor recortado no es JSON válido
-
managed_settings.settings_truncated(cuandomanaged_settings.settingsestá presente):truecuando Claude Code recortómanaged_settings.settingsa 8 KB,falseen caso 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 de token, 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
[!NOTE]
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 en streaming para las métricas de costo y token exactamente una vez, incluso cuando un gateway o proxy detrás de ANTHROPIC_BASE_URL envía el uso en streaming de forma progresiva a lo largo de múltiples frames.
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 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 de intentos. CLAUDE_CODE_MAX_RETRIES tiene un valor predeterminado de 10 y está limitado a 15; con CLAUDE_CODE_RETRY_WATCHDOG establecido, el valor predeterminado es mayor y no hay límite.
Cuando la solicitud agota todos los reintentos en un error transitorio, attempt es como máximo uno más que ese límite efectivo: 11 por defecto.
Un valor más bajo aún puede significar que los reintentos se agotaron: attempt vuelve a empezar desde 1 cada vez que Claude Code vuelve a emitir la solicitud tras una falla de streaming.
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.
Asignar tokens de entrada a las convenciones semánticas GenAI de OpenTelemetry
Claude Code exporta los conteos de tokens de entrada tal como aparecen en el bloque de uso de la respuesta de la API, por lo que estos valores excluyen los tokens leídos desde o escritos en la caché de prompts:
input_tokensen el spanclaude_code.llm_requesty en el eventoapi_request- El tipo
"input"de la métricaclaude_code.token.usage
Claude Code no establece atributos gen_ai.usage.*. Las convenciones semánticas GenAI de OpenTelemetry indican que gen_ai.usage.input_tokens debe incluir los tokens leídos desde y escritos en la caché. Para calcular ese total:
- Desde el span o el evento: suma
input_tokens,cache_read_tokensycache_creation_tokens - Desde la métrica
claude_code.token.usage: suma sus tipos"input","cacheRead"y"cacheCreation"
Las convenciones también definen atributos separados para lecturas y escrituras de caché:
cache_read_tokenscorresponde agen_ai.usage.cache_read.input_tokenscache_creation_tokenscorresponde agen_ai.usage.cache_write.input_tokens. Las versiones anteriores de las convenciones nombran el atributo de escritura de cachégen_ai.usage.cache_creation.input_tokens, así que usa el nombre que espera tu backend.
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 que inician sesión en una Claude apps gateway a través de /login, donde es el asunto del IdP del token emitido por la puerta de enlace.
En una sesión que inicia un desarrollador, las llamadas de herramientas MCP, comandos Bash y ediciones de archivos se atribuyen por lo tanto al desarrollador. 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. En sesiones de canales de Claude Tag, Claude funciona como la identidad compartida de su organización en su lugar.
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: consulte Atributos estándar para la identidad que sus exportaciones llevan.
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 el contenido de los 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_decisiontool_decision: mantienetool_sourcey untool_nameredactado al literal"mcp_tool"para servidores configurados por el usuario, omite el contenido de los 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_parametersmcp_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 a herramienta permitida o denegada, y de dónde provino la decisión, como la configuración, un hook o el usuario | tool_decision |
decision, source, classifier_verdict, permission_mode, tool_name; tool_parameters cuando estableces OTEL_LOG_TOOL_DETAILS=1 |
| Qué comprobación rechazó una llamada a herramienta o requirió una solicitud de permiso para ella | safety_event donde category nombra la comprobación, como "managed_policy", "permission_rule", "hook" o "auto_mode_block". decision es "reject" para una llamada que no se ejecutó. Algunas llamadas no tienen evento de seguridad |
category, decision, reason_code, rule_source, tool_name, tool_use_id |
| El clasificador del modo automático permitió o bloqueó una llamada a herramienta, o Claude Code denegó la llamada sin un veredicto del clasificador | tool_decision donde classifier_verdict está presente. Para una denegación sin veredicto, classifier_verdict es "no_verdict" o "unavailable" |
classifier_verdict, permission_mode, tool_name; classifier_category cuando estableces OTEL_LOG_TOOL_DETAILS=1 |
| Escalada de modo de permiso | permission_mode_changed |
from_mode, to_mode, trigger |
| En qué modo de permisos se verificó cada llamada a herramienta, incluidas las llamadas que hacen los subagentes | tool_decision |
permission_mode, session.id |
| Hook de política bloqueó una acción | hook_execution_complete |
hook_event, num_blocking |
| Qué llamada a herramienta rechazó un hook, y qué resultado o fin de turno bloqueó un hook | safety_event donde category es "hook" y decision es "reject" para una llamada rechazada, o category es "hook_review" para un resultado o fin de turno bloqueado |
category, decision, hook_event; tool_use_id para una llamada a herramienta |
| El proxy de red del sandbox rechazó una conexión o solicitud de un comando de Bash o PowerShell | safety_event donde sandbox_violation_count está presente y no es "0" |
sandbox_violation_count, category, sandbox_enabled, tool_use_id |
| 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.
Mapear rutas de salida a controles administrados y eventos
La tabla empareja las rutas que pueden sacar contenido de la sesión de una máquina, además de la retención local, con las claves de configuración administrada que las restringen y los eventos que las registran. Para ver lo que el propio Claude Code envía a Anthropic, como los informes de /feedback, consulta Uso de datos. Los nombres enlazan a sus entradas de referencia, que indican los valores y los valores predeterminados.
| Ruta | Controles administrados | Eventos |
|---|---|---|
| Comandos de Bash y PowerShell | sandbox.enabled, sandbox.failIfUnavailable, sandbox.allowUnsandboxedCommands, sandbox.network.allowManagedDomainsOnly, sandbox.network.allowedDomains |
tool_decision, tool_result |
| Servidores MCP | allowedMcpServers, allowManagedMcpServersOnly, deniedMcpServers, managed-mcp.json |
mcp_server_connection, tool_decision, tool_result |
| Hooks | allowManagedHooksOnly, allowedHttpHookUrls |
hook_registered, hook_execution_start, hook_execution_complete |
| Plugins | strictKnownMarketplaces, disableSideloadFlags, syncClaudeAiPlugins, syncClaudeAiSkills |
plugin_installed, plugin_loaded |
| WebFetch | permissions.deny, allowManagedPermissionRulesOnly |
tool_decision, tool_result |
| Herramientas que suben contenido a claude.ai, como Artifact | permissions.deny, enableArtifact |
tool_decision, tool_result |
| Remote Control | disableRemoteControl |
Sin evento dedicado |
| Retención local de transcripciones | cleanupPeriodDays |
retention_sweep |
Las entradas de allowedHttpHookUrls, managed-mcp.json y los eventos de hooks requieren más de lo que muestra la tabla:
allowedHttpHookUrls: las entradas se combinan entre los archivos de configuración, por lo que un desarrollador puede agregar entradas a una lista administrada vacía.allowManagedHooksOnlydecide qué hooks se ejecutanmanaged-mcp.json: para desactivar MCP, consulta Deshabilitar MCP por completo. Para confirmar que Claude Code lee el archivo, consulta Validar la configuración- Eventos de hooks: Claude Code registra
hook_execution_startyhook_execution_completeuna vez por evento de hook, abarcando todos los hooks coincidentes.OTEL_LOG_TOOL_DETAILS=1por sí solo no registra la URL de un hook HTTP. La configuración del hook aparece solo enhook_definitions, que además requiere el tracing beta detallado
OTEL_LOG_TOOL_DETAILS=1 agrega cadenas de comandos, nombres de servidores y herramientas, y la entrada de las herramientas a estos eventos. Ese detalle puede contener el mismo contenido sensible que la propia sesión, así que habilítalo solo cuando tu recopilador esté aprobado para almacenar ese contenido.
Verificar el barrido de retención
Para dar a todas las máquinas el mismo período de retención, establece cleanupPeriodDays en la configuración administrada. Para verificar que las máquinas ejecutan el barrido con ese valor, recopila el evento retention_sweep. period_days y los contadores son cadenas, así que conviértelos a números antes de compararlos.
| Lo que informa una máquina | Lo que significa |
|---|---|
result es "skipped" |
Claude Code pausó el barrido. skip_reason indica la causa |
used_default es "true", o period_days difiere de tu valor administrado |
La máquina no está aplicando tu cleanupPeriodDays administrado |
error_count es mayor que cero |
El barrido encontró errores al listar o eliminar archivos, por lo que pueden quedar datos con antigüedad superior al período de retención |
files_past_cutoff es mayor que cero |
El barrido no pudo eliminar archivos con antigüedad superior al período de retención, o encontró carpetas obsoletas de skills y plugins sincronizados. Interprétalo junto con error_count |
| Ningún evento | No es un fallo por sí solo |
Una máquina que funciona según lo previsto puede quedarse sin evento por motivos como estos:
- Nadie inicia Claude Code: no se ejecuta ningún barrido, y la máquina conserva sus datos hasta el siguiente inicio
- Una sesión permanece abierta: Claude Code ejecuta el barrido como máximo una vez por sesión
- Una sesión termina antes de tiempo: un barrido que no ha terminado cuando la sesión se cierra no emite nada, y tampoco uno que se detiene por un error inesperado
El barrido no cubre todas las rutas. Se conservan hasta que los elimines enumera lo que se conserva, y Borrar datos locales muestra cómo eliminarlo.
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, inicie Claude Code con claude --debug-file <path> y verifique ese registro 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:
Backends 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
Backends para eventos y 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
Backends 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 locales 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 locales 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 tus canalizaciones de recopilador o paneles filtran por service.name = claude-code, agrega claude-code-desktop al filtro para capturar también la telemetría de sesiones locales 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 prompt del usuario no se recopila por defecto. Solo se registra la longitud del prompt. Para incluir el contenido del prompt, establece
OTEL_LOG_USER_PROMPTS=1. Cuando está habilitado:-
Los eventos
user_promptllevan el texto del prompt en dos atributos,promptyprompt_text. Si eliminas o enmascaras el texto del prompt del evento por nombre de atributo en tu recopilador, nombra ambos atributos en la reglaEste procesador
attributesde OpenTelemetry Collector elimina ambos atributos en los pipelines que lo incluyen:processors: attributes/drop-prompt-text: actions: - key: prompt action: delete - key: prompt_text action: delete -
Con el rastreo activado, el span
claude_code.interactionlleva el texto del prompt en su atributouser_prompt -
Bajo el rastreo beta detallado, los spans también llevan los nuevos mensajes del usuario, resultados de herramientas y recordatorios del sistema enviados con cada solicitud, el texto del prompt del sistema y la salida del modelo. Atributos de contenido bajo el rastreo beta detallado enumera cada atributo. El evento
claude_code.system_promptlleva el prompt del sistema completo
-
- 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 endpoint de OTel que configures, nunca a Anthropic. Cuando esta variable no está establecida,OTEL_LOG_USER_PROMPTSse utiliza como respaldo, así que estableceOTEL_LOG_ASSISTANT_RESPONSES=0si deseas contenido del prompt sin contenido de respuesta en los eventos. Bajo el rastreo beta detallado, el spanclaude_code.llm_requestsigue llevando la salida del modelo enresponse.model_output, que sigue aOTEL_LOG_USER_PROMPTSen lugar de a esta variable - 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 el flag desactivado. Estos datos se envían solo al endpoint 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 contadores de costo y token y los eventos
api_request,api_erroryapi_refusalllevan nombres reales de agente, skill, plugin y servidor MCP y herramienta en sus atributos de atribución - El span
claude_code.toollleva atributos derivados de la entrada comofile_path. Bajo el rastreo beta detallado también lleva un atributotool_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, salida de comandos Bash, y lo que devuelven herramientas MCP, WebFetch y WebSearch, truncado en el límite de contenido (60 KB por defecto) por atributo. Los resultados de herramientas MCP, WebFetch y WebSearch requieren Claude Code v2.1.283 o posterior. 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).