Saltar al contenido principal

Documentation Index

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

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

Rastrea el uso de Claude Code, costos y actividad de herramientas en toda tu organización exportando datos de telemetría a través de OpenTelemetry (OTel). Claude Code exporta métricas como datos de series temporales a través del protocolo estándar de métricas, eventos a través del protocolo de registros/eventos, y opcionalmente trazas distribuidas a través del protocolo de trazas. Configura tus backends de métricas, registros y trazas para que coincidan con tus requisitos de monitoreo.

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
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
Los intervalos de exportación predeterminados son 60 segundos para métricas y 5 segundos para registros. Durante la configuración, es posible que desees usar intervalos más cortos para propósitos de depuración. Recuerda restablecer estos valores para uso en producció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. Esto permite el control centralizado de los ajustes de telemetría en toda una organización. 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"
  }
}
Los ajustes administrados pueden distribuirse a través de MDM (Mobile Device Management) u otras soluciones de gestión de dispositivos. Las variables de entorno definidas en el archivo de configuración administrada tienen alta precedencia y no pueden ser anuladas por los usuarios.
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.

Detalles de configuración

Variables de configuración comunes

Variable de EntornoDescripciónValores de Ejemplo
CLAUDE_CODE_ENABLE_TELEMETRYHabilita la recopilación de telemetría (requerido)1
OTEL_METRICS_EXPORTERTipos de exportador de métricas, separados por comas. Usa none para deshabilitarconsole, otlp, prometheus, none
OTEL_LOGS_EXPORTERTipos de exportador de registros/eventos, separados por comas. Usa none para deshabilitarconsole, otlp, none
OTEL_EXPORTER_OTLP_PROTOCOLProtocolo para exportador OTLP, se aplica a todas las señalesgrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINTPunto final del recopilador OTLP para todas las señaleshttp://localhost:4317
OTEL_EXPORTER_OTLP_METRICS_PROTOCOLProtocolo para métricas, anula la configuración generalgrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_METRICS_ENDPOINTPunto final de métricas OTLP, anula la configuración generalhttp://localhost:4318/v1/metrics
OTEL_EXPORTER_OTLP_LOGS_PROTOCOLProtocolo para registros, anula la configuración generalgrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTPunto final de registros OTLP, anula la configuración generalhttp://localhost:4318/v1/logs
OTEL_EXPORTER_OTLP_HEADERSEncabezados de autenticación para OTLPAuthorization=Bearer token
OTEL_METRIC_EXPORT_INTERVALIntervalo de exportación en milisegundos (predeterminado: 60000)5000, 60000
OTEL_LOGS_EXPORT_INTERVALIntervalo de exportación de registros en milisegundos (predeterminado: 5000)1000, 10000
OTEL_LOG_USER_PROMPTSHabilitar registro del contenido del mensaje del usuario (predeterminado: deshabilitado)1 para habilitar
OTEL_LOG_TOOL_DETAILSHabilitar registro de parámetros de herramientas e argumentos de entrada en eventos de herramientas y atributos de span de traza: comandos Bash, nombres de servidor MCP y herramienta, nombres de habilidades, e entrada de herramienta. También habilita nombres de comandos personalizados, de plugin y MCP en eventos user_prompt (predeterminado: deshabilitado)1 para habilitar
OTEL_LOG_TOOL_CONTENTHabilitar registro de contenido de entrada y salida de herramientas en eventos de span (predeterminado: deshabilitado). Requiere trazas. El contenido se trunca en 60 KB1 para habilitar
OTEL_LOG_RAW_API_BODIESEmitir el cuerpo completo de solicitud y respuesta JSON de la API de Mensajes de Anthropic como eventos de registro api_request_body / api_response_body (predeterminado: deshabilitado). Los cuerpos incluyen el historial de conversación completo. Habilitar esto implica consentimiento a todo lo que OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS, y OTEL_LOG_TOOL_CONTENT revelarían1 para cuerpos en línea truncados en 60 KB, o file:<dir> para cuerpos sin truncar en disco con un puntero body_ref en el evento
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCEPreferencia de temporalidad de métricas (predeterminado: delta). Establece en cumulative si tu backend espera temporalidad acumulativadelta, cumulative
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MSIntervalo para actualizar encabezados dinámicos (predeterminado: 1740000ms / 29 minutos)900000

Autenticación mTLS

Cómo configures certificados de cliente para el exportador OTLP depende del protocolo OTLP en uso para esa señal, establecido a través de OTEL_EXPORTER_OTLP_PROTOCOL o la anulación por señal. La misma configuración se aplica a métricas, registros y trazas.
ProtocoloVariables de certificado de clienteConfiar en la CA del recopilador con
http/protobuf, http/jsonCLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY, y opcionalmente CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. Consulta Configuración de redNODE_EXTRA_CA_CERTS
grpcOTEL_EXPORTER_OTLP_CLIENT_KEY y OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, o las variantes por señal como OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY para usar un certificado diferente por señalOTEL_EXPORTER_OTLP_CERTIFICATE
Para grpc, el SDK de OpenTelemetry lee las variables OTLP estándar directamente, por lo que las configuraciones existentes que establecen las variables de métricas por señal continúan funcionando.

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 EntornoDescripciónValor PredeterminadoEjemplo para Deshabilitar
OTEL_METRICS_INCLUDE_SESSION_IDIncluir atributo session.id en métricastruefalse
OTEL_METRICS_INCLUDE_VERSIONIncluir atributo app.version en métricasfalsetrue
OTEL_METRICS_INCLUDE_ACCOUNT_UUIDIncluir atributos user.account_uuid y user.account_id en métricastruefalse
Estas variables ayudan a controlar la cardinalidad de las métricas, lo que afecta los requisitos de almacenamiento y el rendimiento de las consultas en tu backend de métricas. Una cardinalidad más baja generalmente significa mejor rendimiento y costos de almacenamiento más bajos, pero datos menos granulares para el análisis.

Trazas (beta)

Las trazas distribuidas exportan spans que vinculan cada mensaje del usuario a las solicitudes de API y ejecuciones de herramientas que desencadena, para que puedas ver una solicitud completa como una única traza en tu backend de trazas. Las trazas están deshabilitadas por defecto. Para habilitarlas, establece tanto CLAUDE_CODE_ENABLE_TELEMETRY=1 como CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, luego establece OTEL_TRACES_EXPORTER para elegir dónde se envían los spans. Las trazas reutilizan la configuración OTLP común para punto final, protocolo, encabezados, y mTLS.
Variable de EntornoDescripciónValores de Ejemplo
CLAUDE_CODE_ENHANCED_TELEMETRY_BETAHabilitar trazas de span (requerido). ENABLE_ENHANCED_TELEMETRY_BETA también se acepta1
OTEL_TRACES_EXPORTERTipos de exportador de trazas, separados por comas. Usa none para deshabilitarconsole, otlp, none
OTEL_EXPORTER_OTLP_TRACES_PROTOCOLProtocolo para trazas, anula OTEL_EXPORTER_OTLP_PROTOCOLgrpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTPunto final de trazas OTLP, anula OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:4318/v1/traces
OTEL_TRACES_EXPORT_INTERVALIntervalo de exportación de lote de span en milisegundos (predeterminado: 5000)1000, 10000
Los spans redactan el texto del mensaje del usuario, los detalles de entrada de herramientas y el contenido de herramientas por defecto. Establece OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1, y OTEL_LOG_TOOL_CONTENT=1 para incluirlos. Cuando el trazado está activo, los subprocesos de Bash y PowerShell heredan automáticamente una variable de entorno TRACEPARENT que contiene el contexto de traza W3C del span de ejecución de herramienta activo. Esto permite que cualquier subproceso que lea TRACEPARENT padre sus propios spans bajo la misma traza, habilitando trazado distribuido de extremo a extremo a través de scripts y comandos que Claude ejecuta. En sesiones del SDK de Agent y no interactivas iniciadas con -p, Claude Code también lee TRACEPARENT y TRACESTATE de su propio entorno cuando inicia cada span de interacción. Esto permite que un proceso de incrustación pase su contexto de traza W3C activo al subproceso para que los spans de Claude Code aparezcan como hijos de la traza distribuida del llamador. Las sesiones interactivas ignoran TRACEPARENT entrante para evitar heredar accidentalmente valores ambientes de entornos de CI o contenedor.

Jerarquía de spans

Cada mensaje del usuario inicia un span raíz claude_code.interaction. Las llamadas de API, llamadas de herramientas y ejecuciones de hooks se registran como sus hijos. Los spans de herramientas tienen dos spans hijos propios: uno para el tiempo dedicado a esperar una decisión de permiso y otro para la ejecución en sí. Cuando la herramienta Task genera un subagente, los spans de API y herramienta del subagente se anidan bajo el span claude_code.tool del padre.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook                    (requiere trazado beta detallado)
└── claude_code.tool
    ├── claude_code.tool.blocked_on_user
    ├── claude_code.tool.execution
    └── (herramienta Task) spans de claude_code.llm_request / claude_code.tool del subagente
En sesiones del SDK de Agent y claude -p, claude_code.interaction en sí se convierte en un hijo del span del llamador cuando TRACEPARENT se establece en el entorno.

Atributos de spans

Cada span lleva los atributos estándar más un atributo span.type que coincide con su nombre. Las tablas a continuación enumeran los atributos adicionales establecidos en cada span. Los spans llm_request, tool.execution, y hook establecen el estado de OpenTelemetry ERROR cuando registran una falla; los otros spans siempre terminan con estado UNSET. claude_code.interaction
AtributoDescripciónControlado Por
user_promptTexto del mensaje. El valor es <REDACTED> a menos que la puerta esté establecidaOTEL_LOG_USER_PROMPTS
user_prompt_lengthLongitud del mensaje en caracteres
interaction.sequenceContador basado en 1 de interacciones en esta sesión
interaction.duration_msDuración de pared del turno
claude_code.llm_request
AtributoDescripciónControlado Por
modelIdentificador de modelo
gen_ai.systemSiempre anthropic. Convención semántica de GenAI de OpenTelemetry
gen_ai.request.modelMismo valor que model. Convención semántica de GenAI de OpenTelemetry
query_sourceSubsistema que emitió la solicitud, como repl_main_thread o un nombre de subagente
agent_idIdentificador del subagente o compañero que emitió la solicitud. Ausente en la sesión principal
parent_agent_idIdentificador del agente que generó este. Ausente para la sesión principal y para agentes generados directamente desde ella
speedfast o normal
llm_request.contextinteraction, tool, o standalone dependiendo del span padre
duration_msDuración de pared incluyendo reintentos
ttft_msTiempo al primer token en milisegundos
input_tokensRecuento de tokens de entrada del bloque de uso de API
output_tokensRecuento de tokens de salida
cache_read_tokensTokens leídos del caché de mensaje
cache_creation_tokensTokens escritos en el caché de mensaje
request_idID de solicitud de API de Anthropic del encabezado de respuesta request-id
gen_ai.response.idMismo valor que request_id. Convención semántica de GenAI de OpenTelemetry
client_request_idx-client-request-id generado por cliente del intento final
attemptIntentos totales realizados para esta solicitud
successtrue o false
status_codeCódigo de estado HTTP cuando la solicitud falló
errorMensaje de error cuando la solicitud falló
response.has_tool_calltrue cuando la respuesta contenía bloques de uso de herramientas
stop_reasonRespuesta de API stop_reason, como end_turn, tool_use, max_tokens, stop_sequence, pause_turn, o refusal
gen_ai.response.finish_reasonsMismo valor que stop_reason, envuelto en una matriz de cadena. Convención semántica de GenAI de OpenTelemetry
Cada intento de reintento también se registra como un evento de span gen_ai.request.attempt con atributos attempt e client_request_id. claude_code.tool
AtributoDescripciónControlado Por
tool_nameNombre de la herramienta
duration_msDuración de pared incluyendo espera de permiso y ejecución
result_tokensTamaño aproximado de token del resultado de la herramienta
file_pathRuta de archivo de destino para herramientas Read, Edit, y WriteOTEL_LOG_TOOL_DETAILS
full_commandCadena de comando para la herramienta BashOTEL_LOG_TOOL_DETAILS
skill_nameNombre de habilidad para la herramienta SkillOTEL_LOG_TOOL_DETAILS
subagent_typeTipo de subagente para la herramienta TaskOTEL_LOG_TOOL_DETAILS
Cuando OTEL_LOG_TOOL_CONTENT=1, este span también registra un evento de span tool.output cuyos atributos contienen los cuerpos de entrada y salida de la herramienta, truncados en 60 KB por atributo. claude_code.tool.blocked_on_user
AtributoDescripciónControlado Por
duration_msTiempo dedicado a esperar la decisión de permiso
decisionaccept o reject
sourceFuente de decisión, coincidiendo con el evento Tool decision event
claude_code.tool.execution
AtributoDescripciónControlado Por
duration_msTiempo dedicado a ejecutar el cuerpo de la herramienta
successtrue o false
errorCadena de categoría de error cuando la ejecución falló, como Error:ENOENT o ShellError. Contiene el mensaje de error completo en su lugar cuando la puerta está establecidaOTEL_LOG_TOOL_DETAILS
claude_code.hook Este span se emite solo cuando el trazado beta detallado está activo, lo que requiere ENABLE_BETA_TRACING_DETAILED=1 y BETA_TRACING_ENDPOINT además de la configuración del exportador de trazas anterior. En sesiones de CLI interactivas, esto también requiere que tu organización esté en la lista de permitidos para la característica. Las sesiones del SDK de Agent y no interactivas -p no están controladas. No se emite cuando solo CLAUDE_CODE_ENHANCED_TELEMETRY_BETA está establecido.
AtributoDescripciónControlado Por
hook_eventTipo de evento de hook, como PreToolUse
hook_nameNombre completo del hook, como PreToolUse:Write
num_hooksNúmero de comandos de hook coincidentes ejecutados
hook_definitionsConfiguración de hook serializada en JSONOTEL_LOG_TOOL_DETAILS
duration_msDuración de pared de todos los hooks coincidentes
num_successRecuento de hooks que se completaron exitosamente
num_blockingRecuento de hooks que devolvieron una decisión de bloqueo
num_non_blocking_errorRecuento de hooks que fallaron sin bloquear
num_cancelledRecuento de hooks cancelados antes de completarse
Atributos adicionales que contienen contenido como new_context, system_prompt_preview, user_system_prompt, tool_input, y response.model_output se emiten solo cuando el trazado beta detallado está activo. No son parte del esquema de span estable. user_system_prompt además requiere OTEL_LOG_USER_PROMPTS=1. Lleva solo el texto del mensaje del sistema que proporcionas a través de la opción systemPrompt del SDK o las banderas --system-prompt y --append-system-prompt, truncado en 60 KB, y se emite una vez por sesión en lugar de por solicitud.

Encabezados dinámicos

Para entornos empresariales que requieren autenticación dinámica, puedes configurar un script para generar encabezados dinámicamente. Los encabezados dinámicos se aplican solo a los protocolos http/protobuf e http/json. El exportador grpc usa solo el valor estático OTEL_EXPORTER_OTLP_HEADERS.

Configuración de ajustes

Agrega a tu .claude/settings.json:
{
  "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"
}

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)\"}"

Comportamiento de actualización

El script auxiliar de encabezados se ejecuta al inicio y periódicamente después para admitir la actualización de tokens. Por defecto, el script se ejecuta cada 29 minutos. Personaliza el intervalo con la variable de entorno CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.

Soporte de organización multi-equipo

Las organizaciones con múltiples equipos o departamentos pueden agregar atributos personalizados para distinguir entre diferentes grupos usando la variable de entorno OTEL_RESOURCE_ATTRIBUTES:
# Agregar atributos personalizados para identificación de equipo
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Estos atributos personalizados se incluirán en todas las métricas y eventos, permitiéndote:
  • Filtrar métricas por equipo o departamento
  • Rastrear costos por centro de costos
  • Crear paneles específicos del equipo
  • Configurar alertas para equipos específicos
Requisitos de formato importantes para OTEL_RESOURCE_ATTRIBUTES:La variable de entorno OTEL_RESOURCE_ATTRIBUTES utiliza pares clave=valor separados por comas con requisitos de formato estrictos:
  • No se permiten espacios: Los valores no pueden contener espacios. Por ejemplo, user.organizationName=My Company es inválido
  • Formato: Debe ser pares clave=valor separados por comas: key1=value1,key2=value2
  • Caracteres permitidos: Solo caracteres US-ASCII excluyendo caracteres de control, espacios en blanco, comillas dobles, comas, puntos y comas, y barras invertidas
  • Caracteres especiales: Los caracteres fuera del rango permitido deben estar codificados en porcentaje
Ejemplos:
# ❌ Inválido - contiene espacios
export OTEL_RESOURCE_ATTRIBUTES="org.name=John's Organization"

# ✅ Válido - usar guiones bajos o camelCase en su lugar
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

# ✅ Válido - codificar en porcentaje caracteres especiales si es necesario
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
Nota: envolver valores entre comillas no escapa espacios. Por ejemplo, org.name="My Company" resulta en el valor literal "My Company" (con comillas incluidas), no My Company.

Configuraciones de ejemplo

Establece estas variables de entorno antes de ejecutar claude. Cada bloque muestra una configuración completa para un exportador diferente o escenario de implementación:
# Depuración de consola (intervalos de 1 segundo)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000

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

# Prometheus
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus

# Múltiples exportadores
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

# Diferentes puntos finales/backends para métricas y registros
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

# Solo métricas (sin eventos/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

# Solo eventos/registros (sin métricas)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

Métricas y eventos disponibles

Atributos estándar

Todas las métricas y eventos comparten estos atributos estándar:
AtributoDescripciónControlado Por
session.idIdentificador único de sesiónOTEL_METRICS_INCLUDE_SESSION_ID (predeterminado: true)
app.versionVersión actual de Claude CodeOTEL_METRICS_INCLUDE_VERSION (predeterminado: false)
organization.idUUID de organización (cuando está autenticado)Siempre incluido cuando está disponible
user.account_uuidUUID de cuenta (cuando está autenticado)OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true)
user.account_idID de cuenta en formato etiquetado que coincide con las API de administrador de Anthropic (cuando está autenticado), como user_01BWBeN28...OTEL_METRICS_INCLUDE_ACCOUNT_UUID (predeterminado: true)
user.idIdentificador anónimo de dispositivo/instalación, generado por instalación de Claude CodeSiempre incluido
user.emailDirección de correo electrónico del usuario (cuando está autenticado a través de OAuth)Siempre incluido cuando está disponible
terminal.typeTipo de terminal, como iTerm.app, vscode, cursor, o tmuxSiempre incluido cuando se detecta
Los eventos incluyen adicionalmente los siguientes atributos. Estos nunca se adjuntan a las métricas porque causarían cardinalidad ilimitada:
  • prompt.id: UUID que correlaciona un mensaje del usuario con todos los eventos posteriores hasta el siguiente mensaje. Consulta Atributos de correlación de eventos.
  • workspace.host_paths: directorios de espacio de trabajo del host seleccionados en la aplicación de escritorio, como una matriz de cadenas

Métricas

Claude Code exporta las siguientes métricas:
Nombre de MétricaDescripciónUnidad
claude_code.session.countRecuento de sesiones CLI iniciadascount
claude_code.lines_of_code.countRecuento de líneas de código modificadascount
claude_code.pull_request.countNúmero de solicitudes de extracción creadascount
claude_code.commit.countNúmero de confirmaciones de git creadascount
claude_code.cost.usageCosto de la sesión de Claude CodeUSD
claude_code.token.usageNúmero de tokens utilizadostokens
claude_code.code_edit_tool.decisionRecuento de decisiones de permisos de herramienta de edición de códigocount
claude_code.active_time.totalTiempo activo total en segundoss

Detalles de métricas

Cada métrica incluye los atributos estándar enumerados anteriormente. Las métricas con atributos adicionales específicos del contexto se indican a continuación.

Contador de sesión

Se incrementa al inicio de cada sesión. Atributos:
  • Todos los atributos estándar
  • start_type: Cómo se inició la sesión. Uno de "fresh", "resume", o "continue"

Contador de líneas de código

Se incrementa cuando se agrega o se elimina código. Atributos:

Contador de solicitud de extracción

Se incrementa cuando Claude Code crea una solicitud de extracción o solicitud de fusión a través de un comando de shell o una herramienta MCP. Atributos:

Contador de confirmación

Se incrementa al crear confirmaciones de git a través de Claude Code. Atributos:

Contador de costo

Se incrementa después de cada solicitud de API. Atributos:
  • Todos los atributos estándar
  • model: Identificador de modelo (por ejemplo, “claude-sonnet-4-6”)
  • query_source: Categoría del subsistema que emitió la solicitud. Uno de "main", "subagent", o "auxiliary"
  • speed: "fast" cuando la solicitud utilizó modo rápido. Ausente de otra manera
  • effort: Nivel de esfuerzo aplicado a la solicitud: "low", "medium", "high", "xhigh", o "max". Ausente cuando el modelo no admite esfuerzo.
  • agent.name: Tipo de subagente que emitió la solicitud. Los nombres de agentes integrados y de plugins del mercado oficial aparecen tal cual. Otros nombres de agentes definidos por el usuario se reemplazan con "custom". Ausente cuando la solicitud no fue emitida por un tipo de subagente nombrado.
  • skill.name: Habilidad activa para la solicitud, establecida por la herramienta Skill, un comando /, o heredada por un subagente generado. Los nombres de habilidades integradas, agrupadas, definidas por el usuario y de plugins del mercado oficial aparecen tal cual. Los nombres de habilidades de plugins de terceros se reemplazan con "third-party". Ausente cuando no hay habilidad activa.
  • plugin.name: Plugin propietario cuando la habilidad activa o subagente es proporcionado por un plugin. Los nombres de plugins del mercado oficial aparecen tal cual. Los nombres de plugins de terceros se reemplazan con "third-party". Ausente cuando ni la habilidad ni el subagente tienen un plugin propietario.
  • marketplace.name: Mercado desde el que se instaló el plugin propietario. Solo se emite para plugins del mercado oficial. Ausente de otra manera.

Contador de tokens

Se incrementa después de cada solicitud de API. Atributos:
  • Todos los atributos estándar
  • type: ("input", "output", "cacheRead", "cacheCreation")
  • model: Identificador de modelo (por ejemplo, “claude-sonnet-4-6”)
  • query_source: Categoría del subsistema que emitió la solicitud. Uno de "main", "subagent", o "auxiliary"
  • speed: "fast" cuando la solicitud utilizó modo rápido. Ausente de otra manera
  • effort: Nivel de esfuerzo aplicado a la solicitud. Consulta Contador de costo para detalles.
  • agent.name, skill.name, plugin.name, marketplace.name: Atribución de habilidad, plugin y agente para la solicitud. Consulta Contador de costo para definiciones y comportamiento de redacción.

Contador de decisión de herramienta de edición de código

Se incrementa cuando el usuario acepta o rechaza el uso de 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: Fuente de 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

Rastrea el tiempo real dedicado a usar activamente Claude Code, excluyendo tiempo inactivo. Esta métrica se incrementa durante interacciones del usuario (escribir, leer respuestas) y durante procesamiento de CLI (ejecución de herramientas, generación de respuestas de IA). Atributos:
  • Todos los atributos estándar
  • type: "user" para interacciones de teclado, "cli" para ejecución de herramientas y respuestas de IA

Eventos

Claude Code exporta los siguientes eventos a través de registros/eventos de OpenTelemetry (cuando OTEL_LOGS_EXPORTER está configurado):

Atributos de correlación de eventos

Cuando un usuario envía un mensaje, Claude Code puede hacer múltiples llamadas de API y ejecutar varias herramientas. El atributo prompt.id te permite vincular todos esos eventos al único mensaje que los desencadenó.
AtributoDescripción
prompt.idIdentificador UUID v4 que vincula todos los eventos producidos mientras se procesa un único mensaje del usuario
Para rastrear toda la actividad desencadenada por un único mensaje, 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 ocurrió mientras se procesaba ese mensaje.
prompt.id se excluye intencionalmente de las métricas porque cada mensaje genera un ID único, lo que crearía un número siempre creciente de series temporales. Úsalo solo para análisis a nivel de evento y auditoría.

Evento de mensaje del usuario

Se registra cuando un usuario envía un mensaje. Nombre del Evento: claude_code.user_prompt Atributos:
  • Todos los atributos estándar
  • event.name: "user_prompt"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • prompt_length: Longitud del mensaje
  • prompt: Contenido del mensaje (redactado por defecto, habilitar con OTEL_LOG_USER_PROMPTS=1)
  • command_name: Nombre del comando cuando el mensaje invoca uno. Los nombres de comandos integrados y agrupados como compact o debug se emiten tal cual; los alias como reset se emiten como se escribieron en lugar del nombre canónico. Los nombres de comandos personalizados, de plugin y MCP se contraen a custom o mcp a menos que OTEL_LOG_TOOL_DETAILS=1 esté establecido
  • command_source: Origen del comando cuando está presente: builtin, custom, o mcp. Los comandos proporcionados por plugins reportan como custom

Evento de resultado de herramienta

Se registra cuando una herramienta completa la ejecución. Nombre del Evento: claude_code.tool_result Atributos:
  • Todos los atributos estándar
  • event.name: "tool_result"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • tool_name: Nombre de la herramienta
  • tool_use_id: Identificador único para esta invocación de herramienta. Coincide con el tool_use_id pasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.
  • success: "true" o "false"
  • duration_ms: Tiempo de ejecución en milisegundos
  • error_type: Cadena de categoría de error cuando la herramienta falló, como "Error:ENOENT" o "ShellError"
  • error (cuando OTEL_LOG_TOOL_DETAILS=1): Mensaje de error completo cuando la herramienta falló
  • decision_type: Ya sea "accept" o "reject"
  • decision_source: Fuente de 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.
  • tool_input_size_bytes: Tamaño de la entrada de herramienta serializada en JSON en bytes
  • tool_result_size_bytes: Tamaño del resultado de la herramienta en bytes
  • mcp_server_scope: Identificador de alcance del servidor MCP (para herramientas MCP)
  • tool_parameters (cuando OTEL_LOG_TOOL_DETAILS=1): Cadena JSON que contiene parámetros específicos de la herramienta:
    • Para herramienta Bash: incluye bash_command, full_command, timeout, description, dangerouslyDisableSandbox, y git_commit_id (el SHA del commit, cuando un comando git commit tiene éxito)
    • Para herramientas MCP: incluye mcp_server_name, mcp_tool_name
    • Para herramienta Skill: incluye skill_name
    • Para herramienta Task: incluye subagent_type
  • tool_input (cuando OTEL_LOG_TOOL_DETAILS=1): Argumentos de herramienta serializados en JSON. Los valores individuales superiores a 512 caracteres se truncan, y la carga útil completa está limitada a aproximadamente 4 K caracteres. Se aplica a todas las herramientas, incluidas las herramientas MCP.

Evento de solicitud de API

Se registra para cada solicitud de API a Claude. Nombre del Evento: claude_code.api_request Atributos:
  • Todos los atributos estándar
  • event.name: "api_request"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • model: Modelo utilizado (por ejemplo, “claude-sonnet-4-6”)
  • cost_usd: Costo estimado en USD
  • duration_ms: Duración de la solicitud en milisegundos
  • input_tokens: Número de tokens de entrada
  • output_tokens: Número de tokens de salida
  • cache_read_tokens: Número de tokens leídos del caché
  • cache_creation_tokens: Número de tokens utilizados para la creación del caché
  • request_id: ID de solicitud de API de Anthropic del encabezado request-id de la respuesta, como "req_011...". Presente solo cuando la API devuelve uno.
  • speed: "fast" o "normal", indicando si el modo rápido estaba activo
  • query_source: Subsistema que emitió la solicitud, como "repl_main_thread", "compact", o un nombre de subagente
  • effort: Nivel de esfuerzo aplicado a la solicitud: "low", "medium", "high", "xhigh", o "max". Ausente cuando el modelo no admite esfuerzo.

Evento de error de API

Se registra cuando una solicitud de API a Claude falla. Nombre del Evento: claude_code.api_error Atributos:
  • Todos los atributos estándar
  • event.name: "api_error"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • model: Modelo utilizado (por ejemplo, “claude-sonnet-4-6”)
  • error: Mensaje de error
  • status_code: Código de estado HTTP como número. Ausente para errores no HTTP como fallos de conexión.
  • duration_ms: Duración de la solicitud en milisegundos
  • attempt: Número total de intentos realizados, incluyendo la solicitud inicial (1 significa que no ocurrieron reintentos)
  • request_id: ID de solicitud de API de Anthropic del encabezado request-id de la respuesta, como "req_011...". Presente solo cuando la API devuelve uno.
  • speed: "fast" o "normal", indicando si el modo rápido estaba activo
  • query_source: Subsistema que emitió la solicitud, como "repl_main_thread", "compact", o un nombre de subagente
  • effort: Nivel de esfuerzo aplicado a la solicitud. Ausente cuando el modelo no admite esfuerzo.

Evento de cuerpo de solicitud de API

Se registra para cada intento de solicitud de API cuando OTEL_LOG_RAW_API_BODIES está establecido. Se emite un evento por intento, por lo que los reintentos con parámetros ajustados producen cada uno su propio evento. Nombre del Evento: claude_code.api_request_body Atributos:
  • Todos los atributos estándar
  • event.name: "api_request_body"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • body: Parámetros de solicitud de API de Mensajes serializados en JSON (mensaje del sistema, mensajes, herramientas, etc.), truncados en 60 KB. El contenido de pensamiento extendido en turnos de asistente anteriores 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.json que 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 cuando OTEL_LOG_RAW_API_BODIES=file:<dir>, o unidades de código UTF-16 cuando =1
  • body_truncated: "true" cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.
  • model: Identificador de modelo de los parámetros de solicitud
  • query_source: Subsistema que emitió la solicitud (por ejemplo, "compact")

Evento de cuerpo de respuesta de API

Se registra para cada respuesta de API exitosa cuando OTEL_LOG_RAW_API_BODIES está establecido. 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 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • body: Respuesta de API de Mensajes serializada en JSON (id, bloques de contenido, uso, razón de parada), truncada en 60 KB. 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.json que 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 cuando OTEL_LOG_RAW_API_BODIES=file:<dir>, o unidades de código UTF-16 cuando =1
  • body_truncated: "true" cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.
  • model: Identificador de modelo
  • query_source: Subsistema que emitió la solicitud
  • request_id: ID de solicitud de API de Anthropic del encabezado request-id de la respuesta, como "req_011...". Presente solo cuando la API devuelve uno.

Evento de decisión de herramienta

Se registra cuando se toma una decisión de permiso de herramienta (aceptar/rechazar). Nombre del Evento: claude_code.tool_decision Atributos:
  • Todos los atributos estándar
  • event.name: "tool_decision"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • tool_name: Nombre de la herramienta (por ejemplo, “Read”, “Edit”, “Write”, “NotebookEdit”)
  • tool_use_id: Identificador único para esta invocación de herramienta. Coincide con el tool_use_id pasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.
  • decision: Ya sea "accept" o "reject"
  • source: Fuente de decisión:
    • "config": Decidido automáticamente sin solicitar, basado en configuración del proyecto, reglas de permiso en la configuración personal del usuario, política administrada empresarial, banderas --allowedTools o --disallowedTools, el modo de permiso activo, una concesión con alcance de sesión de un mensaje anterior en la misma sesión de CLI interactiva, o porque la herramienta es inherentemente segura. El evento no indica cuál de estas fuentes coincidió.
    • "hook": Un hook PreToolUse o PermissionRequest devolvió la decisión.
    • "user_permanent": Se emite cuando el usuario eligió “Sí, y no preguntes de nuevo para …” en un mensaje de permiso, que guarda una regla de permiso en su configuración personal. En la CLI interactiva esto se emite solo para esa opción en sí; las llamadas posteriores que coincidan con la regla guardada emiten "config" en su lugar. En sesiones del SDK de Agent o no interactivas -p, tanto la opción inicial como las coincidencias de regla posteriores emiten "user_permanent". Se trata como una aceptación.
    • "user_temporary": Se emite cuando el usuario eligió “Sí” en un mensaje de permiso para una aprobación única, o eligió una de las opciones ”… durante esta sesión” en un mensaje de edición o lectura de archivo. En la CLI interactiva esto se emite solo para la opción en sí; las llamadas posteriores permitidas por esa concesión con alcance de sesión emiten "config" en su lugar. En sesiones del SDK de Agent o no interactivas -p, tanto la opción como las coincidencias posteriores emiten "user_temporary". Se trata como una aceptación.
    • "user_abort": Se emite cuando el usuario descartó el mensaje de permiso sin responder. Se trata como un rechazo.
    • "user_reject": Se emite cuando el usuario eligió “No” cuando se le solicitó, o una llamada coincidió con una regla de denegación en su configuración personal. Se trata como un rechazo.

Evento de cambio de modo de permiso

Se registra cuando el modo de permiso cambia, por ejemplo al ciclar con Shift+Tab, salir del modo de plan, o una verificación de puerta de modo automático. 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 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • from_mode: El modo de permiso anterior, por ejemplo "default", "plan", "acceptEdits", "auto", o "bypassPermissions"
  • to_mode: El nuevo modo de permiso
  • trigger: Qué causó el cambio. Uno de "shift_tab", "exit_plan_mode", "auto_gate_denied", o "auto_opt_in". Ausente cuando la transición se origina del SDK o puente

Evento de autenticación

Se registra cuando /login o /logout se completa. Nombre del Evento: claude_code.auth Atributos:
  • Todos los atributos estándar
  • event.name: "auth"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • action: "login" o "logout"
  • success: "true" o "false"
  • auth_method: Método de autenticación, como "oauth"
  • error_category: Tipo de error categórico cuando la acción falló. El mensaje de error sin procesar nunca se incluye
  • status_code: Código de estado HTTP como cadena cuando la acción falló con un error HTTP

Evento de conexión del servidor MCP

Se registra cuando un servidor MCP se conecta, desconecta o falla al conectarse. Nombre del Evento: claude_code.mcp_server_connection Atributos:
  • Todos los atributos estándar
  • event.name: "mcp_server_connection"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • status: "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 milisegundos
  • error_code: Código de error cuando la conexión falló
  • server_name (cuando OTEL_LOG_TOOL_DETAILS=1): Nombre del servidor configurado
  • error (cuando OTEL_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 de error y un código de estilo errno. El mensaje de error y el seguimiento de pila nunca se incluyen. Este evento no se emite cuando se ejecuta contra Bedrock, Vertex, o Foundry, o cuando DISABLE_ERROR_REPORTING está establecido. Nombre del Evento: claude_code.internal_error Atributos:
  • Todos los atributos estándar
  • event.name: "internal_error"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • error_name: Nombre de la clase de error, como "TypeError" o "SyntaxError"
  • error_code: Código errno de Node.js como "ENOENT" cuando está presente en el error

Evento de plugin instalado

Se registra cuando un plugin termina de instalarse, tanto desde el comando CLI claude plugin install como desde la interfaz de usuario interactiva /plugin. Nombre del Evento: claude_code.plugin_installed Atributos:
  • Todos los atributos estándar
  • event.name: "plugin_installed"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • marketplace.is_official: "true" si el mercado es un mercado oficial de Anthropic, "false" de otra manera
  • install.trigger: "cli" o "ui"
  • plugin.name: Nombre del plugin instalado. Para mercados de terceros esto se incluye solo cuando OTEL_LOG_TOOL_DETAILS=1
  • plugin.version: Versión del plugin cuando se declara en la entrada del mercado. Para mercados de terceros esto se incluye solo cuando OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: Mercado desde el que se instaló el plugin. Para mercados de terceros esto se incluye solo cuando OTEL_LOG_TOOL_DETAILS=1

Evento de plugin cargado

Se registra una vez por plugin habilitado al inicio de la sesión. Usa este evento para inventariar qué plugins están activos en tu flota, como complemento a plugin_installed que registra la acción de instalación en sí. Nombre del Evento: claude_code.plugin_loaded Atributos:
  • Todos los atributos estándar
  • event.name: "plugin_loaded"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • plugin.name: nombre del plugin. Para plugins fuera del mercado oficial y paquete integrado el valor es "third-party" a menos que OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: mercado desde el que se instaló el plugin, cuando se conoce. Redactado a "third-party" bajo la misma condición que plugin.name
  • plugin.version: versión del manifiesto del plugin. Se incluye solo cuando el nombre no está redactado y el manifiesto declara una versión
  • plugin.scope: categoría de procedencia para el plugin: "official", "org", "user-local", o "default-bundle"
  • enabled_via: cómo el plugin llegó a estar habilitado: "default-enable", "org-policy", "seed-mount", o "user-install"
  • plugin_id_hash: hash determinista del nombre del plugin y mercado, enviado solo a tu exportador configurado. Te permite contar cuántos plugins de terceros distintos se cargan en tu flota sin registrar sus nombres
  • has_hooks: si el plugin contribuye hooks
  • has_mcp: si el plugin contribuye servidores MCP
  • skill_path_count: número de directorios de habilidades que declara el plugin
  • command_path_count: número de directorios de comandos que declara el plugin
  • agent_path_count: número de directorios de agentes que declara el plugin

Evento de habilidad activada

Se registra cuando se invoca una habilidad, ya sea que Claude la llame a través de la herramienta Skill o que la 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 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • skill.name: Nombre de la habilidad. Para habilidades definidas por el usuario y de plugin de terceros el valor es el marcador de posición "custom_skill" a menos que OTEL_LOG_TOOL_DETAILS=1
  • invocation_trigger: Cómo se activó la habilidad ("user-slash", "claude-proactive", o "nested-skill")
  • skill.source: De dónde se cargó la habilidad (por ejemplo, "bundled", "userSettings", "projectSettings", "plugin")
  • plugin.name (cuando OTEL_LOG_TOOL_DETAILS=1 o el plugin es de un mercado oficial): Nombre del plugin propietario cuando la habilidad es proporcionada por un plugin
  • marketplace.name (cuando OTEL_LOG_TOOL_DETAILS=1 o el plugin es de un mercado oficial): Mercado desde el que se instaló el plugin propietario, cuando la habilidad es proporcionada por un plugin

Evento de mención @

Se registra cuando Claude Code resuelve una mención @ en un mensaje. No todas las menciones emiten un evento: las rutas de salida anticipada como denegaciones de permisos, archivos de tamaño excesivo, archivos adjuntos de referencia PDF, y fallos de listado de directorios se devuelven sin registrar. Nombre del Evento: claude_code.at_mention Atributos:
  • Todos los atributos estándar
  • event.name: "at_mention"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • mention_type: Tipo de mención ("file", "directory", "agent", "mcp_resource")
  • success: Si la mención se resolvió exitosamente ("true" o "false")

Evento de reintentos de API agotados

Se registra una vez cuando una solicitud de API falla después de más de un intento. Se emite junto con el evento api_error final. Nombre del Evento: claude_code.api_retries_exhausted Atributos:
  • Todos los atributos estándar
  • event.name: "api_retries_exhausted"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • model: Modelo utilizado
  • error: Mensaje de error final
  • status_code: Código de estado HTTP como número. Ausente para errores no HTTP.
  • total_attempts: Número total de intentos realizados
  • total_retry_duration_ms: Tiempo total de pared en todos los intentos
  • speed: "fast" o "normal"

Evento de hook registrado

Se registra una vez por hook configurado al inicio de la sesión. Usa este evento para inventariar qué hooks están activos en tu flota, como complemento a los eventos hook_execution_start y hook_execution_complete por ejecución. Nombre del Evento: claude_code.hook_registered Atributos:
  • Todos los atributos estándar
  • event.name: "hook_registered"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • hook_event: tipo de evento de hook, como "PreToolUse" o "PostToolUse"
  • hook_type: tipo de implementación de hook: "command", "prompt", "mcp_tool", "http", o "agent"
  • hook_source: dónde se define el hook: "userSettings", "projectSettings", "localSettings", "flagSettings", "policySettings", o "pluginHook"
  • hook_matcher (cuando OTEL_LOG_TOOL_DETAILS=1): la cadena de coincidencia de la configuración del hook, cuando se establece una
  • plugin.name (cuando hook_source es "pluginHook"): nombre del plugin contribuyente. Para plugins fuera del mercado oficial y paquete integrado el valor es "third-party" a menos que OTEL_LOG_TOOL_DETAILS=1
  • plugin_id_hash (cuando hook_source es "pluginHook"): hash determinista del nombre del plugin y mercado, enviado solo a tu exportador configurado. Te permite contar plugins contribuyentes distintos sin registrar sus nombres

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 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • hook_event: Tipo de evento de hook, como "PreToolUse" o "PostToolUse"
  • hook_name: Nombre completo del hook incluyendo coincidencia, como "PreToolUse:Write"
  • num_hooks: Número de comandos de hook coincidentes
  • managed_only: "true" cuando solo se permiten hooks de política administrada
  • hook_source: "policySettings" o "merged"
  • hook_definitions: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el trazado beta detallado como OTEL_LOG_TOOL_DETAILS=1 están habilitados

Evento de ejecución de hook completado

Se registra cuando todos los hooks para un evento de hook han terminado. Nombre del Evento: claude_code.hook_execution_complete Atributos:
  • Todos los atributos estándar
  • event.name: "hook_execution_complete"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • hook_event: Tipo de evento de hook
  • hook_name: Nombre completo del hook incluyendo coincidencia
  • num_hooks: Número de comandos de hook coincidentes
  • num_success: Recuento que se completó exitosamente
  • num_blocking: Recuento que devolvió una decisión de bloqueo
  • num_non_blocking_error: Recuento que falló sin bloquear
  • num_cancelled: Recuento cancelado antes de completarse
  • total_duration_ms: Duración de pared de todos los hooks coincidentes
  • managed_only: "true" cuando solo se permiten hooks de política administrada
  • hook_source: "policySettings" o "merged"
  • hook_definitions: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el trazado beta detallado como OTEL_LOG_TOOL_DETAILS=1 están habilitados

Evento de compactación

Se registra cuando la compactación de conversación se completa. Nombre del Evento: claude_code.compaction Atributos:
  • Todos los atributos estándar
  • event.name: "compaction"
  • event.timestamp: Marca de tiempo ISO 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • trigger: "auto" o "manual"
  • success: "true" o "false"
  • duration_ms: Duración de compactación
  • pre_tokens: Recuento aproximado de tokens antes de compactación
  • post_tokens: Recuento aproximado de tokens después de compactación
  • error: Mensaje de error cuando la compactación falló

Evento de encuesta de retroalimentación

Se registra cuando se muestra una encuesta de calidad de sesión o se responde. Consulta Encuestas de calidad de 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 8601
  • event.sequence: Contador monotónicamente creciente para ordenar eventos dentro de una sesión
  • event_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 encuesta
  • survey_type: Qué encuesta produjo el evento. "session" es el mensaje de calificación “¿Cómo está Claude?”
  • response: La selección del usuario en eventos responded
  • enabled_via_override: true cuando CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL está establecido. Se emite como booleano, no como cadena. Presente en eventos de encuesta session. Filtra en este atributo para confirmar que la anulación se aplica en toda una flota

Interpretar datos de métricas y eventos

Las métricas y eventos exportados admiten una variedad de análisis:

Monitoreo de uso

MétricaOportunidad de Análisis
claude_code.token.usageDesglosar por type (entrada/salida), usuario, equipo, modelo, skill.name, plugin.name, o agent.name
claude_code.session.countRastrear adopción y compromiso a lo largo del tiempo
claude_code.lines_of_code.countMedir productividad rastreando adiciones/eliminaciones de código
claude_code.commit.count & claude_code.pull_request.countEntender 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, y agent.name
Las métricas de costo son aproximaciones. Para datos de facturación oficiales, consulta tu proveedor de API (Claude Console, Amazon Bedrock, o Google Cloud Vertex).

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 user.account_uuid, user.account_id, organization.id, session.id, model, y app.version.

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 cuántos intentos se realizaron en total. Un valor mayor que CLAUDE_CODE_MAX_RETRIES (predeterminado 10) indica que la solicitud agotó todos los reintentos en un error transitorio. Un valor más bajo indica un error no reintentable como una respuesta 400. 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: analiza 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: rastrea duraciones de solicitudes de API y tiempos de ejecución de herramientas para identificar cuellos de botella de rendimiento.

Consideraciones de backend

Tu elección de backends de métricas, registros y trazas determina los tipos de análisis que puedes realizar:

Para métricas

  • Bases de datos de series temporales (por ejemplo, Prometheus): Cálculos de tasa, métricas agregadas
  • Almacenes columnares (por ejemplo, ClickHouse): Consultas complejas, análisis de usuario único
  • Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog): Consultas avanzadas, visualización, alertas

Para eventos/registros

  • Sistemas de agregación de registros (por ejemplo, Elasticsearch, Loki): Búsqueda de texto completo, análisis de registros
  • Almacenes columnares (por ejemplo, ClickHouse): Análisis de eventos estructurados
  • Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog): Correlación entre métricas y eventos

Para trazas

Elige un backend que admita almacenamiento de trazas distribuidas y correlación de spans:
  • Sistemas de trazas distribuidas (por ejemplo, Jaeger, Zipkin, Grafana Tempo): Visualización de spans, cascadas de solicitudes, análisis de latencia
  • Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog): 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-code
  • service.version: Versión actual de Claude Code
  • os.type: Tipo de sistema operativo (por ejemplo, linux, darwin, windows)
  • os.version: Cadena de versión del sistema operativo
  • host.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

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_CONTENT a continuación
  • Cuando está autenticado a través de OAuth, user.email se incluye en atributos de telemetría. Si esto es una preocupación para tu organización, trabaja con tu backend de telemetría para filtrar o redactar este campo
  • El contenido del mensaje del usuario no se recopila por defecto. Solo se registra la longitud del mensaje. Para incluir contenido del mensaje, establece OTEL_LOG_USER_PROMPTS=1
  • Los argumentos de entrada de herramientas y parámetros no se registran por defecto. Para incluirlos, establece OTEL_LOG_TOOL_DETAILS=1. Cuando está habilitado, los eventos tool_result incluyen un atributo tool_parameters con comandos Bash, nombres de servidor MCP y herramienta, y nombres de skills, más un atributo tool_input con rutas de archivo, URLs, patrones de búsqueda y otros argumentos. Los eventos user_prompt incluyen el command_name verbatim para comandos personalizados, de plugin y MCP. Los spans de traza incluyen el mismo atributo tool_input y atributos derivados de entrada como file_path. Los valores individuales superiores a 512 caracteres se truncan y el total está limitado a aproximadamente 4 K caracteres, pero los argumentos aún pueden contener valores sensibles. Configura tu backend de telemetría para filtrar o redactar estos atributos según sea necesario
  • El contenido de entrada y salida de herramientas no se registra en spans de trazas por defecto. Para incluirlo, establece OTEL_LOG_TOOL_CONTENT=1. Cuando está habilitado, los eventos de span incluyen contenido completo de entrada y salida de herramientas truncado en 60 KB por span. Esto puede incluir contenidos de archivo sin procesar de resultados de herramienta Read y salida de comandos Bash. 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_BODIES. Con =1, cada llamada de API emite eventos de registro api_request_body y api_response_body cuyo atributo body es la carga útil serializada en JSON, truncada en 60 KB. Con =file:<dir>, los cuerpos sin truncar se escriben en archivos .request.json y .response.json bajo ese directorio y los eventos llevan una ruta body_ref en 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. En ambos modos, los cuerpos contienen el historial de conversación completo (mensaje del sistema, cada turno anterior de usuario y asistente, resultados de herramientas), por lo que habilitar esto implica consentimiento a todo lo que las otras banderas de contenido OTEL_LOG_* revelarían. El contenido de pensamiento extendido de Claude siempre se redacta de estos cuerpos independientemente de otras configuraciones

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 (Bedrock).