Мониторинг
Узнайте, как включить и настроить OpenTelemetry для Claude Code.
Отслеживайте использование Claude Code, затраты и активность инструментов в вашей организации, экспортируя данные телеметрии через OpenTelemetry (OTel). Claude Code экспортирует метрики как данные временных рядов через стандартный протокол метрик, события через протокол логов/событий и опционально распределенные трассировки через OpenTelemetry.
[!NOTE]
Сведения о Claude API или Managed Agents см. в разделе OpenTelemetry для Claude API.
Быстрый старт
Настройте OpenTelemetry с помощью переменных окружения:
# 1. Включить телеметрию
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. Выбрать экспортеры (оба опциональны - настройте только необходимое)
export OTEL_METRICS_EXPORTER=otlp # Опции: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # Опции: otlp, console, none
# 3. Настроить OTLP endpoint (для OTLP экспортера)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. Установить аутентификацию (если требуется)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. Для отладки: сократить интервалы экспорта, и сбросить их для использования в production
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 секунд (по умолчанию: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 секунд (по умолчанию: 5000ms)
# 6. Запустить Claude Code
claude
Чтобы проверить настройку, которая экспортирует метрики, проверьте вашу систему на наличие метрики claude_code.session.count, которую Claude Code отправляет при запуске сеанса. Чтобы проверить настройку только логов, отправьте запрос и проверьте событие claude_code.user_prompt.
Если ничего не поступает, запустите Claude Code с помощью claude --debug-file <path> и проверьте журнал, который он записывает в этот путь. Claude Code сообщает об ошибках от настроенных вами экспортеров как об ошибках [3P telemetry], где 3P означает third-party. Строки с префиксом [Anthropic telemetry] описывают отдельную операционную телеметрию Anthropic и не указывают на проблему с вашей настройкой.
Для полного списка параметров конфигурации см. спецификацию OpenTelemetry.
Конфигурация администратора
Администраторы могут настраивать параметры OpenTelemetry для всех пользователей через файл управляемых параметров. Дополнительную информацию о том, как применяются параметры, см. в разделе приоритет параметров.
Пример конфигурации управляемых параметров:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
}
}
В приложении Claude Desktop сеансы вкладки Code читают эти управляемые параметры из источников, которые достигают каждого вида сеанса Desktop. Форма OpenTelemetry для Cowork в разделе Monitoring в параметрах конфиденциальности и данных консоли администратора применяется только к сеансам Cowork, поэтому ни терминальный CLI, ни вкладка Code не экспортируют на сборщик, который вы там установили.
Claude Code игнорирует переменные экспортера OpenTelemetry в файлах .claude/settings.json и .claude/settings.local.json репозитория, поэтому репозиторий не может использовать их для включения телеметрии, выбора места её отправки или захвата содержимого. Установите их в управляемых параметрах или попросите каждого разработчика установить их в своей оболочке или в ~/.claude/settings.json. Репозиторий все ещё может отключить сигнал, установив его селектор экспортера, например OTEL_LOGS_EXPORTER, на none, если только управляемые параметры, файл --settings или окружение, из которого вы запускаете Claude Code, не устанавливают эту переменную.
Claude Code не передает переменные окружения OTEL_* подпроцессам, которые он порождает, включая инструмент Bash, hooks, MCP серверы и языковые серверы. Приложение, инструментированное OpenTelemetry, которое вы запускаете через инструмент Bash, не наследует endpoint экспортера Claude Code или заголовки, поэтому установите эти переменные непосредственно в команде, если это приложение должно экспортировать свою собственную телеметрию.
Как управляемые параметры блокируют назначение OTLP
Когда вы устанавливаете переменную OTEL_EXPORTER_OTLP_* в управляемых параметрах, Claude Code удаляет конфликтующие переменные, установленные разработчиком при запуске, и регистрирует предупреждение в журнале отладки. То, что удаляется, зависит от того, какую переменную вы установили:
-
Endpoints: когда вы устанавливаете
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code удаляет каждый endpoint для конкретного сигнала, установленный разработчиком. Разработчики не могут направить один сигнал на другой сборщик, поэтому вам не нужно также устанавливать переменные endpoint для конкретного сигнала в управляемых параметрах. -
Протоколы: когда вы устанавливаете
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code удаляет каждый протокол для конкретного сигнала, установленный разработчиком. -
Учетные данные: когда вы устанавливаете
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEYилиOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code удаляет версии этой переменной для конкретного сигнала, установленные разработчиком, плюс каждую переменную endpoint, установленную разработчиком, общую или для конкретного сигнала, поскольку эти учетные данные в противном случае достигли бы сборщика, который не выбрали управляемые параметры. -
Селекторы экспортера:
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTERи бета-версияOTEL_TRACES_EXPORTERследуют обычному приоритету для каждого ключа. Параметр разработчика все еще может отключить сигнал или переключить его на экспортер консоли, поэтому установите селекторы в управляемых параметрах также, если вам нужно их заблокировать. Во всех источниках администратора,OTEL_LOGS_EXPORTERследует единице телеметрии, в то время как два других селектора объединяются для каждого ключа. Требуется Claude Code v2.1.223 или позже. -
Бета-версия endpoints трассировки: с активной детальной бета-версией трассировки, Claude Code экспортирует логи и трассировки в
BETA_TRACING_ENDPOINTвместо использования экспортеров логов и трассировок. Claude Code поэтому удаляет установленный разработчикомBETA_TRACING_ENDPOINTвсякий раз, когда любой из этих управляемых параметров определяет назначение любого из этих сигналов:- Общий endpoint или endpoint логов/трассировок или учетные данные
otelHeadersHelper- Селектор экспортера логов или трассировок, установленный на
none,consoleили пустой, значения, которые держат сигнал вне сборщика CLAUDE_CODE_ENABLE_TELEMETRYотключен
Endpoint или учетные данные только для метрик его не удаляют. До v2.1.251, установленный разработчиком
BETA_TRACING_ENDPOINTперенаправлял логи и трассировки, которые экспортирует детальная бета-версия трассировки, даже когда управляемые параметры закрепили сборщик.
Claude Code не удаляет переменные для конкретного сигнала, которые вы устанавливаете в самих управляемых параметрах, поэтому вы можете направить один сигнал на другой сборщик, установив его переменную там, как это делает пример SIEM. Если вы установите там учетные данные для конкретного сигнала, Claude Code удалит установленный разработчиком endpoint для этого сигнала.
Это поведение удаления изменяет то, где доставляется телеметрия, а не то, что собирает Claude Code.
До v2.1.217, каждая переменная независимо следовала приоритету параметров для каждого ключа, поэтому endpoint для конкретного сигнала, установленный в параметрах пользователя или оболочке, перенаправлял этот сигнал от управляемого сборщика.
Когда приложение для рабочего стола или запускатель самостоятельно размещаемой среды запускает Claude Code и называет endpoint OTLP в среде, которую он предоставляет, Claude Code закрепляет назначение таким же образом: переменные телеметрии запускателя удаляют переменные, установленные разработчиком, точно так же, как это делают управляемые параметры. Claude Code не удаляет переменные, которые сам установил запускатель. Требуется Claude Code v2.1.251 или позже.
Детали конфигурации
Общие переменные конфигурации
Эти переменные настраивают экспортеры, конечные точки и поведение экспорта для всех развертываний.
Если вы установите переменную конечной точки или протокола для конкретного сигнала, такую как OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code использует её вместо универсальной переменной для этого сигнала. Если вы установите переменную заголовков для конкретного сигнала, такую как OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code объединяет её с универсальной переменной OTEL_EXPORTER_OTLP_HEADERS для этого сигнала.
На машинах с управляемыми параметрами см. Как управляемые параметры блокируют назначение OTLP, чтобы узнать, что Claude Code удаляет.
| Переменная окружения | Описание | Примеры значений |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
Включает сбор телеметрии (обязательно) | 1 |
OTEL_METRICS_EXPORTER |
Типы экспортеров метрик, разделённые запятыми. Используйте none для отключения |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
Типы экспортеров логов/событий, разделённые запятыми. Используйте none для отключения |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
Протокол для экспортера OTLP, применяется ко всем сигналам. Claude Code не имеет протокола по умолчанию, поэтому установите эту переменную или переменную протокола для конкретного сигнала для каждого включённого экспортера otlp |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
Конечная точка сборщика OTLP для всех сигналов | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
Протокол для метрик, переопределяет общий параметр | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
Конечная точка метрик OTLP, переопределяет общий параметр | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
Протокол для логов, переопределяет общий параметр | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Конечная точка логов OTLP, переопределяет общий параметр | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS |
Заголовки аутентификации для OTLP | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_HEADERS |
Заголовки аутентификации для метрик, объединяются с общими заголовками | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_LOGS_HEADERS |
Заголовки аутентификации для логов, объединяются с общими заголовками | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
Интервал экспорта в миллисекундах (по умолчанию: 60000) | 5000, 60000 |
OTEL_LOGS_EXPORT_INTERVAL |
Интервал экспорта логов в миллисекундах (по умолчанию: 5000) | 1000, 10000 |
OTEL_LOG_USER_PROMPTS |
Включить логирование содержимого пользовательских подсказок (по умолчанию: отключено) | 1 для включения |
OTEL_LOG_ASSISTANT_RESPONSES |
Включить логирование текста ответа ассистента в событиях assistant_response (по умолчанию: отключено). Если не установлено, используется значение OTEL_LOG_USER_PROMPTS |
1 для включения, 0 для сохранения скрытым |
OTEL_LOG_TOOL_DETAILS |
Включить логирование параметров инструмента и входных аргументов в событиях инструмента и атрибутах span трассировки: команды Bash, имена серверов MCP и инструментов, имена skills, имена пользовательских рабочих процессов и входные данные инструмента. Также включает имена пользовательских, plugin и MCP команд на событиях user_prompt и реальные имена агентов, skills, plugins и серверов MCP и инструментов на счётчиках стоимости и токенов (по умолчанию: отключено). Для встроенных серверов Claude Desktop в сеансах, которыми владеет Claude Desktop, mcp_server_name/mcp_tool_name выдаются на tool_decision/tool_result даже с отключённым флагом. Исключение требует Claude Code v2.1.214 или позже |
1 для включения |
OTEL_LOG_TOOL_CONTENT |
Включить логирование содержимого инструмента в событии span tool.output (по умолчанию: отключено). Атрибуты span переносят содержимое инструмента под их собственные шлюзы. Требует трассировку. Содержимое усекается на лимите содержимого (60 КБ по умолчанию) |
1 для включения |
OTEL_LOG_MANAGED_SETTINGS |
Добавить скрытые управляемые параметры и дайджест SHA-256 параметров перед скрытием на события managed settings resolved (по умолчанию: отключено). Значение в параметрах проекта или локальных параметрах не включает его. Требует Claude Code v2.1.274 или позже | 1 для включения |
OTEL_LOG_RAW_API_BODIES |
Выдать полный запрос и ответ JSON API Anthropic Messages как события логов api_request_body / api_response_body (по умолчанию: отключено). Тела включают всю историю разговора. Включение этого подразумевает согласие на всё, что раскрыли бы OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS и OTEL_LOG_TOOL_CONTENT |
1 для встроенных тел, усечённых на лимите содержимого (60 КБ по умолчанию), или file:<dir> для неусечённых тел на диске с указателем body_ref в событии |
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH |
Лимит содержимого: максимальная длина атрибутов с содержимым, таких как ответы модели, содержимое инструмента, системные промпты и сырые тела API, включая маркер усечения, в единицах кода UTF-16 (по умолчанию: 61440, т.е. 60 КБ). Значение по умолчанию рассчитано на бэкенды, которые ограничивают значения атрибутов 64 КБ; увеличивайте его, только если ваш бэкенд принимает большие значения, или уменьшайте, чтобы сократить объём телеметрии. Когда лимит атрибута OpenTelemetry SDK, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT или один из его вариантов для logrecord и span, установлен ниже, Claude Code усекает по этому меньшему значению, чтобы маркер [TRUNCATED ...] оставался в пределах лимита SDK |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
Предпочтение временности метрик (по умолчанию: delta). Установите на cumulative, если ваш бэкенд ожидает кумулятивную временность |
delta, cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
Интервал обновления динамических заголовков (по умолчанию: 1740000ms / 29 минут) | 900000 |
Для протоколов http/protobuf и http/json Claude Code отправляет каждый запрос экспорта с заголовком Content-Length.
Аутентификация mTLS
Способ настройки сертификатов клиента для экспортера OTLP зависит от протокола OTLP, используемого для этого сигнала, установленного через OTEL_EXPORTER_OTLP_PROTOCOL или переопределение для конкретного сигнала. Одна и та же конфигурация применяется к метрикам, логам и трассировкам.
| Протокол | Переменные сертификата клиента | Доверять CA сборщика с помощью |
|---|---|---|
http/protobuf, http/json |
CLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY и опционально CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. См. Конфигурация сети |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY и OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, или варианты для конкретного сигнала, такие как OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY, чтобы использовать другой сертификат для каждого сигнала |
OTEL_EXPORTER_OTLP_CERTIFICATE |
Для grpc OpenTelemetry SDK читает стандартные переменные OTLP напрямую, поэтому существующие конфигурации, которые устанавливают переменные метрик для конкретного сигнала, продолжают работать. На машинах с управляемыми параметрами Claude Code может удалить установленные разработчиком учётные данные и конечные точки для конкретного сигнала при запуске.
Контроль кардинальности метрик
Следующие переменные окружения контролируют, какие атрибуты включены в метрики и события для управления кардинальностью:
| Переменная окружения | Описание | Значение по умолчанию | Пример для отключения |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
Включить атрибуты session.id и, в облачных сессиях, ccr.session.id в метрики и события | true |
false |
OTEL_METRICS_INCLUDE_VERSION |
Включить атрибут app.version в метрики и события | false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
Включить атрибуты user.account_uuid и user.account_id в метрики и события | true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
Включить атрибут app.entrypoint в метрики и события | false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
Включить ключи из OTEL_RESOURCE_ATTRIBUTES как атрибуты на точках данных метрик и в событиях |
true |
false |
OTEL_METRICS_INCLUDE_REPOSITORY |
Включить атрибуты идентификации репозитория vcs.* repository identity attributes на метрики и события. Требует Claude Code v2.1.269 или позже |
false |
true |
Более низкая кардинальность обычно означает лучшую производительность и более низкие затраты на хранилище, но менее детальные данные для анализа.
Traces (beta)
Распределённая трассировка экспортирует spans, которые связывают каждую пользовательскую подсказку с запросами API и выполнениями инструментов, которые она запускает, поэтому вы можете просмотреть полный запрос как одну трассировку в вашем бэкенде трассировки.
Трассировка отключена по умолчанию. Чтобы включить её, установите оба CLAUDE_CODE_ENABLE_TELEMETRY=1 и CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, затем установите OTEL_TRACES_EXPORTER, чтобы выбрать, куда отправляются spans. Трассировки повторно используют общую конфигурацию OTLP для конечной точки, протокола, заголовков и mTLS. На машинах с управляемыми параметрами Claude Code может удалить установленные разработчиком учётные данные и конечные точки для конкретного сигнала при запуске.
| Переменная окружения | Описание | Примеры значений |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
Включить трассировку span (обязательно). ENABLE_ENHANCED_TELEMETRY_BETA также принимается |
1 |
OTEL_TRACES_EXPORTER |
Типы экспортеров трассировок, разделённые запятыми. Используйте none для отключения |
console, otlp, none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
Протокол для трассировок, переопределяет OTEL_EXPORTER_OTLP_PROTOCOL |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Конечная точка трассировок OTLP, переопределяет OTEL_EXPORTER_OTLP_ENDPOINT |
http://localhost:4318/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
Заголовки аутентификации для трассировок, объединяются с OTEL_EXPORTER_OTLP_HEADERS |
Authorization=Bearer token |
OTEL_TRACES_EXPORT_INTERVAL |
Интервал пакетного экспорта span в миллисекундах (по умолчанию: 5000) | 1000, 10000 |
Spans скрывают текст пользовательской подсказки, детали входных данных инструмента и содержимое инструмента по умолчанию. Установите OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 и OTEL_LOG_TOOL_CONTENT=1, чтобы включить их.
Когда трассировка активна, подпроцессы Bash и PowerShell автоматически наследуют переменную окружения TRACEPARENT, содержащую контекст трассировки W3C активного span выполнения инструмента. Это позволяет любому подпроцессу, который читает TRACEPARENT, родить свои собственные spans под одной и той же трассировкой, обеспечивая сквозную распределённую трассировку через скрипты и команды, которые запускает Claude.
Когда трассировка активна и Claude Code подключен непосредственно к API Anthropic, каждый запрос модели содержит заголовок W3C traceparent, установленный на контекст span claude_code.llm_request, и заголовок traceresponse API записывается как ссылка span. Вместе они соединяют spans Claude Code на стороне клиента с трассировкой на стороне сервера через любой совместимый посредник. Исходящие запросы HTTP MCP переносят traceparent таким же образом. Заголовок не отправляется сторонним поставщикам.
По умолчанию заголовок traceparent на запросах модели и HTTP MCP отправляется только когда ANTHROPIC_BASE_URL не установлен или указывает на API Anthropic, так как некоторые прокси отклоняют неизвестные заголовки. Переменная подпроцесса TRACEPARENT контролируется тем же переключателем для согласованности. Если вы запускаете Claude Code через пользовательский прокси ANTHROPIC_BASE_URL и хотите распространять контекст трассировки, установите CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
В Agent SDK и неинтерактивных сеансах, запущенных с -p, Claude Code также читает TRACEPARENT и TRACESTATE из своего собственного окружения при запуске каждого span взаимодействия. Это позволяет процессу встраивания передать свой активный контекст трассировки W3C в подпроцесс, чтобы spans Claude Code появились как дочерние элементы распределённой трассировки вызывающей стороны. Интерактивные сеансы игнорируют входящий TRACEPARENT, чтобы избежать случайного наследования значений окружения из CI или контейнерных сред.
Входящий контекст трассировки также применяется к событиям. В сеансах Agent SDK и -p с установленным TRACEPARENT каждая запись логов OTLP события содержит значения trace_id и span_id, которые присоединяют её к трассировке вашего приложения, даже когда экспортер трассировок не настроен, поэтому ваш бэкенд логирования может коррелировать события с остальной частью трассировки.
Запись, выданная во время активного взаимодействия, содержит ID span взаимодействия, даже когда Claude Code выдаёт её вне асинхронного контекста span, например в обратном вызове запроса разрешения или для записи, буферизованной при запуске и экспортированной позже. Запись, выданная без активного span взаимодействия, содержит ID входящего TRACEPARENT напрямую.
Иерархия span
Каждая пользовательская подсказка запускает корневой span claude_code.interaction. Вызовы API, вызовы инструментов и выполнения hooks записываются как его дочерние элементы. Spans инструментов имеют два собственных дочерних span: один для времени, потраченного на ожидание решения разрешения, и один для самого выполнения. Когда инструмент Agent или устаревший инструмент Task порождает подагента, spans API и инструментов подагента вложены под span claude_code.tool родителя.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (требует детальную бета-трассировку)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (инструмент Agent) spans субагента claude_code.llm_request / claude_code.tool
В сеансах Agent SDK и claude -p сам claude_code.interaction становится дочерним элементом span вызывающей стороны, когда TRACEPARENT установлен в окружении.
Когда hook PreToolUse откладывает вызов инструмента, Claude Code сохраняет контекст трассировки хода, который отложил его. Когда вы возобновляете сеанс и инструмент повторно запускается, spans инструмента присоединяются к трассировке этого более раннего хода как дочерние элементы span claude_code.interaction хода.
Атрибуты span
Каждый span содержит стандартные атрибуты плюс атрибут span.type, соответствующий его имени. Таблицы ниже перечисляют дополнительные атрибуты, установленные на каждом span. Spans llm_request, tool.execution и hook устанавливают статус OpenTelemetry ERROR, когда они записывают сбой; другие spans всегда заканчиваются со статусом UNSET.
claude_code.interaction
| Атрибут | Описание | Контролируется |
|---|---|---|
user_prompt |
Текст подсказки. Значение <REDACTED> если шлюз не установлен |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
Длина подсказки в символах | |
interaction.sequence |
Счётчик взаимодействий на основе 1, считаемый за процесс Claude Code, а не за сеанс, как описано для event.sequence |
|
parent.source |
Как span получил своего родителя трассировки: env когда он стал дочерним элементом входящего TRACEPARENT, none когда он запустил свою собственную трассировку. Требует Claude Code v2.1.268 или позже |
|
interaction.duration_ms |
Длительность хода по настенным часам |
claude_code.llm_request
| Атрибут | Описание | Контролируется |
|---|---|---|
model |
Идентификатор модели | |
gen_ai.system |
Всегда anthropic. Семантическое соглашение OpenTelemetry GenAI |
|
gen_ai.request.model |
Одно и то же значение как model. Семантическое соглашение OpenTelemetry GenAI |
|
query_source |
Подсистема, которая выдала запрос, такая как repl_main_thread или имя подагента |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
Ограниченная форма query_source, выданная независимо от того, активна ли детальная бета-трассировка, со значениями такими как repl_main_thread или agent.builtin.general-purpose. : становится . и агенты с пользовательскими именами появляются как agent.custom. Требует Claude Code v2.1.268 или позже |
|
agent_id |
Идентификатор подагента или товарища, который выдал запрос. Отсутствует в основном сеансе | |
parent_agent_id |
Идентификатор агента, который породил этот. Отсутствует для основного сеанса и для агентов, порождённых непосредственно из него | |
workflow.run_id |
Идентификатор запуска Workflow запуска инструмента, который породил этого агента, с префиксом wf_. Отсутствует для агентов, не порождённых рабочим процессом |
|
workflow.name |
Имя рабочего процесса, который породил этого агента. Имена, созданные пользователем, заменяются на custom, если шлюз не установлен |
OTEL_LOG_TOOL_DETAILS |
speed |
fast или normal |
|
effort |
Уровень усилий, применённый к запросу: low, medium, high, xhigh или max. Отсутствует, когда Claude Code не отправляет уровень усилий, например на модели, которая не поддерживает усилия. Требует Claude Code v2.1.274 или позже |
|
llm_request.context |
interaction, tool или standalone в зависимости от родительского span |
|
duration_ms |
Длительность по настенным часам, включая повторные попытки | |
ttft_ms |
Время до первого токена в миллисекундах | |
first_content_ms |
Время от начала запроса до первого блока содержимого успешной попытки в миллисекундах. Отсутствует на запросах, которые вернулись к пути без потоковой передачи. Требует Claude Code v2.1.268 или позже | |
input_tokens |
Количество входных токенов из блока использования API. Не включает токены, прочитанные из кэша промптов или записанные в него, — они указываются в cache_read_tokens и cache_creation_tokens |
|
output_tokens |
Количество выходных токенов | |
cache_read_tokens |
Токены, прочитанные из кэша подсказок | |
cache_creation_tokens |
Токены, записанные в кэш подсказок | |
request_id |
ID запроса API. Одно и то же значение как атрибут корреляции события request_id event correlation attribute |
|
gen_ai.response.id |
Одно и то же значение как request_id. Семантическое соглашение OpenTelemetry GenAI |
|
client_request_id |
Сгенерированный клиентом x-client-request-id последней попытки |
|
attempt |
Всего попыток для этого запроса | |
success |
true или false |
|
status_code |
HTTP код состояния, когда запрос не удался | |
error |
Сообщение об ошибке, когда запрос не удался | |
error_class |
Короткий токен класса ошибки, когда запрос не удался, такой как api_timeout или server_overload. Требует Claude Code v2.1.268 или позже |
|
response.has_tool_call |
true когда ответ содержал блоки tool-use |
|
stop_reason |
API ответ stop_reason, такой как end_turn, tool_use, max_tokens, stop_sequence, pause_turn или refusal |
|
gen_ai.response.finish_reasons |
Одно и то же значение как stop_reason, обёрнутое в массив строк. Семантическое соглашение OpenTelemetry GenAI |
Каждая повторная попытка также записывается как событие span gen_ai.request.attempt с атрибутами attempt и client_request_id.
claude_code.tool
| Атрибут | Описание | Контролируется |
|---|---|---|
tool_name |
Имя инструмента | |
tool_name_safe |
Форма tool_name, которая не содержит имён, выбранных пользователем. Встроенные имена инструментов проходят дословно. Имена инструментов MCP появляются как mcp_other, за исключением имён инструментов, соответствующих нескольким фиксированным формам, таких как инструменты playwright с именами browser_*, которые проходят дословно. Требует Claude Code v2.1.268 или позже |
|
bash_command_class |
Для инструмента Bash: категория первой программы команды из фиксированного списка, такая как vcs или package_manager. other для программы вне списка, unparsed когда строка не может быть разобрана. Требует Claude Code v2.1.268 или позже |
|
bash_argv0 |
Для инструмента Bash: первая программа команды, когда она находится в одном и том же фиксированном списке, такая как git или npm. other для любой программы вне списка. Требует Claude Code v2.1.268 или позже |
|
duration_ms |
Длительность по настенным часам, включая ожидание разрешения и выполнение | |
result_tokens |
Приблизительный размер токена результата инструмента | |
agent_id |
Идентификатор подагента или товарища, который запустил инструмент. Отсутствует в основном сеансе | |
parent_agent_id |
Идентификатор агента, который породил этот. Отсутствует для основного сеанса и для агентов, порождённых непосредственно из него | |
workflow.run_id |
Идентификатор запуска инструмента Workflow, который породил этого агента, с префиксом wf_. Отсутствует для агентов, не порождённых рабочим процессом |
|
workflow.name |
Имя рабочего процесса, который породил этого агента. Имена, созданные пользователем, заменяются на custom, если шлюз не установлен |
OTEL_LOG_TOOL_DETAILS |
tool_use_id |
ID блока tool_use модели для этого вызова. Совпадает с tool_use_id на событиях tool_result и tool_decision и в полезных нагрузках hooks, поэтому вы можете присоединить span к этим записям |
|
gen_ai.tool.call.id |
Одно и то же значение как tool_use_id. Семантическое соглашение OpenTelemetry GenAI |
|
file_path |
Целевой путь файла для инструментов Read, Edit и Write | OTEL_LOG_TOOL_DETAILS |
full_command |
Строка команды для инструмента Bash | OTEL_LOG_TOOL_DETAILS |
skill_name |
Имя skill для инструмента Skill | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Тип подагента для инструмента Agent или устаревшего инструмента Task | OTEL_LOG_TOOL_DETAILS |
Событие span tool.output на claude_code.tool
Если вы установите OTEL_LOG_TOOL_CONTENT=1, вызовы Read и Bash могут записать событие span tool.output на span claude_code.tool. Вызовы Edit и Write записывают его только когда вы также установите OTEL_LOG_TOOL_DETAILS=1. Эта переменная не ограничена этими двумя инструментами, поэтому проверьте её строку в таблице конфигурации для аргументов, которые она добавляет в другом месте.
Инструменты MCP, WebFetch и WebSearch также записывают это событие на Claude Code v2.1.283 или позже.
Claude Code записывает это событие из успешного возврата вызова инструмента, поэтому вызов, который вызывает ошибку, ничего не записывает, независимо от инструмента. Среди вызовов, которые действительно возвращаются, он не записывает событие tool.output для:
- Вызова любого инструмента, отличного от Read, Edit, Write, Bash, WebFetch, WebSearch и инструментов MCP
- Read, который возвращает что-либо, отличное от текста файла, такое как изображение, PDF или повторное чтение файла, содержимое которого не изменилось
- Вызова Edit или Write, если вы также не установите
OTEL_LOG_TOOL_DETAILS=1 - Вызова WebFetch или WebSearch, который Claude Code перевёл в фоновый режим во время выполнения, чтобы ожидающее сообщение могло дойти до Claude. Результат, поступающий позже, также не записывается. Чтобы узнать, когда Claude Code переводит вызов в фон, см. Когда Claude Code отправляет то, что вы поставили в очередь для терминала и поле
priorityдля сессий Agent SDK
Событие содержит эти атрибуты, каждый усечённый на лимите содержимого (60 КБ по умолчанию). Gated by называет переменную, которая нужна атрибуту в дополнение к OTEL_LOG_TOOL_CONTENT=1, и для Edit и Write эта переменная контролирует само событие, а не атрибут.
| Атрибут | Описание | Контролируется |
|---|---|---|
content |
Текст, который вернул инструмент Read, или текст, который вызов Write был попрошен написать | OTEL_LOG_TOOL_DETAILS для инструмента Write |
output |
Для инструмента Bash, объединённый вывод команды, с stderr чередующимся в stdout. Для инструмента MCP, WebFetch или WebSearch, результат, который вернул инструмент: текстовые блоки, объединённые новыми строками, с изображением или документом, заменённым на заполнитель, такой как [image] |
|
diff |
Структурированный патч, который применил инструмент Edit | OTEL_LOG_TOOL_DETAILS |
file_path |
Целевой путь файла для инструментов Read, Edit и Write, повторяющий атрибут span с тем же именем | OTEL_LOG_TOOL_DETAILS |
bash_command |
Строка команды для инструмента Bash | OTEL_LOG_TOOL_DETAILS |
Атрибут tool_name родительского span говорит вам, из какого инструмента пришло событие. Атрибут, усечённый на лимите содержимого, сопровождается <attribute>_truncated и <attribute>_original_length.
claude_code.tool.blocked_on_user
| Атрибут | Описание | Контролируется |
|---|---|---|
duration_ms |
Время, потраченное на ожидание решения разрешения | |
decision |
accept, reject или cancelled, где cancelled означает, что Claude Code перестал ожидать решения о разрешении для вызова инструмента и не запустил его |
|
source |
Для accept или reject — источник решения, например config, hook или user_temporary, со значениями, описанными в разделе событие Tool decision. Для cancelled — то, что завершило ожидание до принятия какого-либо решения, например user_abort |
Решение cancelled с source user_abort означает, что сообщение, требующее немедленной доставки, прервало ход, пока запрос разрешения или проверка авторежима ещё ожидали завершения. Например, во время проверки авторежима у пользователя было сообщение в очереди, и он отправил его немедленно.
claude_code.tool.execution
| Атрибут | Описание | Контролируется |
|---|---|---|
duration_ms |
Время, потраченное на запуск тела инструмента | |
tool_use_id |
Одно и то же значение как на родительском span claude_code.tool |
|
gen_ai.tool.call.id |
Одно и то же значение как tool_use_id. Семантическое соглашение OpenTelemetry GenAI |
|
success |
true или false |
|
error |
Строка категории ошибки при сбое выполнения, такая как Error:ENOENT или ShellError. Содержит полное сообщение об ошибке вместо этого, когда шлюз установлен |
OTEL_LOG_TOOL_DETAILS |
error_class |
Категория ошибки в форме идентификатора, с символами вне букв, цифр и подчёркиваний, заменённых на _, такой как Error_ENOENT или ShellError. Содержит категорию даже когда error содержит полное сообщение. Требует Claude Code v2.1.268 или позже |
claude_code.hook
Этот span появляется только когда активна детальная бета-трассировка, которая требует ENABLE_BETA_TRACING_DETAILED=1 и BETA_TRACING_ENDPOINT, пару, которая также изменяет, куда идут ваши логи и трассировки. Установите пару в вашей оболочке, пользовательских параметрах или управляемых параметрах; обе переменные игнорируются в параметрах проекта и локальных параметрах. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA один не производит его.
В интерактивных сеансах CLI детальная бета-трассировка также требует, чтобы ваша организация была в списке разрешений для функции. Сеансы Agent SDK и неинтерактивные сеансы -p не требуют списка разрешений.
[!WARNING]
Устанавливайте
ENABLE_BETA_TRACING_DETAILEDтолько для отладки, а не в production. Детальная бета-трассировка даёт большой объём экспорта, а её атрибуты с содержимым не являются частью стабильной схемы span.
| Атрибут | Описание | Контролируется |
|---|---|---|
hook_event |
Тип события hook, такой как PreToolUse |
|
hook_name |
Полное имя hook, такое как PreToolUse:Write |
|
num_hooks |
Количество выполненных команд hook, соответствующих условиям | |
hook_definitions |
Конфигурация hook, сериализованная в JSON | OTEL_LOG_TOOL_DETAILS |
duration_ms |
Длительность по настенным часам всех соответствующих hooks | |
num_success |
Количество hooks, которые завершились успешно | |
num_blocking |
Количество hooks, которые вернули решение блокировки | |
num_non_blocking_error |
Количество hooks, которые не удались без блокировки | |
num_cancelled |
Количество hooks, отменённых перед завершением |
Атрибуты с содержимым при детальной бета-трассировке
[!NOTE]
Дополнительные атрибуты с содержимым, такие как
new_context,system_reminders,system_prompt_preview,user_system_prompt,tool_inputиresponse.model_output, выдаются, только когда активна детальная бета-трассировка. Они не являются частью стабильной схемы span.
Эти атрибуты появляются на перечисленных ниже spans, а в столбце Gated by указана переменная, которая нужна атрибуту в дополнение к детальной бета-трассировке. Значения длиннее лимита содержимого (60 КБ по умолчанию) усекаются.
| Атрибут | Span | Описание | Контролируется |
|---|---|---|---|
new_context |
claude_code.interaction |
Пользовательский промпт | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.llm_request |
Новые пользовательские сообщения и результаты инструментов, отправленные с запросом | OTEL_LOG_USER_PROMPTS |
system_reminders |
claude_code.llm_request |
Текст системных напоминаний среди новых сообщений запроса | OTEL_LOG_USER_PROMPTS |
system_prompt_preview |
claude_code.llm_request |
Первые 500 символов полного системного промпта, отправленного с запросом | OTEL_LOG_USER_PROMPTS |
user_system_prompt |
claude_code.llm_request |
Только текст системного промпта, который вы предоставляете через опцию SDK systemPrompt или флаги --system-prompt и --append-system-prompt. Выдаётся один раз за сессию, а не для каждого запроса |
OTEL_LOG_USER_PROMPTS |
response.model_output |
claude_code.llm_request |
Текст ответа модели на запрос | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.tool |
Результат вызова инструмента, независимо от инструмента | OTEL_LOG_TOOL_CONTENT |
tool_input |
claude_code.tool |
Сериализованные входные данные вызова инструмента | OTEL_LOG_TOOL_DETAILS |
При детальной бета-трассировке с OTEL_LOG_USER_PROMPTS=1 Claude Code также выдаёт событие claude_code.system_prompt, которое содержит полный системный промпт, усечённый на лимите содержимого. Оно поступает, когда сессия впервые отправляет каждый отличающийся системный промпт, и повторно после сжатия контекста.
Динамические заголовки
Для корпоративных сред, требующих динамической аутентификации, вы можете настроить скрипт для динамического создания заголовков. Динамические заголовки применяются только к протоколам http/protobuf и http/json. С протоколом grpc Claude Code использует только переменные статических заголовков, OTEL_EXPORTER_OTLP_HEADERS и его варианты для конкретного сигнала.
Конфигурация параметров
Добавьте в ваш .claude/settings.json, заменив путь на ваш собственный скрипт:
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
Значение может быть путём к исполняемому файлу, включая путь, содержащий пробелы, или строкой команды оболочки с аргументами. На Windows значение всегда запускается через оболочку, поэтому заключите путь, содержащий пробелы, в кавычки внутри значения JSON.
Требования к скрипту
Скрипт должен выводить действительный JSON с парами ключ-значение строк, представляющими заголовки HTTP:
#!/bin/bash
# Пример: несколько заголовков
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
Если помощник не удаётся или выводит вывод, который не соответствует этим требованиям, экспорты не удаются и ваш бэкенд телеметрии не получает ничего из сеанса, пока помощник снова не заработает. Claude Code сообщает об ошибке в:
- Уведомление предупреждения в интерактивных сеансах,
otelHeadersHelper failed; telemetry is not being exported, показано один раз за сеанс, когда помощник впервые не удаётся - Вывод
/status - Журнал отладки, при запуске с
--debugили после запуска/debugв сеансе - stderr, в неинтерактивных сеансах, запущенных с
-p
Поведение обновления
Скрипт помощника заголовков запускается при запуске и периодически после этого для поддержки обновления токена. По умолчанию скрипт запускается каждые 29 минут. Настройте интервал с переменной окружения CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Поддержка организаций с несколькими командами
Организации с несколькими командами или отделами могут добавлять пользовательские атрибуты для различия между разными группами, используя переменную окружения OTEL_RESOURCE_ATTRIBUTES:
# Добавить пользовательские атрибуты для идентификации команды
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Эти пользовательские атрибуты включены во все метрики и события, позволяя вам:
- Фильтровать метрики по команде или отделу
- Отслеживать затраты по центру затрат
- Создавать панели мониторинга для конкретных команд
- Настраивать оповещения для конкретных команд
Claude Code присоединяет эти значения как атрибуты на каждой точке данных метрики и записи события, в дополнение к отправке их в блоке ресурсов OTLP. Поскольку большинство бэкендов метрик предоставляют атрибуты точек данных как запрашиваемые метки, вы можете группировать и фильтровать метрики по вашим пользовательским ключам напрямую. За исключением атрибутов репозитория vcs.* repository attributes, пользовательские ключи никогда не переопределяют стандартные атрибуты, такие как user.id или session.id: когда ключ конфликтует, Claude Code сохраняет встроенное значение.
Каждый пользовательский ключ становится меткой на каждой серии метрик, поэтому значения высокой кардинальности увеличивают затраты на хранилище в вашем бэкенде метрик. Чтобы отправлять пользовательские атрибуты только в блоке ресурсов и опускать их из меток точек данных, установите OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. См. Контроль кардинальности метрик.
[!WARNING]
Переменная окружения
OTEL_RESOURCE_ATTRIBUTESиспользует пары ключ=значение, разделённые запятыми, со строгими требованиями к форматированию:
- Пробелы не допускаются: значения не могут содержать пробелы. Например,
user.organizationName=My Companyнедействительно- Формат: должны быть пары ключ=значение, разделённые запятыми:
key1=value1,key2=value2- Допустимые символы: только символы US-ASCII, исключая управляющие символы, пробелы, двойные кавычки, запятые, точки с запятой и обратные косые черты
- Специальные символы: символы вне допустимого диапазона должны быть процентно-кодированы
Для значения, которому нужен пробел, используйте подчёркивания или camelCase вместо этого. Следующие примеры устанавливают
org.nameс каждой формой:export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization" export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"Вы можете процентно-кодировать любой символ, не только исключённые. Этот пример кодирует как пробел, так и апостроф:
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"Обёртывание значений в кавычки не экранирует пробелы. Например,
org.name="My Company"приводит к буквальному значению"My Company"с включёнными кавычками, а неMy Company.
Привязка телеметрии к сессиям Desktop SSH
Чтобы видеть, на какой удалённой машине выполнялась сессия Desktop SSH, укажите имя каждой машины в пользовательском атрибуте. Метрики и события не содержат имени машины, на которой выполнялась сессия.
На каждой удалённой машине добавьте OTEL_RESOURCE_ATTRIBUTES в блок env, который включает телеметрию, в файле управляемых настроек, который читает сессия. Запишите имя явно в файле каждой машины. Claude Code не раскрывает значение, поэтому host.name=$(hostname) поступает именно в виде этих символов.
В следующем примере машине присваивается имя 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"
}
}
Если переменную больше ничто не задаёт, host.name поступает в блоке ресурсов — как в сессиях Desktop SSH, так и в CLI на этой машине. О том, где ещё появляются пользовательские атрибуты, см. Поддержка организаций с несколькими командами.
Если имя не поступает, проверьте, нет ли одной из следующих причин:
- Вы задали её на компьютере, где запущен Desktop: Desktop не передаёт заданное там значение в сессию SSH
- Вы экспортировали её в
/etc/profileили другом файле, который читают только оболочки входа (login shell): имя поступает, когда вы запускаетеclaudeиз оболочки входа, но не в сессии Desktop SSH. Desktop запускает Claude Code не через оболочку входа. Вместо этого задайте переменную вenvв файле управляемых настроек на удалённой машине. - Значение содержит пробел: в этом случае Claude Code не копирует ни один из ключей в события или точки данных и не сообщает об ошибке. Уберите пробел из значения.
- Переменную уже задаёт что-то другое: в сессии, запускаемой десктопным приложением, переменная, уже заданная в окружении запуска, имеет приоритет над файлами настроек. В логе отладки указывается каждая проигнорированная переменная. Когда стороннее развёртывание Desktop указывает эндпоинт OTLP в предоставляемом им окружении, это окружение содержит собственную
OTEL_RESOURCE_ATTRIBUTESDesktop.
Примеры конфигураций
Установите эти переменные окружения перед запуском claude. Каждый сценарий ниже показывает полную конфигурацию, и каждая переменная описана в разделе Общие переменные конфигурации. Чтобы подтвердить, что конфигурация вступила в силу, проверьте ваш бэкенд на наличие метрики claude_code.session.count после запуска сеанса; Быстрый старт охватывает проверку только логов и что проверить, когда ничего не приходит.
Для отладки консоли с интервалом экспорта 1 секунда:
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, скрепленного с http://localhost:9464/metrics:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
В самостоятельно размещённой среде сеанс привязывает порт 9464 только при мощности по умолчанию в один. При более высокой мощности бегун повторно выставляет счётчики и датчики сеанса на своей собственной конечной точке /metrics вместо этого.
Для отправки метрик нескольким экспортерам:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
Для отправки метрик и логов на разные конечные точки или бэкенды:
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/v1/metrics
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317
Для экспорта только метрик, без событий или логов:
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
Для экспорта только событий и логов, без метрик:
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
Телеметрия из облачных сеансов и Claude Tag
Облачные сеансы, включая сеансы канала Claude Tag, работают в облачных окружениях вместо устройств ваших пользователей, поэтому управляемый файл параметров или профиль оболочки на этих устройствах не настраивает их телеметрию. Для сеансов в окружениях, размещённых Anthropic, этот раздел охватывает, где устанавливать переменные телеметрии, как сделать ваш сборщик доступным из окружения и как различать облачные сеансы и сеансы Claude Tag в экспортированных данных.
Чтобы экспортировать телеметрию из этих сеансов, установите CLAUDE_CODE_ENABLE_TELEMETRY и переменные OTEL_*, используя те же ключи, что и в примере конфигурации администратора, в одном из двух мест:
- Параметры, управляемые сервером: добавьте их в блок
envпараметров, управляемых сервером вашей организации. Claude Code получает эти параметры при запуске везде, где применяются параметры, управляемые сервером, что включает машины ваших пользователей и облачные сеансы, кроме сеансов канала Claude Tag. Сеансы Claude Tag не получают ваши параметры, управляемые сервером, поэтому этот способ их не настраивает. - Переменные окружения: добавьте их в переменные окружения облачного окружения, чтобы настроить только сеансы, работающие в этом окружении. Это способ, который достигает сеансов Claude Tag.
Любой, кто использует окружение, может читать его переменные, поэтому не помещайте туда учётные данные, например токен сборщика в OTEL_EXPORTER_OTLP_HEADERS. Сетевой секрет в окружении тоже не поможет, потому что собственный экспорт телеметрии Claude Code — это один из запросов, которые никогда не получают секрет. Если ваш сборщик требует учётные данные, вместо этого настройте весь экспорт через настройки, управляемые сервером, потому что когда вы задаёте учётные данные там, Claude Code удаляет переменные эндпоинта, заданные вне управляемых настроек.
Помните об этих ограничениях при настройке телеметрии для облачных сеансов:
- Позвольте сеансам достичь сборщика: Claude Code отправляет экспорт через сеть сеанса, поэтому достигнет ли он хоста в вашем
OTEL_EXPORTER_OTLP_ENDPOINT, зависит от уровня сетевого доступа окружения. Если сеансы не могут достичь домена сборщика на выбранном вами уровне, добавьте домен в список разрешений окружения, потому что ни один параметр, управляемый сервером, не добавляет домены в список разрешений сети окружения. - Каналы Claude Tag: вносите изменения в список разрешённых доменов и любые переменные окружения в общем окружении, установленном как окружение по умолчанию для вашей организации или закреплённом за каналом.
- Cowork настраивается отдельно: сеансы Cowork не получают параметры, управляемые сервером, как показывает таблица охвата поверхности, поэтому блок
env, управляемый сервером, не настраивает их телеметрию.
Атрибутирование телеметрии облачным сеансам
По умолчанию метрики и события из облачного сеанса содержат стандартные атрибуты, включая session.id, ccr.session.id и organization.id, поэтому вы можете фильтровать по сеансу или организации без дополнительной настройки. Значение ccr.session.id — это CLAUDE_CODE_REMOTE_SESSION_ID сеанса. Чтобы преобразовать его в URL транскрипта сеанса, см. Связать вывод обратно с сеансом.
Чтобы различать облачные сессии, группируйте или фильтруйте по ccr.session.id, а не по session.id.
Чтобы атрибутировать телеметрию более подробно, используйте эти параметры:
- Определить сессии Claude Tag: установите
OTEL_METRICS_INCLUDE_ENTRYPOINT=true, как описано в разделе Контроль кардинальности метрик. Метрики и события затем содержатapp.entrypoint, значение которого —claude-in-slackдля сессий Claude Tag. - Добавить пользовательские атрибуты: установите
OTEL_RESOURCE_ATTRIBUTESв том же месте, где вы устанавливаете другие переменныеOTEL_*для этих сеансов. Если выexportего в скрипте настройки окружения вместо этого, значение не достигает Claude Code: скрипт настройки — это отдельный скрипт Bash, который запускается перед запуском Claude Code, и переменные, которые он экспортирует, заканчиваются с ним.
В сеансах канала Claude Tag Claude работает как общая идентичность вашей организации, а не как какой-либо член, поэтому не полагайтесь на атрибуты user.* для определения того, кто отметил Claude.
Доступные метрики и события
Стандартные атрибуты
Все метрики и события содержат следующие стандартные атрибуты:
| Атрибут | Описание | Чем управляется |
|---|---|---|
session.id |
Собственный идентификатор сессии Claude Code, который заменяется командой /clear |
OTEL_METRICS_INCLUDE_SESSION_ID (по умолчанию: true) |
ccr.session.id |
Идентификатор облачной сессии, значение CLAUDE_CODE_REMOTE_SESSION_ID, в сессиях, которые выполняются в облачном окружении |
OTEL_METRICS_INCLUDE_SESSION_ID (по умолчанию: true) |
app.version |
Текущая версия Claude Code | OTEL_METRICS_INCLUDE_VERSION (по умолчанию: false) |
app.entrypoint |
Способ запуска сессии, например cli, sdk-cli, sdk-ts, sdk-py, claude-vscode, claude-desktop для сессий вкладки Code в Claude Desktop вне облака, claude-desktop-3p для тех же сессий в стороннем развёртывании или claude-in-slack для сессий Claude Tag. Значения для облачных сессий включают remote, а также remote_desktop и remote_mobile для сессий, которые вы запускаете из Claude Desktop или мобильного приложения |
OTEL_METRICS_INCLUDE_ENTRYPOINT (по умолчанию: false) |
organization.id |
UUID организации (при аутентификации) | Всегда включается, если доступен |
user.account_uuid |
UUID аккаунта (при аутентификации) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (по умолчанию: true) |
user.account_id |
ID аккаунта в формате с тегом, соответствующем административным API Anthropic (при аутентификации), например user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (по умолчанию: true) |
user.id |
Случайный анонимный идентификатор, создаваемый при первом запуске и сохраняемый в ~/.claude.json. Он не содержит персональной информации и не выводится из вашего аккаунта Claude. Удаление файла приводит к появлению нового, не связанного с прежним значения при следующем запуске. |
Всегда включается |
user.email |
Адрес электронной почты пользователя, полученный при входе или, в облачной сессии, из собственных учётных данных сессии | Всегда включается, если доступен |
terminal.type |
Тип терминала, например iTerm.app, vscode, cursor или tmux |
Всегда включается, если определён |
Ключи из OTEL_RESOURCE_ATTRIBUTES |
Заданные вами пользовательские атрибуты, например department или team.id. См. Поддержка организаций с несколькими командами |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (по умолчанию: true) |
vcs.repository.url.full, vcs.owner.name, vcs.repository.name, vcs.provider.name |
Идентификация репозитория сессии, выведенная из его удалённого репозитория origin. См. Атрибуты репозитория |
OTEL_METRICS_INCLUDE_REPOSITORY (по умолчанию: false). Требуется Claude Code v2.1.269 или новее |
В сессиях, в которых выполнен вход в шлюз приложений Claude через /login, CLI помечает экспортируемые данные аутентифицированной идентичностью: user.id — это субъект IdP, user.email — адрес электронной почты, с которым выполнен вход, а user.groups содержит членство в группах IdP в виде строки с разделителями-запятыми. Каждый экспорт также содержит identity.source: gateway-oidc. Идентичность шлюза применяется последней, поэтому ключи user.* и identity.*, заданные через OTEL_RESOURCE_ATTRIBUTES, в таких сессиях игнорируются.
[!NOTE]
События, которые Claude Code записывает в лог до входа разработчика, не содержат идентичности шлюза. Когда Claude Code открывает сессию без входа в шлюз, например после того как шлюз завершил вход, события запуска, записанные до входа, содержат анонимный
user.idи не содержатidentity.source. К ним относятсяmanaged_settings_resolved,plugin_loadedиmcp_server_connection.
Атрибуты идентичности для сессий Claude Desktop и Cowork, подключающихся через шлюз, описаны в справочнике telemetry шлюза.
События дополнительно содержат следующие атрибуты. Они никогда не добавляются к метрикам, поскольку привели бы к неограниченной кардинальности:
prompt.id: UUID, связывающий промпт пользователя со всеми последующими событиями до следующего промпта. См. Атрибуты корреляции событий.workspace.host_paths: каталоги рабочего пространства хоста, выбранные в настольном приложении, в виде массива строкworkflow.run_id: идентификатор запуска с префиксомwf_в событиях API и инструментов, которые генерируют агенты, относящиеся к запуску инструмента Workflow. Фильтрация событий по одномуworkflow.run_idпозволяет восстановить API-запросы и результаты инструментов этого запуска. Идентификатор охватывает агентов, порождаемых скриптом workflow, и всех агентов, которых порождают уже они, например вызовы скиллов. Он совпадает с идентификатором запуска, сообщаемым в результате инструмента Workflow.workflow.name: имя workflow,meta.nameего скрипта, генерируется вместе сworkflow.run_id. Имена встроенных workflow отображаются как есть, когда запуск выполняет неизменённый встроенный скрипт. Имена, заданные пользователем, включая отредактированные копии встроенных скриптов, заменяются наcustom, если не заданоOTEL_LOG_TOOL_DETAILS=1.agent_id: идентификатор субагента, вызвавшего событие, напримерa3f2c1b4d5e6f7a80. Он присутствует в событиях API и инструментов субагента, в его событияхassistant_responseи вsubagent_completedдля завершённого субагента. Отсутствует в событиях основной сессии и внутрипроцессных участников команды.agent_idспана субагента имеет то же значение или добавляет метку после начальнойa, как вacompact-3f2c1b4d5e6f7a80. Требуется Claude Code v2.1.310 или новееparent_agent_id:agent_idагента, который породил или последним возобновил субагента, вызвавшего событие. Отсутствует, если этот агент — основная сессия. Требуется Claude Code v2.1.310 или новее
Атрибуты репозитория
Задайте OTEL_METRICS_INCLUDE_REPOSITORY=true, чтобы помечать метрики и события идентификацией репозитория сессии, — так общий коллектор сможет распределять использование по репозиториям. Требуется Claude Code v2.1.269 или новее.
Claude Code выводит эти атрибуты один раз за сессию из удалённого репозитория origin. Когда удалённые адреса HTTPS и SSH репозитория указывают на один и тот же хост и один и тот же путь, как на GitHub, GitLab и Bitbucket Cloud, оба дают одинаковые значения:
| Атрибут | Значение |
|---|---|
vcs.repository.url.full |
URL репозитория для браузера без .git, например https://github.com/example-org/example-repo |
vcs.owner.name |
Путь владельца или группы, например example-org; не указывается, если путь удалённого репозитория состоит из одного сегмента |
vcs.repository.name |
Имя репозитория без пути, например example-repo |
vcs.provider.name |
github, gitlab, bitbucket или gitea, когда Claude Code распознаёт хост или форму URL удалённого репозитория как одного из этих провайдеров; в остальных случаях не указывается |
Значения приводятся к нижнему регистру, а учётные данные, строки запроса и фрагменты из URL удалённого репозитория в них никогда не попадают. Атрибуты не указываются, если у сессии нет удалённого репозитория origin, если удалённый адрес не имеет формы URL или если единственным объемлющим репозиторием является ваш домашний каталог.
Чтобы получать эти атрибуты из облачной сессии, задайте переменные телеметрии, включая OTEL_METRICS_INCLUDE_REPOSITORY, в её облачном окружении. Также разрешите домен вашего коллектора в настройках сетевого доступа окружения.
Ключ vcs.*, объявленный вами в OTEL_RESOURCE_ATTRIBUTES, заменяет выведенное значение для этого ключа. Если вы объявите vcs.repository.url.full, Claude Code вообще не читает удалённый репозиторий и сообщает только объявленные вами ключи.
Если клоны одного репозитория по HTTPS и SSH сообщают разные значения, например в самостоятельно размещённой установке, где URL клонирования по HTTPS содержит префикс пути, отсутствующий в URL SSH, объявите vcs.repository.url.full в OTEL_RESOURCE_ATTRIBUTES вместе со всеми остальными ключами vcs.*, которые хотите сообщать. Тогда каждый клон будет сообщать объявленную вами идентификацию.
Атрибуты передаются только в ваши собственные экспортёры; телеметрия Anthropic отбрасывает все ключи vcs.*.
Метрики
Claude Code экспортирует следующие метрики. В столбце «Единица» указана строка единицы измерения OpenTelemetry, прикреплённая к каждой метрике; у метрик-счётчиков её нет.
| Имя метрики | Описание | Единица |
|---|---|---|
claude_code.session.count |
Количество запущенных сессий | нет |
claude_code.lines_of_code.count |
Количество изменённых строк кода | нет |
claude_code.pull_request.count |
Количество созданных pull request | нет |
claude_code.commit.count |
Количество созданных git-коммитов | нет |
claude_code.cost.usage |
Стоимость сессии Claude Code | USD |
claude_code.token.usage |
Количество использованных токенов | tokens |
claude_code.code_edit_tool.decision |
Количество решений о разрешениях для инструментов редактирования кода | нет |
claude_code.active_time.total |
Общее активное время | s |
Когда prometheus — единственный экспортёр, указанный в OTEL_METRICS_EXPORTER, Claude Code опускает единицы USD, tokens и s в экспортируемых метриках, чтобы результат сбора оставался корректным текстовым форматом Prometheus. Имена метрик не меняются, а конфигурации, сочетающие экспортёры, например otlp,prometheus, сохраняют единицы.
Подробности метрик
Каждая метрика включает перечисленные выше стандартные атрибуты. Метрики с дополнительными атрибутами, зависящими от контекста, отмечены ниже.
Счётчик сессий
Увеличивается при запуске каждой сессии. Чтобы считать людей, см. Мониторинг использования.
Атрибуты:
- Все стандартные атрибуты
start_type: Способ запуска сессии. Одно из значений"fresh","resume","continue"или"agents_view". Значение"agents_view"обозначает процесс панелиclaude agents— локальный интерфейс, запускаемый пользователем, а не диалоговую сессию. Фильтруйте по этому значению, чтобы отделять запуски процессов интерфейса от диалоговых сессий на ваших дашбордах.
Счётчик строк кода
Увеличивается при добавлении или удалении кода.
Атрибуты:
- Все стандартные атрибуты
type: ("added","removed")model: Идентификатор модели, внёсшей изменение (например, "claude-sonnet-5")
Счётчик pull request
Увеличивается, когда Claude Code создаёт pull request или merge request с помощью shell-команды или инструмента MCP.
Атрибуты:
Счётчик коммитов
Увеличивается при создании git-коммитов через Claude Code.
Атрибуты:
Счётчик стоимости
Увеличивается после каждого API-запроса.
Атрибуты agent.name, skill.name, plugin.name, mcp_server.name и mcp_tool.name по умолчанию заменяют некоторые имена заполнителем "custom" или "third-party". Если задать OTEL_LOG_TOOL_DETAILS=1, они содержат настоящие имена. До v2.1.273 счётчики стоимости и токенов, а также события api_request, api_error и api_refusal содержали скрытые значения даже при заданном OTEL_LOG_TOOL_DETAILS=1.
Атрибуты:
- Все стандартные атрибуты
model: Идентификатор модели (например, "claude-sonnet-5")query_source: Категория подсистемы, отправившей запрос. Одно из значений"main","subagent"или"auxiliary"speed:"fast", если запрос использовал быстрый режим. В остальных случаях отсутствуетeffort: Уровень effort, применённый к запросу:"low","medium","high","xhigh"или"max". Отсутствует, если Claude Code не отправляет уровень effort, например для модели, которая не поддерживает effort.agent.name: Тип субагента, отправившего запрос. Имена встроенных агентов и агентов из плагинов официального маркетплейса отображаются как есть. Другие имена агентов, определённых пользователем, заменяются на"custom". Отсутствует, если запрос отправлен не именованным типом субагента.skill.name: Скилл, активный для запроса, заданный инструментом Skill или командой/либо унаследованный порождённым субагентом. Имена встроенных, поставляемых в комплекте, определённых пользователем скиллов и скиллов плагинов официального маркетплейса отображаются как есть. Имена скиллов сторонних плагинов заменяются на"third-party". Отсутствует, если активного скилла нет.plugin.name: Плагин-владелец, если активный скилл или субагент предоставлен плагином. Имена плагинов официального маркетплейса отображаются как есть. Имена сторонних плагинов заменяются на"third-party". Отсутствует, если ни у скилла, ни у субагента нет плагина-владельца.marketplace.name: Маркетплейс, из которого установлен плагин-владелец. Генерируется только для плагинов официального маркетплейса, даже при заданномOTEL_LOG_TOOL_DETAILS=1. В остальных случаях отсутствует.mcp_server.name: MCP-сервер, результат инструмента которого использовал этот запрос. Имена встроенных серверов, серверов, проксируемых через claude.ai, и серверов из официального реестра отображаются как есть. Имена серверов, настроенных пользователем, заменяются на"custom". Отсутствует, если запрос не использовал результат инструмента MCP. До v2.1.222 Claude Code устанавливал этот атрибут для каждого запроса после вызова инструмента MCP, а не только для запросов, использовавших результат инструмента, поэтому на дашбордах, агрегирующих его, после обновления будет заметно снижение.mcp_tool.name: Инструмент MCP, результат которого использовал этот запрос; скрытие и поведение в зависимости от версии такие же, как уmcp_server.name. Отсутствует, если запрос не использовал результат инструмента MCP.
Счётчик токенов
Увеличивается после каждого API-запроса.
Атрибуты:
- Все стандартные атрибуты
type: ("input","output","cacheRead","cacheCreation"). Тип"input"не включает токены, прочитанные из кэша промптов или записанные в него, — они учитываются в"cacheRead"и"cacheCreation". Тип"cacheCreation"учитывает записи в кэш с пятиминутным и часовым временем жизни кэша вместе.model: Идентификатор модели (например, "claude-sonnet-5")query_source: Категория подсистемы, отправившей запрос. Одно из значений"main","subagent"или"auxiliary"speed:"fast", если запрос использовал быстрый режим. В остальных случаях отсутствуетeffort: Уровень effort, применённый к запросу. Подробнее см. Счётчик стоимости.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Атрибуция запроса к скиллу, плагину, агенту и MCP. Определения и правила скрытия см. в разделе Счётчик стоимости.
Счётчик решений для инструментов редактирования кода
Увеличивается, когда пользователь принимает или отклоняет использование инструментов Edit, Write или NotebookEdit.
Атрибуты:
- Все стандартные атрибуты
tool_name: Имя инструмента ("Edit","Write","NotebookEdit")decision: Решение пользователя ("accept","reject")source: Источник решения. Одно из значений"config","hook","user_permanent","user_temporary","user_abort"или"user_reject". Значение каждого из них описано в разделе Событие решения по инструменту.language: Язык программирования редактируемого файла, например"TypeScript","Python","JavaScript"или"Markdown". Для нераспознанных расширений файлов возвращает"unknown".
Счётчик активного времени
Отслеживает фактическое время активного использования Claude Code, исключая время простоя. Эта метрика увеличивается во время взаимодействия с пользователем, например при вводе текста и чтении ответов, а также во время обработки в CLI, например при выполнении инструментов и генерации ответов ИИ.
Атрибуты:
- Все стандартные атрибуты
type:"user"для взаимодействий с клавиатурой,"cli"для выполнения инструментов и ответов ИИ
События
Claude Code экспортирует следующие события через логи/события OpenTelemetry (если настроен OTEL_LOGS_EXPORTER):
Атрибуты корреляции событий
Когда пользователь отправляет промпт, Claude Code может выполнить несколько вызовов API и запустить несколько инструментов. Атрибут prompt.id позволяет связать все эти события с единственным промптом, который их вызвал.
| Атрибут | Описание |
|---|---|
prompt.id |
Идентификатор UUID v4, связывающий все события, созданные при обработке одного промпта пользователя |
event.sequence |
Счётчик с отсчётом от 0 для упорядочивания событий, ведущийся для каждого процесса Claude Code, а не для каждой сессии |
message.uuid |
UUID сообщения в том виде, в каком оно сохранено в транскрипте сессии — файлах ~/.claude/projects/*/*.jsonl. Присутствует в assistant_response, в api_response_body и в user_prompt, за исключением вызовов команд, которые могут породить ноль или много сообщений. В assistant_response и api_response_body это последняя запись ответа в транскрипте, от которой выстраивается цепочка parentUuid следующего хода. Для api_response_body требуется Claude Code v2.1.274 или новее |
request_id |
Назначенный сервером ID API-запроса, считываемый из заголовка ответа request-id, например req_011.... Для ответа без заголовка request-id, как в Amazon Bedrock, значение берётся из заголовка x-amzn-requestid. Присутствует в api_request, api_error, api_refusal, assistant_response, api_response_body, tool_result и tool_decision, если ответ содержит любой из этих заголовков. Совпадает с одноимённым атрибутом спана трассировки llm_request. Источник x-amzn-requestid требует Claude Code v2.1.282 или новее |
client_request_id |
Сгенерированный клиентом UUID, отправляемый в заголовке запроса x-client-request-id. Присутствует в api_request и api_error при прямых подключениях к API; отсутствует при использовании бэкендов сторонних провайдеров и когда запрос был повторён через непотоковый резервный вариант. Связывает запрос с его ответом и остаётся доступным при сбоях, например таймаутах, которые так и не дали серверный request_id. Совпадает с одноимённым атрибутом в span трассировки llm_request |
Чтобы отследить всю активность, вызванную одним промптом, отфильтруйте события по конкретному значению prompt.id. Так вы получите событие user_prompt, все события api_request и все события tool_result, произошедшие при обработке этого промпта.
event.sequence начинается с 0 при каждом запуске процесса Claude Code и увеличивается на протяжении жизни этого процесса. Счёт продолжается и после /clear, который назначает новый session.id. Если вы возобновите сессию без ответвления, сессия сохранит свой session.id, но будет получать значения event.sequence от процесса, который её возобновил, поэтому в пределах одной сессии более позднее событие может иметь меньшее значение, чем более раннее, или повторять его. Чтобы упорядочить события сессии, сортируйте по event.timestamp, а event.sequence используйте для упорядочивания событий с одинаковой меткой времени.
Для восстановления на уровне сообщений каждый класс событий содержит ключ, совпадающий с полем в транскрипте сессии. Формат записей транскрипта является внутренним для Claude Code и меняется от версии к версии, поэтому конвейер, выполняющий соединение по этим полям, может сломаться в любом релизе; рассматривайте такие соединения как зависящие от версии, а не как стабильный контракт:
message.uuidвuser_prompt,assistant_responseиapi_response_bodyrequest_idв событиях API, сохраняемый какrequestIdв записях ассистента в транскриптеtool_use_idв событияхtool_resultиtool_decision, а также в событияхsafety_event, кроме относящихся к завершению хода
Событие промпта пользователя
Записывается в лог при отправке промпта, включая ходы, которые Claude Code начинает самостоятельно.
Имя события: claude_code.user_prompt
Атрибуты:
- Все стандартные атрибуты
event.name:"user_prompt"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийprompt_length: Длина промптаprompt: Содержимое промпта. По умолчанию скрыто. ЗадайтеOTEL_LOG_USER_PROMPTS=1, чтобы включить егоprompt_text: То же значение, что иprompt, скрываемое по тому же условию. Бэкенд, который хранит имена атрибутов с точками как вложенные объекты, читаетprompt.idкакidвнутри объекта с именемpromptи может потерять строку промпта. В этом случае читайтеprompt_text. Требуется Claude Code v2.1.287 или новееmessage.uuid: UUID итогового сообщения пользователя, совпадающий с сохранённой записью транскрипта. Отсутствует при вызовах команд, которые могут породить ноль или много сообщений.command_name: Имя команды, если промпт вызывает команду. Имена встроенных и поставляемых в комплекте команд, напримерcompactилиdebug, передаются как есть; псевдонимы, напримерreset, передаются в том виде, в каком они введены, а не каноническим именем. Имена пользовательских команд, команд плагинов и MCP сводятся кcustomилиmcp, если не заданоOTEL_LOG_TOOL_DETAILS=1command_source: Происхождение команды, если она есть:builtin,customилиmcp. Команды, предоставляемые плагинами, сообщаются какcustom
Событие ответа ассистента
Записывается в лог после каждого API-запроса, который возвращает текстовое содержимое от модели. Включаются только текстовые блоки ответа; блоки размышлений и блоки использования инструментов исключаются.
Имя события: claude_code.assistant_response
Атрибуты:
- Все стандартные атрибуты
event.name:"assistant_response"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийresponse_length: Длина текста ответа в символахresponse: Текст ответа, усечённый до лимита содержимого (по умолчанию 60 КБ). По умолчанию заменяется на<REDACTED>. ЗадайтеOTEL_LOG_ASSISTANT_RESPONSES=1, чтобы включить его. ЕслиOTEL_LOG_ASSISTANT_RESPONSESне задана, управление берёт на себяOTEL_LOG_USER_PROMPTS, поэтому задайтеOTEL_LOG_ASSISTANT_RESPONSES=0, чтобы ответы оставались скрытыми при включённом логировании промптовmodel: Идентификатор модели (например, "claude-sonnet-5")request_id: ID API-запроса, описанный в разделе Атрибуты корреляции событийmessage.uuid: UUID последней записи ответа в транскрипте. Ответ API сохраняется как одна запись транскрипта на каждый блок содержимого; это последняя из них, от которой выстраивается цепочкаparentUuidследующего хода.query_source: Подсистема, отправившая запрос, например"repl_main_thread","compact"или имя субагента
Событие результата инструмента
Записывается в лог, когда инструмент завершает выполнение. Не генерируется, если вызов инструмента был отклонён; отклонения описаны в разделе Событие решения по инструменту.
Имя события: claude_code.tool_result
Атрибуты:
- Все стандартные атрибуты
event.name:"tool_result"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийtool_name: Имя инструментаtool_use_id: Уникальный идентификатор этого вызова инструмента. Совпадает сtool_use_id, передаваемым хукам, что позволяет сопоставлять события OTel с данными, собранными хуками.request_id:request_idответа API, содержавшего этот вызов инструмента, чтобы вы могли связать вызов с событиями API этого ответа. Отсутствует, если у этого ответа не было ID запроса или если ни один ответ API не содержал этот вызов. Требуется Claude Code v2.1.310 или новееsuccess:"true"или"false"duration_ms: Время выполнения в миллисекундахerror_type: Строка категории ошибки, если инструмент завершился сбоем, например"Error:ENOENT"или"ShellError"error(приOTEL_LOG_TOOL_DETAILS=1): Полное сообщение об ошибке, если инструмент завершился сбоемdecision_type: Всегда"accept", поскольку это событие генерируется только после запуска инструмента. Отклонённые вызовы не дают результата инструментаdecision_source: Источник решения о разрешении. Одно из значений"config","hook","user_permanent"или"user_temporary". Значение каждого из них описано в разделе Событие решения по инструменту. Источники"user_abort"и"user_reject", используемые только при отклонении, в этом событии никогда не встречаются.tool_input_size_bytes: Размер входных данных инструмента в формате JSON в байтахtool_result_size_bytes: Размер результата инструмента в байтахmcp_server_scope: Идентификатор области действия MCP-сервера (для инструментов MCP)vcs.ref.head.revision,vcs.ref.head.name,vcs.ref.head.type(приOTEL_LOG_TOOL_DETAILS=1): идентификация коммита для успешногоgit commit, выполненного инструментом Bash или PowerShell.vcs.ref.head.revision— SHA коммита,vcs.ref.head.name— ветка, в которой он сделан, аvcs.ref.head.type—branch. Имя и тип не указываются, если коммит сделан на отсоединённом HEAD. Требуется Claude Code v2.1.269 или новееtool_parameters(приOTEL_LOG_TOOL_DETAILS=1): Строка JSON с параметрами, специфичными для инструмента. Для встроенных серверов Claude Desktop в сессиях, которыми владеет Claude Desktop, параmcp_server_name/mcp_tool_nameвключается даже при выключенном флаге — то же исключение для имён, заданных хостом, что и в Событии решения по инструменту. Параметры зависят от инструмента:- Для инструмента Bash: включает
bash_command,full_command,timeout,descriptionиdangerouslyDisableSandbox, а такжеgit_commit_idиgit_branch, когда командаgit commitвыполнена успешно.git_commit_id— полный SHA коммита, если коммит является HEAD рабочего каталога сессии, и сокращённый SHA git в остальных случаях.git_branch— ветка, в которой сделан коммит; не указывается при отсоединённом HEAD - Для инструмента Bash рабочего пространства в настольном приложении, который также сообщает
tool_nameкакBash: включает толькоbash_command,full_commandиtimeout - Для инструментов MCP: включает
mcp_server_name,mcp_tool_name - Для инструмента Skill: включает
skill_name - Для инструмента Agent или устаревшего инструмента Task: включает
subagent_type
- Для инструмента Bash: включает
tool_input(приOTEL_LOG_TOOL_DETAILS=1): Аргументы инструмента в формате JSON. Отдельные значения длиннее 512 символов усекаются, а общий объём данных ограничен ~4 тыс. символов. Применяется ко всем инструментам, включая инструменты MCP.
Событие API-запроса
Записывается в лог для каждого API-запроса к Claude.
Имя события: claude_code.api_request
Атрибуты:
- Все стандартные атрибуты
event.name:"api_request"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmodel: Использованная модель (например, "claude-sonnet-5")cost_usd: Оценочная стоимость в USDcost_usd_micros: Оценочная стоимость в миллионных долях доллара США, передаётся как целое числоduration_ms: Длительность запроса в миллисекундахinput_tokens: Количество входных токенов, без учёта токенов, прочитанных из кэша промптов или записанных в негоoutput_tokens: Количество выходных токеновcache_read_tokens: Количество токенов, прочитанных из кэшаcache_creation_tokens: Количество токенов, использованных для создания кэшаcache_creation_5m_tokens,cache_creation_1h_tokens: количество токенов, которые, согласно ответу API, были записаны в кэш с пятиминутным временем жизни кэша, и количество записанных с часовым временем жизни. Оба равны0, если ответ API их не сообщает, даже когдаcache_creation_tokensбольше нуля. Требуется Claude Code v2.1.300 или новееrequest_id: ID API-запроса, например"req_011...", описанный в разделе Атрибуты корреляции событий.client_request_id: Сгенерированный клиентом UUID, отправляемый в заголовке запросаx-client-request-id; когда он присутствует, см. в таблице атрибутов корреляции событийspeed:"fast"или"normal", указывает, был ли активен быстрый режимquery_source: Подсистема, отправившая запрос, например"repl_main_thread","compact"или имя субагентаeffort: Уровень effort, применённый к запросу:"low","medium","high","xhigh"или"max". Отсутствует, если Claude Code не отправляет уровень effort, например для модели, которая не поддерживает effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Атрибуция запроса к скиллу, плагину, агенту и MCP. Определения и правила скрытия см. в разделе Счётчик стоимости.
Событие ошибки API
Записывается в лог, когда API-запрос к Claude завершается сбоем.
Имя события: claude_code.api_error
Атрибуты:
- Все стандартные атрибуты
event.name:"api_error"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmodel: Использованная модель (например, "claude-sonnet-5")error: Сообщение об ошибкеstatus_code: Код состояния HTTP в виде числа. Отсутствует для ошибок, не связанных с HTTP, например сбоев подключения.duration_ms: Длительность запроса в миллисекундахattempt: Количество выполненных попыток, включая первоначальный запрос. Когда счёт начинается заново, описано в разделе Обнаружение исчерпания повторных попытокrequest_id: ID API-запроса, например"req_011...", описанный в разделе Атрибуты корреляции событий.client_request_id: Сгенерированный клиентом UUID, отправляемый в заголовке запросаx-client-request-id. Доступен, даже если сбой, например таймаут или ошибка подключения, так и не дал серверныйrequest_id; когда он присутствует, см. в таблице атрибутов корреляции событий.speed:"fast"или"normal", указывает, был ли активен быстрый режимquery_source: Подсистема, отправившая запрос, например"repl_main_thread","compact"или имя субагентаeffort: Уровень effort, применённый к запросу. Отсутствует, если Claude Code не отправляет уровень effort, например для модели, которая не поддерживает effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Атрибуция запроса к скиллу, плагину, агенту и MCP. Определения и правила скрытия см. в разделе Счётчик стоимости.
Событие отказа API
Записывается в лог, когда API-запрос возвращает stop_reason: "refusal". Отказы приходят в успешном потоке ответа, а не в виде ошибки HTTP, поэтому событие api_error для них не срабатывает. Это событие позволяет отслеживать частоту отказов и группировать их по тем же атрибутам, что и api_request и api_error.
Имя события: claude_code.api_refusal
Атрибуты:
- Все стандартные атрибуты
event.name:"api_refusal"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmodel: Идентификатор модели из запросаrequest_id: ID API-запроса, например"req_011...", описанный в разделе Атрибуты корреляции событий.query_source: Подсистема, отправившая запрос, например"repl_main_thread","compact"или имя субагента. Определения см. вapi_request.speed: Либо"fast", когда активен быстрый режим, либо"normal"attempt: Номер повторной попытки. Первая попытка —1.effort: Уровень effort, применённый к запросу. Отсутствует, если Claude Code не отправляет уровень effort, например для модели, которая не поддерживает effort.server_fallback_hop:true, когда серверный резервный вариант модели в API уже повторил этот отказ на другой модели, так что пользователь не увидел этот конкретный отказ.false, когда запрос завершился отказом. Один ход может сгенерировать как событие перехода сtrue, так и последующее итоговое событие сfalse, если резервная модель тоже отказывает.has_category:true, когда ответ API содержалstop_details.categoryсо значением"cyber","bio","frontier_llm"или"reasoning_extraction".false, когда ответ не содержал категории или содержал значение вне этого набора. Отсутствует, когдаserver_fallback_hopравноtrue, поскольку блоки перехода не содержатstop_details.has_explanation:true, когда ответ API содержалstop_details.explanation, иначеfalse. Отсутствует, когдаserver_fallback_hopравноtrue.category: Значениеstop_details.categoryиз ответа API. Одно из значений"cyber","bio","frontier_llm"или"reasoning_extraction". Присутствует, только если заданоOTEL_LOG_TOOL_DETAILS=1иhas_categoryравноtrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Атрибуция запроса к скиллу, плагину, агенту и MCP. Определения и правила скрытия см. в разделе Счётчик стоимости.
Событие тела API-запроса
Записывается в лог для каждой попытки API-запроса, если задана OTEL_LOG_RAW_API_BODIES. На каждую попытку генерируется одно событие, поэтому повторные попытки со скорректированными параметрами порождают собственные события.
Имя события: claude_code.api_request_body
Атрибуты:
- Все стандартные атрибуты
event.name:"api_request_body"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийbody: Параметры запроса Messages API в формате JSON, например системный промпт, сообщения и инструменты, усечённые до лимита содержимого (по умолчанию 60 КБ). Содержимое расширенного мышления в предыдущих ходах ассистента скрывается. Генерируется только во встроенном режиме (OTEL_LOG_RAW_API_BODIES=1).body_ref: Абсолютный путь к файлу<dir>/<uuid>.request.json, содержащему неусечённое тело. Генерируется только в файловом режиме (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Длина неусечённого тела. В байтах UTF-8 приOTEL_LOG_RAW_API_BODIES=file:<dir>или в кодовых единицах UTF-16 при=1body_truncated:"true", если произошло встроенное усечение. Отсутствует в файловом режиме и если усечения не было.model: Идентификатор модели из параметров запросаquery_source: Подсистема, отправившая запрос (например,"compact")request_body_id: UUID, идентифицирующий тело запроса этой попытки. Событиеapi_response_bodyдля успешной попытки содержит то же значение, поэтому вы можете сопоставить ответ с тем самым запросом, который его породил. Требуется Claude Code v2.1.274 или новее
Событие тела ответа API
Записывается в лог для каждого успешного ответа API, если задана OTEL_LOG_RAW_API_BODIES.
В файловом режиме (OTEL_LOG_RAW_API_BODIES=file:<dir>) Claude Code также добавляет одну строку JSON в <dir>/index.jsonl для каждого успешного ответа с полями timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file и response_file. Читайте его, чтобы найти файлы запроса и ответа, стоящие за конкретным сообщением транскрипта, не обращаясь к бэкенду телеметрии. Файл индекса требует Claude Code v2.1.274 или новее.
Имя события: claude_code.api_response_body
Атрибуты:
- Все стандартные атрибуты
event.name:"api_response_body"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийbody: Ответ Messages API в формате JSON, включая id, блоки содержимого, использование и причину остановки, усечённый до лимита содержимого (по умолчанию 60 КБ). Содержимое расширенного мышления скрывается. Генерируется только во встроенном режиме (OTEL_LOG_RAW_API_BODIES=1).body_ref: Абсолютный путь к файлу<dir>/<request_id>.response.json, содержащему неусечённое тело. Генерируется только в файловом режиме (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Длина неусечённого тела. В байтах UTF-8 приOTEL_LOG_RAW_API_BODIES=file:<dir>или в кодовых единицах UTF-16 при=1body_truncated:"true", если произошло встроенное усечение. Отсутствует в файловом режиме и если усечения не было.model: Идентификатор моделиquery_source: Подсистема, отправившая запросrequest_id: ID API-запроса, например"req_011...", описанный в разделе Атрибуты корреляции событий.request_body_id:request_body_idсобытияapi_request_body, на которое отвечает этот ответ. Требуется Claude Code v2.1.274 или новееmessage.id: ID сообщения, назначенный ответу API, — полеidтела ответа. Требуется Claude Code v2.1.274 или новееmessage.uuid: UUID последней записи ответа в транскрипте. Вместе сrequest_body_idсвязывает сообщение транскрипта с телами запроса и ответа, стоящими за ним. Требуется Claude Code v2.1.274 или новее
Событие решения по инструменту
Записывается в лог, когда принимается решение о разрешении для инструмента (принять/отклонить).
Имя события: claude_code.tool_decision
Атрибуты:
-
event.name:"tool_decision" -
event.timestamp: Метка времени ISO 8601 -
event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событий -
tool_name: Имя инструмента (например, "Read", "Edit", "Write", "NotebookEdit") -
tool_use_id: Уникальный идентификатор этого вызова инструмента. Совпадает сtool_use_id, передаваемым хукам, что позволяет сопоставлять события OTel с данными, собранными хуками. -
request_id:request_idответа API, содержавшего этот вызов инструмента, чтобы вы могли связать вызов с событиями API этого ответа. Отсутствует, если у этого ответа не было ID запроса или если ни один ответ API не содержал этот вызов. Требуется Claude Code v2.1.310 или новее -
decision: Либо"accept", либо"reject" -
tool_source: Присутствует всегда. Происхождение инструмента в виде закрытого набора значений, заданных CLI:"builtin": собственные инструменты CLI"mcp": MCP-серверы в целом"sdk_host_builtin_mcp": внутрипроцессный сервер, встроенный в сам Claude Desktop, в сессии, которой владеет Claude Desktop. Claude Desktop владеет сессией, которую запустил из одной из своих точек входа —claude-desktop,claude-desktop-3pилиlocal-agent, — если эта сессия не является вложенной дочерней; вложенные сессии, включая сессии, которые порождает сам Claude Code, сообщают эти серверы как"mcp"
-
source: Источник решения:-
"config": Решение принято автоматически без запроса одним из следующих источников:- Настройки проекта
- Правила разрешения или запрета в личных настройках пользователя
- Управляемая политика предприятия
- Флаги
--allowedToolsили--disallowedTools - Активный режим разрешений
- Классификатор авторежима, вердикт которого то же событие записывает в
classifier_verdict - Разрешение на оставшуюся часть сессии, выданное при более раннем запросе разрешения в той же интерактивной сессии CLI
- Изначальная безопасность инструмента
Значение
sourceне указывает, какой из этих источников сработал. Чтобы узнать, какой из них отклонил вызов, найдите событие безопасности с тем жеtool_use_idи прочитайте его атрибутыcategoryиrule_source. У некоторых отклонённых вызовов нет события безопасности.Claude Code также указывает
"config", когда сам запрос разрешения завершается сбоем. Например, такой запрос завершается сбоем, когда обратный вызовcanUseToolв Agent SDK или инструмент--permission-prompt-toolвозвращает недопустимый результат либо когда входной поток закрывается, пока запрос ожидает ответа. -
"hook": Решение вернул хукPreToolUseилиPermissionRequest. -
"user_permanent": Передаётся, когда пользователь выбрал «Yes, and don't ask again for ...» в запросе разрешения, что сохраняет правило разрешения в его личные настройки. В интерактивном CLI передаётся только для самого этого выбора; последующие вызовы, соответствующие сохранённому правилу, передают"config". В сессиях Agent SDK или неинтерактивных сессиях-p"user_permanent"передаётся как для первоначального выбора, так и для последующих совпадений с правилом. Рассматривается как принятие. -
"user_temporary": Передаётся, когда пользователь выбрал «Yes» в запросе разрешения для однократного подтверждения либо выбрал вариант, предоставляющий доступ на оставшуюся часть сессии, в запросе на редактирование или чтение файла. В интерактивном CLI передаётся только для самого выбора; последующие вызовы, разрешённые этим разрешением в рамках сессии, передают"config". В сессиях Agent SDK или неинтерактивных сессиях-p"user_temporary"передаётся как для выбора, так и для последующих совпадений. Рассматривается как принятие. -
"user_abort": Передаётся, когда пользователь закрыл запрос разрешения, не ответив. В сессиях Agent SDK и неинтерактивных сессиях-pсюда относится и прерывание хода, пока ожидает ответа запрос разрешенияcanUseToolили--permission-prompt-tool. Рассматривается как отклонение. -
"user_reject": Передаётся, когда пользователь выбрал «No» в запросе. В интерактивном CLI передаётся только для самого этого выбора; вызовы, соответствующие правилу запрета в личных настройках пользователя, передают"config". В сессиях Agent SDK или неинтерактивных сессиях-pвызовы, соответствующие правилу запрета в личных настройках, передают"user_reject". Рассматривается как отклонение.
-
-
classifier_verdict: Вердикт классификатора авторежима для вызова или причина, по которой Claude Code отклонил вызов, если вердикт не был получен. Требуется Claude Code v2.1.301 или новее"allow": классификатор одобрил вызов"block": классификатор заблокировал вызов. Проверка классификатором, завершившаяся сбоем на полпути, тоже может закончиться"block", поэтому частичный сбой классификатора может проявляться как увеличение числа блокировок, а не как"unavailable""no_verdict": проверка выполнилась, но не дала пригодного вердикта, поэтому Claude Code отклонил вызов. Отклонение не означает, что классификатор счёл вызов небезопасным"unavailable": запрос к классификатору завершился сбоем, например из-за ограничения частоты запросов, таймаута или ошибки подключения, поэтому Claude Code отклонил вызов. При серверной проверке классификатором это значение также помечает вызов, отклонённый потому, что сервер не вернул вердикт безопасности
Атрибут также появляется в вызовах режима планирования, когда классификатор проверяет команды в режиме планирования. Атрибут отсутствует в следующих случаях:
- Вызов был решён правилом разрешений на разрешение или запрет
- Claude Code одобрил вызов в авторежиме, не обращаясь к классификатору
- Пользователь ответил на запрос, который Claude Code показал после повторных блокировок
- В запуске
-pбез--permission-prompt-toolClaude Code отклонил вызов после повторных блокировок, потому что некому было ответить на запрос. Такое событие сообщаетdecisionкак"reject"иsourceкак"config"
-
classifier_category(приOTEL_LOG_TOOL_DETAILS=1): Имя встроенного правила, которое назвал классификатор, заблокировав вызов, в нижнем регистре с подчёркиваниями, например"data_exfiltration"для правила Data Exfiltration. Требуется Claude Code v2.1.301 или новее. Атрибут присутствует, когда выполняются оба условия:classifier_verdictравно"block"- Классификатор назвал ровно одно правило, и это правило встроенное, а не написанное вами
До v2.1.302 атрибут также отсутствовал для любой блокировки, решение о которой приняла серверная проверка классификатором.
-
permission_mode: Режим разрешений, активный в момент начала проверки разрешения для этого вызова:"default","plan","acceptEdits","bypassPermissions","dontAsk"или"auto". Ручной режим отображается как"default". Вызов субагента сообщает режим разрешений субагента, а не сессии. Требуется Claude Code v2.1.301 или новее -
tool_parameters(приOTEL_LOG_TOOL_DETAILS=1): Строка JSON с параметрами, специфичными для инструмента. Та же структура, что и в Событии результата инструмента, за исключением полей, появляющихся после выполнения, напримерgit_commit_id. Значения могут отличаться отtool_resultдля принятого вызова, если решение о разрешении переписывает входные данные инструмента черезupdatedInput. Используйте этот атрибут, чтобы увидеть, какая команда была отклонена, когдаdecisionравно"reject".- Для инструментов
"sdk_host_builtin_mcp":mcp_server_nameиmcp_tool_nameвключаются, даже когдаOTEL_LOG_TOOL_DETAILSвыключена, поскольку эти имена определяет хост-приложение; без них отклонённый вызов одного из этих встроенных серверов было бы невозможно атрибутировать в потоке по умолчанию. Для MCP-серверов, настроенных пользователем,tool_nameсобытия всегда равно буквальному"mcp_tool", а имена сервера и инструмента появляются только вtool_parametersпри включённом флаге; для содержимого аргументов флаг требуется везде. - Для инструмента Bash: включает
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. Инструмент bash рабочего пространства в настольном приложении также сообщаетtool_nameкакBash, но включает толькоbash_command,full_commandиtimeout - Для инструментов MCP: включает
mcp_server_name,mcp_tool_name - Для инструмента Skill: включает
skill_name - Для инструмента Agent или устаревшего инструмента Task: включает
subagent_type
- Для инструментов
Если вы снизите OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT в OpenTelemetry SDK ниже количества атрибутов события tool_decision, SDK отбросит атрибуты, которые Claude Code установил последними. SDK отбрасывает их раньше любых других атрибутов в следующем порядке, пропуская те, которых в событии нет:
parent_agent_idagent_idrequest_idpermission_modeclassifier_categoryclassifier_verdict
permission_mode, classifier_category и classifier_verdict отбрасываются в этом порядке в Claude Code v2.1.302 или новее. parent_agent_id, agent_id и request_id требуют v2.1.310 или новее.
Событие безопасности
Записывается, когда проверка отклоняет вызов инструмента или требует запроса разрешения, за исключением вызовов без события безопасности. Также записывается, когда сетевой прокси песочницы отклоняет подключение или запрос, и когда хук блокирует результат. Требуется Claude Code v2.1.307 или новее.
Событие экспортируется вместе с остальными событиями и не имеет отдельной настройки. Собственные атрибуты события не содержат текста команд, путей к файлам, имён хостов, а также имён MCP-серверов и инструментов. Запись также содержит стандартные атрибуты, имеющиеся у каждого события, которые могут включать workspace.host_paths и атрибуты репозитория. Чтобы увидеть команду или инструмент MCP, стоящие за событием, задайте OTEL_LOG_TOOL_DETAILS=1 и прочитайте tool_parameters в соответствующем событии tool_decision.
Имя события: claude_code.safety_event
Атрибуты:
- Все стандартные атрибуты
event.name:"safety_event"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийcategory: Проверка или результат, значение категорииdecision:"accept","reject"или"sent_back", если хук заблокировал результат или завершение ходаdecision_source: Кто или что приняло решение: значениеsourceизtool_decisionили"other"reason_code: Причина проверки, например"rule:policySettings","mode:dontAsk","hook:PreToolUse","classifier:auto-mode","bashMiss:too-complex"или"unknown"reason_type: Тип причины проверки, например"rule","subcommandResults","mode","hook","classifier"или"asyncAgent"rule_source: Источник настроек для задействованного правила, например"policySettings","userSettings","projectSettings","localSettings","flagSettings","cliArg"или"session"grant_scope:"once"или"session"для запроса, одобренного без сохранения правила в файл настроекcircuit_breaker: Встроенная проверка безопасности, например"dangerousRemoval","outsideReadsBlocked"или"claudeSettingsFile"classifier_category: ПриOTEL_LOG_TOOL_DETAILS=1— встроенное правило, стоящее за блокировкой в авторежиме, например"data_exfiltration"hook_event:"pre_tool_use"для хукаPreToolUseили"post_tool_use","post_tool_use_failure","stop"либо"subagent_stop"в событиях"hook_review"tool_class:"bash"для Bash и Monitor,"powershell","file"для Read, Edit, Write, NotebookEdit, Glob и Grep,"web"для WebFetch и WebSearch,"mcp"или"other"tool_name: Имя инструмента, например"Bash"для встроенного инструмента, либо"mcp_tool","skill_tool","dynamic_tool"или"other_tool"tool_source:"builtin","mcp"или"sdk_host_builtin_mcp", как вtool_decisionpermission_mode: Режим разрешений вызова на момент проверки:"default","plan","acceptEdits","bypassPermissions","dontAsk"или"auto"tool_use_id: ID вызова, как вtool_decisionиtool_resultsandbox_violation_count: Сколько различных подключений или запросов от команды вызова отклонил сетевой прокси песочницы, от"0"до"20"в виде строки. Отказы учитываются для команды в песочнице, завершившейся на переднем планеsandbox_enabled:"true", если изоляция в песочнице включена для сессии, иначе"false"
Вот собственные атрибуты события, когда правило запрета из управляемых настроек отклоняет команду 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"
}
Категории событий безопасности
| Значение | Проверка или результат | Подробный атрибут |
|---|---|---|
"permission_rule" |
Правило разрешений запрета или запроса вне управляемых настроек | rule_source |
"managed_policy" |
Правило запрета или запроса из управляемых настроек | rule_source |
"permission_mode" |
Режим dontAsk или режим планирования либо запрос без категории в сессии, которая не может показывать запросы, как при --permission-prompts none |
reason_code, reason_type |
"hook" |
Хук, например PreToolUse или PermissionRequest |
hook_event, reason_code |
"auto_mode_block" |
Классификатор авторежима заблокировал вызов | classifier_category |
"auto_mode_no_verdict" |
Нет пригодного вердикта классификатора, например после неудачного запроса | reason_code |
"safety_check" |
Встроенная проверка безопасности, например для Read, Edit или Write за пределами ваших рабочих каталогов | circuit_breaker |
"static_analysis" |
То, как написана команда Bash или Monitor, например слишком сложная для анализа | reason_code |
"sandbox_override" |
Запрос на выполнение команды вне песочницы | reason_code |
"user_rejected" |
Кто-то отклонил или закрыл запрос, у которого не было категории или который требовался только хуку, либо callback canUseTool или инструмент --permission-prompt-tool отклонил такой запрос |
decision_source |
"sandbox_network" |
Вызов выполнился, и сетевой прокси песочницы отклонил подключение или запрос | sandbox_violation_count |
"sandbox_other" |
Как "sandbox_network", но ни одна отклонённая цель не распознаётся как имя хоста или IP-адрес |
sandbox_violation_count |
"hook_review" |
Хук заблокировал результат вызова или завершение хода | hook_event |
"other" |
Отказ, не описываемый ни одним другим значением | reason_code |
Чтобы найти отказы прокси при любой category, фильтруйте по атрибуту sandbox_violation_count, который присутствует и не равен "0".
Вызовы без события безопасности
Чтобы найти вызовы, отклонённые потому, что никто не мог ответить на запрос без категории, ищите события tool_decision со значением "reject" и source, равным "config", для которых нет события безопасности с тем же tool_use_id. Такие отказы происходят в запуске -p без --permission-prompt-tool и без --permission-prompts none.
Для вызовов, подобных перечисленным ниже, проверяйте событие tool_decision, поскольку у них нет события безопасности, кроме событий "sandbox_network", "sandbox_other" или "hook_review", отправляемых после их выполнения:
- Вызов, одобренный в ответ на запрос без категории
- Вызов, который callback
canUseToolили инструмент--permission-prompt-toolодобрил в ответ на запрос, требовавшийся только хукуPreToolUse - Вызов
AskUserQuestionилиExitPlanMode, отклонённый или нет
Запросы без категории
Запрос не имеет категории, если ни одно значение category не называет его проверку, например запрос режима default на редактирование внутри вашего рабочего каталога.
Событие изменения режима разрешений
Записывается в лог при изменении режима разрешений, например при переключении через Shift+Tab, выходе из режима планирования или проверке шлюза авторежима.
Чтобы сгруппировать вызовы инструментов по режиму разрешений, в котором проверялся каждый из них, используйте permission_mode в Событии решения по инструменту.
Имя события: claude_code.permission_mode_changed
Атрибуты:
- Все стандартные атрибуты
event.name:"permission_mode_changed"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийfrom_mode: Предыдущий режим разрешений, например"default","plan","acceptEdits","auto"или"bypassPermissions"to_mode: Новый режим разрешенийtrigger: Причина изменения, например"shift_tab","exit_plan_mode"или"auto_gate_denied". Отсутствует для некоторых изменений, например когда SDK задаёт режим разрешений черезsetPermissionMode()
Событие аутентификации
Записывается в лог по завершении /login или /logout.
Имя события: claude_code.auth
Атрибуты:
- Все стандартные атрибуты
event.name:"auth"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийaction:"login"или"logout"success:"true"или"false"auth_method: Метод аутентификации, например"oauth"error_category: Категория ошибки, если действие завершилось сбоем. Исходное сообщение об ошибке никогда не включаетсяstatus_code: Код состояния HTTP в виде строки, если действие завершилось сбоем с ошибкой HTTP
Событие подключения MCP-сервера
Записывается в лог, когда MCP-сервер подключается, отключается или не может подключиться.
Имя события: claude_code.mcp_server_connection
Атрибуты:
- Все стандартные атрибуты
event.name:"mcp_server_connection"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийstatus:"connected","failed"или"disconnected"transport_type: Транспорт сервера, например"stdio","sse"или"http"server_scope: Область действия, на уровне которой настроен сервер, например"user","project"или"local"duration_ms: Длительность попытки подключения в миллисекундахerror_code: Код ошибки, если подключение не удалосьis_plugin:true, если сервер предоставлен плагином, иначеfalseplugin_id_hash(когдаis_pluginравноtrue): Стабильный хеш имени плагина и маркетплейса для группировки событий по плагинам без раскрытия имени. Claude Code вычисляет его так, как описано в разделе Событие загрузки плагинаplugin.name(когдаis_pluginравноtrue): Имя плагина, предоставляющего сервер. Для сторонних плагинов это буквальная строка"third-party", если не заданоOTEL_LOG_TOOL_DETAILS=1; это защищает имена сторонних плагинов от попадания в логи по умолчанию. Плагины из официальных источников Anthropic всегда идентифицируются по имени. Атрибутыplugin_id_hashиplugin.nameпередаются в ваш собственный бэкенд мониторинга и не отправляются в Anthropicserver_name(приOTEL_LOG_TOOL_DETAILS=1): Настроенное имя сервераerror(приOTEL_LOG_TOOL_DETAILS=1): Полное сообщение об ошибке, если подключение не удалось
Событие внутренней ошибки
Записывается в лог, когда Claude Code перехватывает непредвиденную внутреннюю ошибку. Записываются только имя класса ошибки и код в стиле errno. Сообщение об ошибке и трассировка стека никогда не включаются. Это событие не генерируется при работе с Amazon Bedrock, Agent Platform от Google Cloud или Microsoft Foundry, а также если задана DISABLE_ERROR_REPORTING.
Имя события: claude_code.internal_error
Атрибуты:
- Все стандартные атрибуты
event.name:"internal_error"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийerror_name: Имя класса ошибки, например"TypeError"или"SyntaxError"error_code: Код errno Node.js, например"ENOENT", если он присутствует в ошибке
Событие установки плагина
Записывается в лог, когда завершается установка плагина, как через команду CLI claude plugin install, так и через интерактивный интерфейс /plugin.
Имя события: claude_code.plugin_installed
Атрибуты:
- Все стандартные атрибуты
event.name:"plugin_installed"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmarketplace.is_official:"true", если маркетплейс является официальным маркетплейсом Anthropic, иначе"false"install.trigger:"cli"или"ui"plugin.name: Имя установленного плагина. Для сторонних маркетплейсов включается только приOTEL_LOG_TOOL_DETAILS=1plugin.version: Версия плагина, если она объявлена в записи маркетплейса. Для сторонних маркетплейсов включается только приOTEL_LOG_TOOL_DETAILS=1marketplace.name: Маркетплейс, из которого установлен плагин. Для сторонних маркетплейсов включается только приOTEL_LOG_TOOL_DETAILS=1
Событие загрузки плагина
Записывается в лог один раз для каждого включённого плагина при запуске сессии. Используйте это событие для инвентаризации активных плагинов в вашем парке в дополнение к plugin_installed, которое фиксирует само действие установки.
Имя события: claude_code.plugin_loaded
Атрибуты:
- Все стандартные атрибуты
event.name:"plugin_loaded"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийplugin.name: имя плагина. Для плагинов вне официального маркетплейса и встроенного комплекта значение равно"third-party", если не заданоOTEL_LOG_TOOL_DETAILS=1marketplace.name: маркетплейс, из которого установлен плагин, если он известен. Заменяется на"third-party"при том же условии, что иplugin.nameplugin.version: версия из манифеста плагина. Включается, только если имя не скрыто и манифест объявляет версиюplugin.scope: категория происхождения плагина:"official","community","org","user-local"или"default-bundle"enabled_via: способ включения плагина:"default-enable","org-policy","admin-install","seed-mount"или"user-install". Значение"admin-install"означает, что плагин задан как обязательный или автоматически устанавливаемый для вашей организации в Organization settings > Plugins & skills. До v2.1.246 Claude Code сообщал такие плагины как"user-install"или"seed-mount"plugin_id_hash: детерминированный хеш имени плагина и маркетплейса, отправляемый только в настроенный вами экспортёр. Позволяет подсчитать количество различных сторонних плагинов, загруженных в вашем парке, без записи их имён. Для плагинов, синхронизированных из claude.ai, Claude Code хеширует имя плагина вместе с именем маркетплейса, которое claude.ai сообщает для плагина, или сsyncedв противном случае. До v2.1.246 Claude Code не использовал в хеше имя маркетплейса, сообщаемое claude.aihas_hooks: предоставляет ли плагин хуки — через конфигурацию хуков или как модhas_mcp: предоставляет ли плагин MCP-серверыhost_owned_mcp:true, когда хост SDK управляет подключениями MCP этого плагина и Claude Code пропустил чтение конфигурации MCP-серверов плагина, иначеfalseskill_path_count: количество каталогов скиллов, объявленных плагиномcommand_path_count: количество каталогов команд, объявленных плагиномagent_path_count: количество каталогов агентов, объявленных плагиномsafe_mode:"true", если сессия запущена с--safe-mode, иначе"false". В безопасном режиме это событие сообщает только настроенную инвентаризацию; команды, скиллы, хуки и MCP-серверы плагина не загружаются. Требуется Claude Code v2.1.169 или новее
Событие активации скилла
Записывается в лог при вызове скилла — независимо от того, вызывает ли его Claude через инструмент Skill или вы запускаете его как команду /.
Имя события: claude_code.skill_activated
Атрибуты:
- Все стандартные атрибуты
event.name:"skill_activated"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийskill.name: Имя скилла. Для скиллов, определённых пользователем, и скиллов сторонних плагинов значение равно заполнителю"custom_skill", если не заданоOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Способ вызова скилла ("user-slash","claude-proactive"или"nested-skill")skill.source: Откуда загружен скилл (например,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow", если скилл является скиллом workflow. В остальных случаях отсутствуетplugin.name(приOTEL_LOG_TOOL_DETAILS=1или если плагин из официального маркетплейса): Имя плагина-владельца, если скилл предоставлен плагиномmarketplace.name(приOTEL_LOG_TOOL_DETAILS=1или если плагин из официального маркетплейса): Маркетплейс, из которого установлен плагин-владелец, если скилл предоставлен плагином
Событие упоминания через @
Записывается в лог, когда Claude Code разрешает @-упоминание в промпте. Не каждое упоминание генерирует событие: пути раннего выхода, например отказ в разрешении, слишком большие файлы, вложения-ссылки на PDF и сбои получения списка содержимого каталога, завершаются без записи в лог.
Каждый раз, когда Claude Code читает промпт, он записывает в лог не более 100 событий с mention_type, равным "agent", и 100 — с "mcp_resource". Упоминания сверх любого из этих лимитов по-прежнему разрешаются, но событие не генерируют.
Имя события: claude_code.at_mention
Атрибуты:
- Все стандартные атрибуты
event.name:"at_mention"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmention_type: Тип упоминания ("file","directory","agent","mcp_resource","peer"). Значение"peer"означает, что вы упомянули одну из других ваших сессий Claude Code. Требуется Claude Code v2.1.232 или новееsuccess: Успешно ли разрешено упоминание ("true"или"false")
Событие исчерпания повторных попыток API
Записывается в лог один раз, когда API-запрос завершается сбоем после более чем одной попытки. Генерируется вместе с итоговым событием api_error.
Имя события: claude_code.api_retries_exhausted
Атрибуты:
- Все стандартные атрибуты
event.name:"api_retries_exhausted"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийmodel: Использованная модельerror: Итоговое сообщение об ошибкеstatus_code: Код состояния HTTP в виде числа. Отсутствует для ошибок, не связанных с HTTP.total_attempts: Общее количество выполненных попытокtotal_retry_duration_ms: Общее фактическое время по всем попыткамspeed:"fast"или"normal"
Событие регистрации хука
Записывается в лог один раз для каждого настроенного хука при запуске сессии. Используйте это событие для инвентаризации активных хуков в вашем парке в дополнение к событиям hook_execution_start и hook_execution_complete, генерируемым при каждом выполнении.
Имя события: claude_code.hook_registered
Атрибуты:
- Все стандартные атрибуты
event.name:"hook_registered"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийhook_event: тип события хука, например"PreToolUse"или"PostToolUse"hook_type: тип реализации хука:"command","prompt","mcp_tool","http"или"agent"hook_source: где определён хук:"userSettings","projectSettings","localSettings","flagSettings","policySettings"или"pluginHook"safe_mode:"true", если сессия запущена с--safe-mode, иначе"false". Требуется Claude Code v2.1.169 или новееhook_matcher(приOTEL_LOG_TOOL_DETAILS=1): строка matcher из конфигурации хука, если она заданаplugin.name(когдаhook_sourceравно"pluginHook"): имя плагина, предоставившего хук. Для плагинов вне официального маркетплейса и встроенного комплекта значение равно"third-party", если не заданоOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(когдаhook_sourceравно"pluginHook"): детерминированный хеш имени плагина и маркетплейса, отправляемый только в настроенный вами экспортёр. Позволяет подсчитать количество различных плагинов, предоставивших хуки, без записи их имён. Claude Code вычисляет его так, как описано в разделе Событие загрузки плагина
Событие начала выполнения хуков
Записывается в лог, когда для события хука начинают выполняться один или несколько хуков.
Имя события: claude_code.hook_execution_start
Атрибуты:
- Все стандартные атрибуты
event.name:"hook_execution_start"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийhook_event: Тип события хука, например"PreToolUse"или"PostToolUse"hook_name: Полное имя хука, включая matcher, например"PreToolUse:Write"num_hooks: Количество подходящих команд хуковmanaged_only:"true", если разрешены только хуки управляемой политикиhook_source:"policySettings"или"merged"safe_mode:"true", если сессия запущена с--safe-mode, иначе"false". Требуется Claude Code v2.1.169 или новееhook_definitions: Конфигурация хука в формате JSON. Включается, только если включены и подробная бета-трассировка, иOTEL_LOG_TOOL_DETAILS=1
Событие завершения выполнения хуков
Записывается в лог, когда все хуки для события хука завершили работу.
Имя события: claude_code.hook_execution_complete
Атрибуты:
- Все стандартные атрибуты
event.name:"hook_execution_complete"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийhook_event: Тип события хукаhook_name: Полное имя хука, включая matchernum_hooks: Количество подходящих команд хуковnum_success: Количество успешно завершившихсяnum_blocking: Количество вернувших блокирующее решениеnum_non_blocking_error: Количество завершившихся сбоем без блокировкиnum_cancelled: Количество отменённых до завершенияtotal_duration_ms: Фактическая длительность выполнения всех подходящих хуковstdout_chars: Общее количество символов stdout по всем успешно выполненным подходящим хукам. Требуется Claude Code v2.1.280 или новееadditional_context_chars: Общее количество символовadditionalContext, возвращённых подходящими хуками. Требуется Claude Code v2.1.280 или новееsystem_message_chars: Общее количество символовsystemMessage, возвращённых подходящими хуками. Требуется Claude Code v2.1.280 или новееinitial_user_message_chars: Общее количество символовinitialUserMessage, возвращённых подходящими хуками. Требуется Claude Code v2.1.280 или новееnum_outputs_persisted: Количество выводов хуков сверх лимита в 10 000 символов, которые Claude Code сохранил в файл. Требуется Claude Code v2.1.280 или новееmanaged_only:"true", если разрешены только хуки управляемой политикиhook_source:"policySettings"или"merged"safe_mode:"true", если сессия запущена с--safe-mode, иначе"false". Требуется Claude Code v2.1.169 или новееhook_definitions: Конфигурация хука в формате JSON. Включается, только если включены и подробная бета-трассировка, иOTEL_LOG_TOOL_DETAILS=1
Событие метрик хуков плагинов
Записывается в лог, когда хук плагина из официального маркетплейса генерирует метрики для отдельного вызова. Генерировать их могут только плагины, установленные из официального маркетплейса Anthropic. Плагины из сторонних маркетплейсов и хуки, настроенные пользователем, в это событие данные не передают. Используйте это событие, чтобы отслеживать поведение плагинов, например частоту находок, затраты и длительность, в собственном стеке наблюдаемости.
Имя события: claude_code.hook_plugin_metrics
Атрибуты:
- Все стандартные атрибуты
event.name:"hook_plugin_metrics"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийplugin_id: идентификатор плагина в форме<name>@<marketplace>hook_event: тип события хука, сгенерировавшего метрики- До 20 ключей метрик, генерируемых плагином. Имена соответствуют
^[a-z][a-z0-9_]{0,39}$. Значения — логические или числовые.
Событие сжатия контекста
Записывается в лог по завершении сжатия контекста диалога.
Имя события: claude_code.compaction
Атрибуты:
- Все стандартные атрибуты
event.name:"compaction"event.timestamp: Метка времени ISO 8601event.sequence: счётчик процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийtrigger:"auto"или"manual"success:"true"или"false"duration_ms: Длительность сжатия контекстаpre_tokens: Приблизительное количество токенов до сжатия контекстаpost_tokens: Приблизительное количество токенов после сжатия контекстаerror: Сообщение об ошибке, если сжатие контекста завершилось сбоемprecompute_reuse: задаётся, только еслиtriggerравно"manual", или еслиtriggerравно"auto"для сжатия при простое в интерактивной сессии терминала. Автосжатие может подготовить сводку в фоновом режиме до заполнения контекстного окна, и этот атрибут фиксирует, была ли при сжатии повторно использована подготовленная сводка."hit"означает, что она была использована повторно;"miss_custom_instructions","miss_hook"и"miss_not_ready"указывают причину, по которой вместо этого была вычислена новая сводка
Событие завершения субагента
Записывается, когда субагент завершает работу и возвращает результат в диалог, который его запустил. Используйте его для агрегирования использования инструментов и времени выполнения по типу субагента; для агрегирования токенов или стоимости используйте счётчик токенов и счётчик стоимости с фильтром query_source "subagent", поскольку total_tokens этого события охватывает только последний запрос. Категория "subagent" также учитывает запросы от хуков на основе агентов, которые не генерируют событие субагента.
Имя события: claude_code.subagent_completed
Атрибуты:
- Все стандартные атрибуты
event.name:"subagent_completed"event.timestamp: временная метка в формате ISO 8601event.sequence: счётчик в пределах процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийagent_type: тип субагента. Имена встроенных агентов и агентов из плагинов официального маркетплейса отображаются как есть; имена других агентов заменяются на"custom", если не заданоOTEL_LOG_TOOL_DETAILS=1agent.source: откуда взято определение агента:built-in,pluginили источник настроек, определивший пользовательского агента, напримерuserSettingsилиprojectSettingsis_built_in: является ли субагент встроенным типом агентаis_async: выполнялся ли субагент в фоновом режимеtotal_tokens: объём токенов последнего API-запроса субагента: входные токены, токены создания кэша, чтения кэша и выходные токены этого одного запроса, что примерно соответствует размеру контекста субагента на момент завершения. Это не сумма за весь запускtotal_tool_uses: количество вызовов инструментов, сделанных субагентом за весь запускduration_ms: время выполнения в миллисекундахmodel: модель, на которой было определено выполнять субагентаfinal_model: модель, сформировавшая финальный ответ субагента; отличается отmodelпосле смены модели в ходе выполнения, например при переключении на резервный вариантmodel_swapped: обслуживала ли запросы субагента более чем одна модельplugin_id_hash,plugin.name: присутствуют для агентов, предоставленных плагинами. Имена плагинов официального маркетплейса отображаются как есть; имена других плагинов заменяются на"third-party", если не заданоOTEL_LOG_TOOL_DETAILS=1
Событие опроса обратной связи
Записывается, когда опрос о качестве сессии показан или на него дан ответ. Сведения о том, какие данные собирают опросы и как ими управлять, см. в разделе Опросы о качестве сессии.
Имя события: claude_code.feedback_survey
Атрибуты:
- Все стандартные атрибуты
event.name:"feedback_survey"event.timestamp: временная метка в формате ISO 8601event.sequence: счётчик в пределах процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийevent_type: событие жизненного цикла опроса, например"appeared","responded"или"transcript_prompt_appeared"appearance_id: уникальный идентификатор, связывающий события, сгенерированные для одного экземпляра опросаsurvey_type: какой опрос сгенерировал событие."session"— это промпт с оценкой «How is Claude doing?»response: выбор пользователя в событияхrespondedenabled_via_override:true, когда задана переменнаяCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL. Передаётся как Boolean, а не как строка. Присутствует в событиях опросаsession. Фильтруйте по этому атрибуту, чтобы убедиться, что переопределение применено на всём парке машин
Событие очистки по сроку хранения
Записывается один раз за каждый запуск очистки по сроку хранения, которая удаляет транскрипты сессий и другие данные приложения старше значения настройки cleanupPeriodDays. Claude Code выполняет очистку в фоновом режиме не чаще одного раза за сессию, и запуск, который ничего не удалил, всё равно генерирует событие. Если Claude Code выполнял очистку в любой сессии на той же машине в течение последних 24 часов, он откладывает очистку в этой сессии как минимум на 10 минут, поэтому сессия, завершившаяся раньше, ничего не генерирует. Когда вы запускаете claude -p с --bare, Claude Code не выполняет очистку и ничего не генерирует.
Как и любое событие OTel на этой странице, оно отправляется только в настроенный вами бэкенд телеметрии. Требуется Claude Code v2.1.227 или новее.
Проверьте result, чтобы узнать, была ли выполнена очистка:
"complete": очистка выполнена, и событие содержит её счётчики"skipped": Claude Code не смог надёжно определить срок хранения, поэтому приостановил очистку, и событие не содержит счётчиков. Еслиskip_reasonравен"settings_unknowable"или"settings_invalid_key_set", исправьте ошибку настроек, о которой сообщает/statusна этой машине, чтобы очистку можно было выполнить в следующей сессии
Когда управляемые настройки задают cleanupPeriodDays, управляемое значение фиксирует срок хранения, и очистка выполняется, даже если файл настроек в области действия с более низким приоритетом повреждён или некорректен.
Имя события: claude_code.retention_sweep
Атрибуты:
- Все стандартные атрибуты
event.name:"retention_sweep"event.timestamp: временная метка в формате ISO 8601event.sequence: счётчик в пределах процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийresult:"complete", если очистка выполнена,"skipped", если Claude Code её приостановилperiod_days: срок хранения в днях, с которым началась очистка:cleanupPeriodDaysиз объединённых настроек с учётом изменений, внесённых хукомsettings.read.30, если в результате ключ не задан. В событиях со статусом skipped — значение, которое использовала бы очистка, вычисленное по источникам настроек, которые Claude Code смог прочитатьused_default:"true", еслиperiod_daysиспользовал резервное значение30, иначе"false". В событиях со статусом complete"true"означает, что применено значение по умолчанию в 30 днейskip_reason: почему Claude Code приостановил очистку. Присутствует, только когдаresultравно"skipped":"user_source_disabled": пользовательские настройки исключены, например флагом--setting-sourcesили параметром SDKsettingSources, и ни один включённый источник не предоставляетcleanupPeriodDays"settings_unknowable": файл настроек не удалось прочитать или разобрать, поэтомуcleanupPeriodDaysилиdesktopSessionCleanupPeriodDaysмогут иметь значение, которое Claude Code не видит"settings_invalid_key_set": в настройках есть ошибки валидации, иcleanupPeriodDaysилиdesktopSessionCleanupPeriodDaysзадан явно, поэтому использование значения по умолчанию могло бы удалить или сохранить файлы вопреки этой настройке"remote_settings_unknowable": сессия на вкладке Code в Claude Desktop в стороннем развёртывании запросила серверные управляемые настройки. Она не получила пригодного ответа, поэтомуcleanupPeriodDaysможет иметь значение, которое Claude Code не видит
transcripts_deleted: количество транскриптов сессий — файлов верхнего уровня~/.claude/projects/*/*.jsonl, — удалённых очисткойtranscripts_exempted_desktop: количество транскриптов с истёкшим сроком хранения, которые очистка сохранила согласно правилу Claude Desktop и Cowork. Они не учитываются вfiles_past_cutoff. Требуется Claude Code v2.1.248 или новееsession_files_deleted: количество артефактов, удалённых очисткой файлов сессий: транскрипты плюс сопутствующие файлы каждой сессии, такие как sidecar-файлы, записи и результаты инструментовartifacts_deleted: общее количество элементов, удалённых очисткой во всех охватываемых ею каталогах данных, включая файлы сессий. Некоторые очистки считают целое удалённое дерево каталогов одним элементом, а несколько проходов очистки не учитываются в счётчике, поэтому рассматривайте значение как нижнюю границу, а не как точное количество файловfiles_retained_fresh: файлы, проверенные и оставленные на месте, поскольку срок их хранения ещё не истёк. Их учитывают только пофайловые очистки, поэтому значение является нижней границей; ненулевое значение — нормальное устойчивое состояниеfiles_past_cutoff: файлы старше срока хранения, которые очистке не удалось удалить, например из-за ошибки прав доступа или из-за того, что файл открыт. Счётчик также включает каждую устаревшую папку, найденную очисткой вskills/synced/илиplugins/synced/, независимо от того, переместила ли она папку в корзину. Не считая этих папок, значение больше нуля означает, что файлы пережили настроенный срок хранения; ноль не доказывает обратного, поскольку неудачное удаление целого каталога учитывается вerror_counterror_count: количество ошибок, возникших у очистки при получении списка или удалении файлов
Событие определения управляемых настроек
Записывается с управляемыми настройками, определёнными для сессии: один раз при запуске сессии, повторно, когда в ходе сессии меняются управляемые настройки или состояние вспомогательной программы политики, а также когда Claude Code отказывается запускаться или завершает сессию по одной из причин, перечисленных в атрибуте error.type.
Используйте это событие, чтобы найти машины, работающие с неожиданным управляемым источником, машины, на которых вспомогательная программа политики завершается ошибкой, и причину, по которой машина отказалась запускаться.
Требуется Claude Code v2.1.274 или новее.
По умолчанию событие содержит управляемые источники и состояние вспомогательной программы политики, но не сами настройки. Чтобы добавить отредактированный атрибут managed_settings.settings и дайджест managed_settings.resolved_sha256, задайте OTEL_LOG_MANAGED_SETTINGS=1:
- Задайте её в блоке
envуправляемых настроек, пользовательских настроек или--settings, либо в окружении, в котором вы запускаете Claude Code. Значение в настройках проекта или локальных настройках её не включает, поскольку клонированный репозиторий может их записывать. - Серверные управляемые настройки могут задать её без показа диалогового окна подтверждения безопасности, поскольку переменная лишь добавляет собственную отредактированную политику вашей организации в событие, которое ваша организация уже получает.
В интерактивной сессии в папке, которой вы не доверяете, Claude Code не экспортирует событие отказа.
Имя события: claude_code.managed_settings_resolved
Атрибуты:
-
event.name:"managed_settings_resolved" -
event.timestamp: временная метка в формате ISO 8601 -
event.sequence: счётчик в пределах процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событий -
managed_settings.trigger:"startup"для события запуска сессии,"change", когда управляемые настройки или состояние вспомогательной программы политики изменились позже в ходе сессии, или"refused", когда политика управляемых настроек остановила сессию. Claude Code отправляет событиеchange, только когда какой-либо атрибут отличается от последнего отправленного события, и изменённое значение настройки учитывается, даже когдаOTEL_LOG_MANAGED_SETTINGSотключена -
error.type: почему Claude Code остановил сессию. Присутствует только в событияхrefused:"helper_failed": запуск вспомогательной программы политики завершился ошибкой"policy_invalid": управляемые настройки содержат ошибку, из-за которой Claude Code не может запуститься, или административный источник не удалось загрузить по причине, отличной от отказа в чтении, поэтому Claude Code не может проверить вход в организацию или принудительное применение провайдера"provider_not_allowed": сессия использовала бы API-провайдера или отправляла бы трафик провайдера на хост, которые не разрешены управляемым спискомallowedProviders. Требуется Claude Code v2.1.285 или новее"consent_rejected": пользователь отклонил диалоговое окно подтверждения безопасности для серверных управляемых настроек"force_refresh_failed": не удалось получить настройки, которые требуетforceRemoteSettingsRefresh"gateway_rejected": шлюз Claude apps ответил на загрузку управляемых настроек кодом HTTP 403"version_below_minimum": эта версия Claude Code нижеrequiredMinimumVersionили вышеrequiredMaximumVersion"_OTHER": загрузка управляемых настроек шлюза Claude apps завершилась ошибкой по другой причине
-
managed_settings.sources: каждый управляемый источник, который предоставляет хотя бы один ключ политики, в порядке убывания приоритета, включая источники, ключи которых не вступают в силу приfirst-wins. Возможные значения:"remote","plist"или"hklm"для политики MDM или уровня ОС,"file"для файлов управляемых настроек и дополнительных файлов,"parent", когда настройки предоставляет встраивающий хост, и"hkcu"для значения реестра Windows HKCU, когда Claude Code его читает. Источник, который содержит только управляющие ключи или который Claude Code не смог прочитать, не указывается. Передаётся как массив строк; пуст, если ни один управляемый источник не предоставляет ключ политики -
managed_settings.source_behavior: значениеmanagedSourcesBehavior, прочитанное Claude Code:"first-wins"или"merge"."first-wins", если ни один источник не задаёт этот ключ -
managed_settings.helper.state: состояние вспомогательной программы политики, настроенной выбранным источником MDM или файловым источником:"ok": вывод вспомогательной программы используется в качестве управляемых настроек"bad_path","not_a_file","exit_nonzero","timed_out","oversize","parse_failed","envelope_invalid"или"schema_rejected": последний запуск вспомогательной программы завершился ошибкой. Эти случаи описаны в разделе Ошибки вспомогательной программы"none": вспомогательная программа не настроена, или источник, который её настраивает, не является политикой MDM или файлом управляемых настроек
-
managed_settings.helper.applied:"output", пока собственный вывод вспомогательной программы используется в качестве управляемых настроек,"none", когда это не так -
managed_settings.helper.entry:"policyHelper", когда Claude Code выбралpolicyHelper. Отсутствует, если вспомогательная программа не выбрана -
managed_settings.helper.path: настроенныйpathвспомогательной программы. Присутствует всякий раз, когда Claude Code выбрал вспомогательную программу, независимо от того, задана лиOTEL_LOG_MANAGED_SETTINGS -
managed_settings.resolved_sha256(приOTEL_LOG_MANAGED_SETTINGS=1): SHA-256 определённых управляемых настроек до редактирования, сериализованных как JSON с рекурсивно отсортированными ключами и без пробелов. Машины с одинаковым дайджестом работают с одной и той же политикой. Claude Code отправляет дайджест только при явном включении, поскольку короткую политику можно восстановить, хешируя предполагаемые варианты. Отсутствует, если управляемые настройки не определены, а также в событияхrefused -
managed_settings.settings(приOTEL_LOG_MANAGED_SETTINGS=1): имена и структура определённых управляемых настроек в виде строки JSON с отредактированными значениями. Отсутствует в событияхrefused. Claude Code формирует его на основе своей схемы настроек:- Имя настройки, объявленное в схеме, экспортируется, а ключ, не объявленный в ней, опускается
- Логические значения, числа и строковые значения, которые схема ограничивает фиксированным набором вариантов, например
permissions.defaultMode, экспортируются как есть.sandbox.network.httpProxyPortиsandbox.network.socksProxyPortэкспортируются как"[REDACTED]" - Все остальные строки, например
model,apiKeyHelper, каждое значениеenv, каждый URL и каждая команда, экспортируются как"[REDACTED]" - Имена записей в словарях, например имена переменных
envи идентификаторы плагинов, экспортируются как есть. Настройка, записи которой схема не типизирует, напримерvimInsertModeRemaps, экспортируется как единое"[REDACTED]", аsandbox.ignoreViolationsэкспортируется как список его списков путей без шаблонов команд - Список сохраняет свою длину, а каждая запись редактируется по тем же правилам
- Правило
permissions.allow,permissions.denyилиpermissions.askэкспортируется как имя инструмента с отредактированным содержимым, напримерRead([REDACTED]), если инструмент встроен в эту версию Claude Code или является ссылкойmcp__, напримерmcp__jira__create_issue. Любое другое правило экспортируется как"[REDACTED]" - Хуки подчиняются тем же правилам, поэтому поля с фиксированными вариантами и числовые поля, такие как
typeиtimeout, отображаются, а каждая команда, URL,matcherи условиеifэкспортируются как"[REDACTED]"
Например, управляемые настройки с
apiKeyHelper, двумя переменнымиenvи правилом запрета экспортируются как{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}.Claude Code обрезает значение до 8 КБ в UTF-8, и обрезанное значение не является корректным JSON
-
managed_settings.settings_truncated(когда присутствуетmanaged_settings.settings):true, если Claude Code обрезалmanaged_settings.settingsдо 8 КБ, иначеfalse. Передаётся как Boolean, а не как строка
Интерпретация данных метрик и событий
Экспортируемые метрики и события поддерживают ряд анализов:
Мониторинг использования
| Метрика | Возможность анализа |
|---|---|
claude_code.token.usage |
Разбить по type токена, пользователю, команде, модели, skill.name, plugin.name или agent.name |
claude_code.lines_of_code.count |
Измерить производительность, отслеживая добавления и удаления кода, разбитые по моделям |
claude_code.commit.count & claude_code.pull_request.count |
Понять влияние на рабочие процессы разработки |
Чтобы сравнить активных пользователей в разных интерфейсах, установите OTEL_METRICS_INCLUDE_ENTRYPOINT=true, чтобы добавить app.entrypoint к метрикам и событиям. Затем подсчитайте уникальные значения user.account_uuid для каждой точки входа в событиях claude_code.user_prompt или в claude_code.token.usage, если вы экспортируете только метрики. Например, используйте cli для интерактивных сессий CLI и объедините claude-desktop, claude-desktop-3p и remote_desktop для вкладки Code в Claude Desktop.
user.account_uuid не идентифицирует людей в сессиях каналов Claude Tag и отсутствует в сессиях без аккаунта Claude: см. Атрибуция действий пользователям. Когда один человек запускает много сессий или сессия не получает ни одного промпта, claude_code.session.count увеличивается без добавления активного пользователя.
Мониторинг затрат
Метрика claude_code.cost.usage помогает с:
- Отслеживанием тенденций использования по командам или отдельным лицам
- Выявлением сеансов с высоким использованием для оптимизации
- Атрибуцией расходов конкретным навыкам, плагинам или типам подагентов через атрибуты
skill.name,plugin.nameиagent.name
[!NOTE]
Метрики затрат являются приблизительными. Официальные данные биллинга см. в разделе Управление затратами для вашей организации.
Claude Code учитывает каждый потоковый ответ в метриках затрат и токенов ровно один раз, включая случаи, когда шлюз или прокси-сервер за ANTHROPIC_BASE_URL потоком передает использование прогрессивно через несколько кадров.
Оповещения и сегментация
Распространенные оповещения, которые следует рассмотреть:
- Скачки затрат
- Необычное потребление токенов
- Высокий объем сеансов от конкретных пользователей
Все метрики можно сегментировать по стандартным атрибутам. Атрибут model доступен на claude_code.token.usage, claude_code.cost.usage и claude_code.lines_of_code.count.
Разбивки по моделям для коммитов можно только приблизительно оценить, объединив данные с метриками токенов или затрат по session.id, поскольку один сеанс может охватывать несколько моделей. Отфильтруйте сторону токенов или затрат до строк, где query_source равен "main", чтобы вспомогательные запросы и запросы подагентов не приписывали коммиты сеанса модели, которая их не создавала.
Обнаружение исчерпания повторных попыток
Claude Code повторяет неудачные запросы API внутри и выдает одно событие claude_code.api_error только после того, как сдается, поэтому само событие является терминальным сигналом для этого запроса. Промежуточные повторные попытки не логируются как отдельные события.
Атрибут attempt на событии записывает количество попыток. CLAUDE_CODE_MAX_RETRIES по умолчанию равен 10 и ограничен 15; если установлена CLAUDE_CODE_RETRY_WATCHDOG, значение по умолчанию выше, а ограничение отсутствует.
Когда запрос исчерпывает все повторные попытки при переходной ошибке, attempt не более чем на один больше этого эффективного ограничения: 11 по умолчанию.
Более низкое значение тоже может означать, что повторные попытки исчерпаны: attempt снова начинается с 1 каждый раз, когда Claude Code повторно отправляет запрос после сбоя потоковой передачи.
Чтобы различить сеанс, который восстановился, от того, который застопорился, сгруппируйте события по session.id и проверьте, существует ли более позднее событие api_request после ошибки.
Анализ событий
Данные событий предоставляют подробные сведения о каждом взаимодействии Claude Code:
Паттерны использования инструментов: анализируйте события результатов инструментов для выявления:
- Наиболее часто используемых инструментов
- Показателей успеха инструментов
- Среднего времени выполнения инструментов
- Паттернов ошибок по типам инструментов
Мониторинг производительности: отслеживайте длительность запросов API и время выполнения инструментов для выявления узких мест производительности.
Сопоставление входных токенов с семантическими соглашениями OpenTelemetry GenAI
Claude Code экспортирует количество входных токенов в том виде, в каком оно указано в блоке usage ответа API, поэтому эти значения не включают токены, прочитанные из кэша промптов или записанные в него:
input_tokensв спанеclaude_code.llm_requestи событииapi_request- Тип
"input"метрикиclaude_code.token.usage
Claude Code не устанавливает атрибуты gen_ai.usage.*. Согласно семантическим соглашениям OpenTelemetry GenAI, gen_ai.usage.input_tokens должен включать токены, прочитанные из кэша и записанные в него. Чтобы вычислить эту сумму:
- Из спана или события: сложите
input_tokens,cache_read_tokensиcache_creation_tokens - Из метрики
claude_code.token.usage: сложите её типы"input","cacheRead"и"cacheCreation"
Соглашения также определяют отдельные атрибуты для чтения из кэша и записи в кэш:
cache_read_tokensсоответствуетgen_ai.usage.cache_read.input_tokenscache_creation_tokensсоответствуетgen_ai.usage.cache_write.input_tokens. В более старых версиях соглашений атрибут записи в кэш называетсяgen_ai.usage.cache_creation.input_tokens, поэтому используйте имя, которое ожидает ваш бэкенд.
Аудит событий безопасности
События OpenTelemetry являются источником данных аудита для активности Claude Code. Каждое событие содержит атрибуты идентификации, которые связывают вызовы инструментов, активность MCP и решения о разрешениях с пользователем, который их инициировал. Экспортер логов OTLP может доставлять эти события на любую платформу Security Information and Event Management (SIEM) с приемником OTLP или на OpenTelemetry Collector, который перенаправляет на ваш SIEM.
Атрибуция действий пользователям
Стандартные атрибуты на каждом событии включают идентификацию аутентифицированного пользователя: user.email, user.account_uuid, user.account_id и organization.id при входе с учетной записью Claude или, в облачном сеансе, когда учетные данные самого сеанса их содержат, плюс user.id и область сеанса session.id. user.id является идентификатором, ограниченным установкой, за исключением сеансов, подписанных на Claude apps gateway через /login, где это субъект IdP из выданного шлюзом токена.
В сеансе, который запускает разработчик, вызовы инструментов MCP, команды Bash и редактирование файлов поэтому приписываются этому разработчику. Claude Code не действует под отдельной учетной записью сервиса; идентификация, записанная на каждом событии, это собственная учетная запись Claude разработчика или идентификация IdP разработчика в сеансе Claude apps gateway. В сеансах канала Claude Tag, Claude работает как общая идентификация вашей организации.
Когда Claude Code аутентифицируется с прямым ключом API или против Amazon Bedrock, Google Cloud's Agent Platform или Microsoft Foundry, в сеансе нет учетной записи Claude и только user.id и session.id заполняются. В этих развертываниях прикрепите идентификацию пользователя самостоятельно с помощью OTEL_RESOURCE_ATTRIBUTES, установленного для каждого пользователя через файл управляемых параметров или оболочку запуска. Сеансы Claude apps gateway не требуют ничего из этого: см. Стандартные атрибуты для идентификации, которую несут их экспорты.
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
Аудит активности MCP
Чтобы захватить активность MCP сервера с полной деталью вызова, включите экспортер логов и установите OTEL_LOG_TOOL_DETAILS=1. Каждая операция MCP затем производит структурированные события, которые несут имя сервера, имя инструмента и аргументы вызова вместе со стандартными атрибутами идентификации:
| Событие | Что оно записывает для MCP |
|---|---|
mcp_server_connection |
Подключение сервера, отключение и сбой подключения с server_name, transport_type, server_scope и деталью ошибки |
tool_result |
Каждый вызов инструмента MCP с tool_name и mcp_server_scope, полезной нагрузкой tool_parameters, содержащей mcp_server_name и mcp_tool_name, и полезной нагрузкой tool_input, содержащей аргументы вызова |
tool_decision |
Был ли вызов разрешен или отклонен, исходило ли решение из конфигурации, hook или пользователя, и полезная нагрузка tool_parameters, содержащая mcp_server_name и mcp_tool_name |
Без OTEL_LOG_TOOL_DETAILS эти события опускают идентифицирующую деталь:
tool_result: сохраняетmcp_server_scopeиtool_name, заменённый на буквальное значение"mcp_tool"для пользовательских серверов, опускает содержимое аргументов. Для встроенных серверов Claude Desktop в сессиях, которыми владеет Claude Desktop, он также сохраняет паруmcp_server_name/mcp_tool_nameвнутриtool_parameters— то же исключение для данных, заданных хостом, что и уtool_decisiontool_decision: сохраняетtool_sourceиtool_name, заменённый на буквальное значение"mcp_tool"для пользовательских серверов, опускает содержимое аргументов. Для встроенных серверов Claude Desktop в сессиях, которыми владеет Claude Desktop, он также сохраняет паруmcp_server_name/mcp_tool_nameвнутриtool_parametersmcp_server_connection: опускаетserver_nameи сообщение об ошибке, но сохраняетis_plugin,plugin_id_hashиplugin.name, с именами плагинов, не относящихся к Anthropic, заменёнными на буквальное значение"third-party", поэтому серверы, предоставляемые плагинами, остаются различимыми без подробного логирования
Сопоставление вопросов безопасности с событиями
При построении правил обнаружения найдите сигнал, который вы хотите отслеживать, и запросите ваш бэкенд для соответствующего события и атрибутов:
| Сигнал | Событие | Ключевые атрибуты |
|---|---|---|
| Вызов инструмента разрешён или отклонён, и откуда пришло решение, например из конфигурации, хука или от пользователя | tool_decision |
decision, source, classifier_verdict, permission_mode, tool_name; tool_parameters, если задать OTEL_LOG_TOOL_DETAILS=1 |
| Какая проверка отклонила вызов инструмента или потребовала для него запроса разрешения | safety_event, где category называет проверку, например "managed_policy", "permission_rule", "hook" или "auto_mode_block". decision имеет значение "reject" для вызова, который не был выполнен. У некоторых вызовов нет события безопасности |
category, decision, reason_code, rule_source, tool_name, tool_use_id |
| Классификатор авторежима разрешил или заблокировал вызов инструмента, либо Claude Code отклонил вызов без вердикта классификатора | tool_decision, где присутствует classifier_verdict. При отклонении без вердикта classifier_verdict имеет значение "no_verdict" или "unavailable" |
classifier_verdict, permission_mode, tool_name; classifier_category, если задать OTEL_LOG_TOOL_DETAILS=1 |
| Эскалация режима разрешений | permission_mode_changed |
from_mode, to_mode, trigger |
| В каком режиме разрешений проверялся каждый вызов инструмента, включая вызовы, которые делают субагенты | tool_decision |
permission_mode, session.id |
| Hook политики заблокировал действие | hook_execution_complete |
hook_event, num_blocking |
| Какой вызов инструмента отклонил хук и какой результат или конец хода хук заблокировал | safety_event, где category равно "hook", а decision равно "reject" для отклонённого вызова, или category равно "hook_review" для заблокированного результата или конца хода |
category, decision, hook_event; tool_use_id для вызова инструмента |
| Сетевой прокси песочницы отклонил подключение или запрос от команды Bash или PowerShell | safety_event, где sandbox_violation_count присутствует и не равно "0" |
sandbox_violation_count, category, sandbox_enabled, tool_use_id |
| Вход, выход и сбой аутентификации | auth |
action, success, error_category |
| Подключение MCP сервера или сбой | mcp_server_connection |
status, server_name, is_plugin, error_code |
| Установленный плагин и его источник | plugin_installed |
plugin.name, marketplace.name, marketplace.is_official |
| Запущенные команды и затронутые файлы | tool_result (выполнено) или tool_decision (отклонено) с OTEL_LOG_TOOL_DETAILS=1 |
tool_parameters; tool_input (только tool_result) |
| Какие источники управляемых параметров запускает машина, здорова ли её помощник политики и почему машина отказалась запускаться | managed_settings_resolved |
managed_settings.trigger, managed_settings.sources, managed_settings.source_behavior, managed_settings.helper.state, error.type; managed_settings.settings и managed_settings.resolved_sha256 с OTEL_LOG_MANAGED_SETTINGS=1 |
Claude Code выдает только поток исходных событий. Обнаружение аномалий, базирование, корреляция между сеансами и оповещение являются ответственностью вашего SIEM или бэкенда наблюдаемости.
Сопоставление путей утечки данных с управляемыми настройками и событиями
В таблице пути, по которым содержимое сессии может покинуть машину, а также локальное хранение сопоставлены с ключами управляемых настроек, которые их ограничивают, и событиями, которые их записывают. О том, что сам Claude Code отправляет в Anthropic, например об отчётах /feedback, см. Использование данных. Названия ведут на соответствующие записи справочника, где указаны значения и значения по умолчанию.
| Путь | Управляемые настройки | События |
|---|---|---|
| Команды Bash и PowerShell | sandbox.enabled, sandbox.failIfUnavailable, sandbox.allowUnsandboxedCommands, sandbox.network.allowManagedDomainsOnly, sandbox.network.allowedDomains |
tool_decision, tool_result |
| MCP-серверы | allowedMcpServers, allowManagedMcpServersOnly, deniedMcpServers, managed-mcp.json |
mcp_server_connection, tool_decision, tool_result |
| Хуки | allowManagedHooksOnly, allowedHttpHookUrls |
hook_registered, hook_execution_start, hook_execution_complete |
| Плагины | strictKnownMarketplaces, disableSideloadFlags, syncClaudeAiPlugins, syncClaudeAiSkills |
plugin_installed, plugin_loaded |
| WebFetch | permissions.deny, allowManagedPermissionRulesOnly |
tool_decision, tool_result |
| Инструменты, загружающие данные на claude.ai, например Artifact | permissions.deny, enableArtifact |
tool_decision, tool_result |
| Remote Control | disableRemoteControl |
Нет отдельного события |
| Локальное хранение транскриптов | cleanupPeriodDays |
retention_sweep |
Для записей allowedHttpHookUrls, managed-mcp.json и событий хуков нужно больше, чем показывает таблица:
allowedHttpHookUrls: записи объединяются между файлами настроек, поэтому разработчик может дополнить пустой управляемый список. Какие хуки выполняются, определяетallowManagedHooksOnlymanaged-mcp.json: чтобы отключить MCP, см. Полное отключение MCP. Чтобы убедиться, что Claude Code читает файл, см. Проверка конфигурации- События хуков: Claude Code записывает в лог
hook_execution_startиhook_execution_completeодин раз на событие хука, охватывая все подходящие хуки. Сам по себеOTEL_LOG_TOOL_DETAILS=1не записывает URL HTTP-хука. Конфигурация хука появляется только вhook_definitions, для чего также нужна подробная бета-трассировка
OTEL_LOG_TOOL_DETAILS=1 добавляет в эти события строки команд, имена серверов и инструментов, а также входные данные инструментов. Эти сведения могут содержать такое же конфиденциальное содержимое, как и сама сессия, поэтому включайте этот параметр, только если вашему коллектору разрешено хранить такое содержимое.
Проверка очистки по сроку хранения
Чтобы задать всем машинам одинаковый срок хранения, установите cleanupPeriodDays в управляемых настройках. Чтобы проверить, что машины выполняют очистку с этим значением, собирайте событие retention_sweep. period_days и счётчики являются строками, поэтому приводите их к числам перед сравнением.
| Что сообщает машина | Что это означает |
|---|---|
result равно "skipped" |
Claude Code приостановил очистку. Причину указывает skip_reason |
used_default равно "true" или period_days отличается от вашего управляемого значения |
Машина не применяет ваш управляемый cleanupPeriodDays |
error_count больше нуля |
Во время перечисления или удаления файлов очистка столкнулась с ошибками, поэтому данные старше срока хранения могут остаться |
files_past_cutoff больше нуля |
Очистке не удалось удалить файлы старше срока хранения, или она обнаружила устаревшие синхронизированные папки скиллов и плагинов. Оценивайте это значение вместе с error_count |
| Нет события | Само по себе это не сбой |
Машина, работающая как задумано, может не отправлять событие, например, по следующим причинам:
- Никто не запускает Claude Code: очистка не выполняется, и машина хранит свои данные до следующего запуска
- Сессия остаётся открытой: Claude Code выполняет очистку не более одного раза за сессию
- Сессия завершается рано: очистка, не завершившаяся к моменту выхода из сессии, ничего не отправляет, как и очистка, остановившаяся из-за непредвиденной ошибки
Очистка охватывает не все пути. В разделе Хранятся, пока вы их не удалите перечислено, что остаётся, а в разделе Очистка локальных данных показано, как это удалить.
Отправка событий в SIEM
Укажите OTEL_EXPORTER_OTLP_LOGS_ENDPOINT на приемник OTLP вашего SIEM или на OpenTelemetry Collector, который перенаправляет на собственный API приема вашего SIEM. Следующий пример управляемых параметров экспортирует только события с полной деталью инструмента, включенной для аудита MCP и 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"
}
}
Чтобы подтвердить, что события прибыли, отправьте подсказку в сеансе, работающем под этой конфигурацией, и проверьте ваш SIEM на событие claude_code.user_prompt. Если ничего не прибыло, запустите Claude Code с claude --debug-file <path> и проверьте этот журнал на ошибки экспорта [3P telemetry].
Рассмотрения бэкенда
Выбор вашего бэкенда метрик, логов и трассировок определяет типы анализов, которые вы можете выполнять:
Бэкенды для метрик
- Базы данных временных рядов: Расчеты скорости, агрегированные метрики
- Колончатые хранилища: Сложные запросы, анализ уникальных пользователей
- Полнофункциональные платформы наблюдаемости: Продвинутые запросы, визуализация, оповещения
Бэкенды для событий и логов
- Системы агрегации логов: Полнотекстовый поиск, анализ логов
- Колончатые хранилища: Анализ структурированных событий
- Полнофункциональные платформы наблюдаемости: Корреляция между метриками и событиями
Бэкенды для трассировок
Выберите бэкенд, поддерживающий хранилище распределенных трассировок и корреляцию span:
- Системы распределенной трассировки: Визуализация span, водопады запросов, анализ задержки
- Полнофункциональные платформы наблюдаемости: Поиск трассировок и корреляция с метриками и логами
Для организаций, требующих метрик Daily/Weekly/Monthly Active User (DAU/WAU/MAU), рассмотрите бэкенды, поддерживающие эффективные запросы уникальных значений.
Информация о сервисе
Все метрики и события экспортируются со следующими атрибутами ресурса:
service.name:claude-codeдля сессий терминала,claude-code-desktopдля локальных сессий, запущенных с вкладки Code в приложении Claude Desktopservice.version: Текущая версия Claude Code или версия приложения Desktop для локальных сессий вкладки Codeos.type: Тип операционной системы (например,linux,darwin,windows)os.version: Строка версии операционной системыhost.arch: Архитектура хоста (например,amd64,arm64)wsl.version: Номер версии WSL (присутствует только при запуске на Windows Subsystem for Linux)- Имя счетчика:
com.anthropic.claude_code
Если ваши конвейеры сборщика или панели мониторинга фильтруют по service.name = claude-code, добавьте claude-code-desktop в фильтр, чтобы также захватить телеметрию из локальных сессий вкладки Code.
Ресурсы для измерения ROI
Для полного руководства по измерению возврата инвестиций для Claude Code, включая настройку телеметрии, анализ затрат, метрики производительности и автоматизированные отчеты, см. Руководство по измерению ROI Claude Code. Этот репозиторий предоставляет готовые конфигурации Docker Compose, настройки Prometheus и OpenTelemetry, а также шаблоны для создания отчетов о производительности, интегрированные с такими инструментами, как Linear.
Безопасность и конфиденциальность
- Экспорт OpenTelemetry на ваш бэкенд является добровольным и требует явной конфигурации. Информацию об отдельной операционной телеметрии Anthropic и о том, как её отключить, см. в разделе Data usage
- По умолчанию содержимое файлов в исходном виде и фрагменты кода не включаются в метрики или события. Если вы установите переменную, например
OTEL_LOG_TOOL_DETAILSилиOTEL_LOG_RAW_API_BODIES, события могут их содержать. Span трассировок — это отдельный путь данных: см. пунктOTEL_LOG_TOOL_CONTENTниже - При аутентификации через OAuth
user.emailвключается в атрибуты телеметрии, отправляется только на endpoint OTel, который вы настраиваете, никогда на Anthropic. Если это вызывает беспокойство для вашей организации, работайте с вашим бэкендом телеметрии для фильтрации или скрытия этого поля - Содержимое пользовательского промпта не собирается по умолчанию. Записывается только длина промпта. Чтобы включить содержимое промпта, установите
OTEL_LOG_USER_PROMPTS=1. Когда включено:-
События
user_promptсодержат текст промпта в двух атрибутах:promptиprompt_text. Если вы удаляете или маскируете текст промпта события по имени атрибута в вашем коллекторе, укажите в правиле оба атрибутаЭтот процессор
attributesOpenTelemetry Collector удаляет оба атрибута в конвейерах, в которых он указан:processors: attributes/drop-prompt-text: actions: - key: prompt action: delete - key: prompt_text action: delete -
При включённой трассировке span
claude_code.interactionсодержит текст промпта в своём атрибутеuser_prompt -
При детальной бета-трассировке span также содержат новые пользовательские сообщения, результаты инструментов и системные напоминания, отправляемые с каждым запросом, текст системного промпта и выходные данные модели. В разделе Атрибуты содержимого при детальной бета-трассировке перечислен каждый атрибут. Событие
claude_code.system_promptсодержит полный системный промпт
-
- Текст ответа помощника не собирается по умолчанию. Записывается только длина ответа. Чтобы включить текст ответа, установите
OTEL_LOG_ASSISTANT_RESPONSES=1. Как и все данные OpenTelemetry из Claude Code, текст ответа отправляется только на эндпоинт OTel, который вы настраиваете, никогда на Anthropic. Когда эта переменная не установлена,OTEL_LOG_USER_PROMPTSиспользуется как резервный вариант, поэтому установитеOTEL_LOG_ASSISTANT_RESPONSES=0, если вы хотите получать в событиях содержимое промпта без содержимого ответа. При детальной бета-трассировке spanclaude_code.llm_requestвсё равно содержит выходные данные модели вresponse.model_output, который управляетсяOTEL_LOG_USER_PROMPTS, а не этой переменной - Аргументы входных данных инструмента и параметры не логируются по умолчанию. Чтобы включить их, установите
OTEL_LOG_TOOL_DETAILS=1. Для встроенных серверов Claude Desktop в сессиях, которыми владеет Claude Desktop,tool_decisionиtool_resultсодержат паруmcp_server_name/mcp_tool_name, имена, созданные хостом, а не содержимое аргументов, даже с отключённым флагом. Эти данные отправляются только на эндпоинт OTEL, который вы настраиваете, никогда на Anthropic. Аргументы могут по-прежнему содержать конфиденциальные значения, поэтому настройте ваш бэкенд телеметрии для фильтрации или скрытия этих атрибутов по мере необходимости. Когда включено:- События
tool_resultиtool_decisionвключают атрибутtool_parametersс командами Bash, именами MCP-сервера и инструмента и именами скиллов. Поля, такие какfull_command, выдаются неусеченными - События
tool_resultдополнительно включают атрибутtool_inputс путями к файлам, URL-адресами, шаблонами поиска и другими аргументами. Отдельные значения более 512 символов усекаются, и общее количество ограничено примерно 4 K символами - События
user_promptвключают буквальноеcommand_nameдля пользовательских команд, команд плагинов и команд MCP - Счётчики стоимости и токенов и события
api_request,api_errorиapi_refusalсодержат реальные имена агента, скилла, плагина, MCP-сервера и инструмента в их атрибутах атрибуции - Span
claude_code.toolсодержит атрибуты, полученные из входных данных, такие какfile_path. При детальной бета-трассировке он также содержит атрибутtool_input
- События
- Содержимое инструмента не логируется в span трассировок по умолчанию. Чтобы включить его, установите
OTEL_LOG_TOOL_CONTENT=1. Spanclaude_code.toolзатем содержит событие spantool.outputс содержимым файлов в исходном виде, выходными данными команды Bash и тем, что возвращают MCP инструменты, WebFetch и WebSearch, усеченными на лимит содержимого (60 КБ по умолчанию) на атрибут. Результаты от MCP инструментов, WebFetch и WebSearch требуют Claude Code v2.1.283 или позже. Содержимое инструмента также достигает span черезnew_context, чей gate отличается для каждого span. Настройте ваш бэкенд телеметрии для фильтрации или скрытия этих атрибутов по мере необходимости - Тела запроса и ответа Anthropic Messages API в исходном виде не логируются по умолчанию. Чтобы включить их, установите
OTEL_LOG_RAW_API_BODIESв вашей оболочке, пользовательских параметрах или управляемых параметрах. Это игнорируется в project and local settings. Тела содержат полную историю разговора, включая системную подсказку, каждый предыдущий ход пользователя и помощника, и результаты инструментов, поэтому включение этого подразумевает согласие со всем, что раскрыли бы другие флаги содержимогоOTEL_LOG_*. Claude Code всегда скрывает содержимое расширенного мышления Claude из этих тел, независимо от других параметров. Значение, которое вы установите, определяет, как Claude Code доставляет тела:-
С
=1, Claude Code выдает события логовapi_request_bodyиapi_response_bodyдля каждого вызова API. Атрибутbodyсобытий содержит JSON-сериализованную нагрузку, усеченную на лимит содержимого (60 КБ по умолчанию) -
С
=file:<dir>, Claude Code записывает неусеченные тела в файлы.request.jsonи.response.jsonв этом каталоге, и события содержат путьbody_refвместо встроенного тела. Отправьте каталог с коллектором логов или sidecar, а не через поток телеметрии.Для каждого успешного ответа Claude Code также добавляет одну строку в файл
index.jsonlв этом каталоге, связывая файл ответа с файлом запроса, который его создал, и с сообщением транскрипта, которым он стал. Каждая строка не содержит содержимого сообщения, и раздел API response body event перечисляет его поля. Файл индекса требует Claude Code v2.1.274 или позже
-
Мониторинг Claude Code на Amazon Bedrock
Для подробного руководства по мониторингу использования Claude Code для Amazon Bedrock см. Реализация мониторинга Claude Code (Amazon Bedrock).