Сведения о Claude API или Managed Agents см. в разделе OpenTelemetry для Claude API.
Быстрый старт
Настройте OpenTelemetry с помощью переменных окружения: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 для всех пользователей через файл управляемых параметров. Дополнительную информацию о том, как применяются параметры, см. в разделе приоритет параметров. Пример конфигурации управляемых параметров:.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отключен
BETA_TRACING_ENDPOINTперенаправлял логи и трассировки, которые экспортирует детальная бета-версия трассировки, даже когда управляемые параметры закрепили сборщик.
Детали конфигурации
Общие переменные конфигурации
Эти переменные настраивают экспортеры, конечные точки и поведение экспорта для всех развертываний. Если вы установите переменную конечной точки или протокола для конкретного сигнала, такую какOTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code использует её вместо универсальной переменной для этого сигнала. Если вы установите переменную заголовков для конкретного сигнала, такую как OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code объединяет её с универсальной переменной OTEL_EXPORTER_OTLP_HEADERS для этого сигнала.
На машинах с управляемыми параметрами см. Как управляемые параметры блокируют назначение OTLP, чтобы узнать, что Claude Code удаляет.
Для протоколов
http/protobuf и http/json Claude Code отправляет каждый запрос экспорта с заголовком Content-Length.
Аутентификация mTLS
Способ настройки сертификатов клиента для экспортера OTLP зависит от протокола OTLP, используемого для этого сигнала, установленного черезOTEL_EXPORTER_OTLP_PROTOCOL или переопределение для конкретного сигнала. Одна и та же конфигурация применяется к метрикам, логам и трассировкам.
Для
grpc OpenTelemetry SDK читает стандартные переменные OTLP напрямую, поэтому существующие конфигурации, которые устанавливают переменные метрик для конкретного сигнала, продолжают работать. На машинах с управляемыми параметрами Claude Code может удалить установленные разработчиком учётные данные и конечные точки для конкретного сигнала при запуске.
Контроль кардинальности метрик
Следующие переменные окружения контролируют, какие атрибуты включены в метрики для управления кардинальностью:
Более низкая кардинальность обычно означает лучшую производительность и более низкие затраты на хранилище, но менее детальные данные для анализа.
Traces (beta)
Распределённая трассировка экспортирует spans, которые связывают каждую пользовательскую подсказку с запросами API и выполнениями инструментов, которые она запускает, поэтому вы можете просмотреть полный запрос как одну трассировку в вашем бэкенде трассировки. Трассировка отключена по умолчанию. Чтобы включить её, установите обаCLAUDE_CODE_ENABLE_TELEMETRY=1 и CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, затем установите OTEL_TRACES_EXPORTER, чтобы выбрать, куда отправляются spans. Трассировки повторно используют общую конфигурацию OTLP для конечной точки, протокола, заголовков и mTLS. На машинах с управляемыми параметрами Claude Code может удалить установленные разработчиком учётные данные и конечные точки для конкретного сигнала при запуске.
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
Каждая пользовательская подск��зка запускает корневой spanclaude_code.interaction. Вызовы API, вызовы инструментов и выполнения hooks записываются как его дочерние элементы. Spans инструментов имеют два собственных дочерних span: один для времени, потраченного на ожидание решения разрешения, и один для самого выполнения. Когда инструмент Agent или устаревший инструмент Task порождает подагента, spans API и инструментов подагента вложены под span claude_code.tool родителя.
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
claude_code.llm_request
Каждая повторная попытка также записывается как событие span
gen_ai.request.attempt с атрибутами attempt и client_request_id.
claude_code.tool
Событие 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
Контролируется называет переменную, которая нужна атрибуту в дополнение к OTEL_LOG_TOOL_CONTENT=1, и для Edit и Write эта переменная контролирует само событие, а не атрибут.
Атрибут
tool_name родительского span говорит вам, из какого инструмента пришло событие. Атрибут, усечённый на лимите содержимого, сопровождается <attribute>_truncated и <attribute>_original_length.
claude_code.tool.blocked_on_user
Решение
cancelled с source user_abort означает, что сообщение, требующее немедленной доставки, прервало ход, пока запрос разрешения или проверка авторежима ещё ожидали завершения. Например, во время проверки авторежима у пользователя было сообщение в очереди, и он отправил его немедленно.
claude_code.tool.execution
claude_code.hook
Этот span появляется только когда активна детальная бета-трассировка, которая требует ENABLE_BETA_TRACING_DETAILED=1 и BETA_TRACING_ENDPOINT, пару, которая также изменяет, куда идут ваши логи и трассировки. Установите пару в вашей оболочке, пользовательских параметрах или управляемых параметрах; обе переменные игнорируются в параметрах проекта и локальных параметрах. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA один не производит его.
В интерактивных сеансах CLI детальная бета-трассировка также требует, чтобы ваша организация была в списке разрешений для функции. Сеансы Agent SDK и неинтерактивные сеансы -p не требуют списка разрешений.
Атрибуты с содержимым при детальной бета-трассировке
Дополнительные атрибуты с содержимым, такие как
new_context, system_reminders, system_prompt_preview, user_system_prompt, tool_input и response.model_output, выдаются, только когда активна детальная бета-трассировка. Они не являются частью стабильной схемы span.Контролируется указана переменная, которая нужна атрибуту в дополнение к детальной бета-трассировке. Значения длиннее лимита содержимого (60 КБ по умолчанию) усекаются.
При детальной бета-трассировке с
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, заменив путь на ваш собственный скрипт:
Требования к скрипту
Скрипт должен выводить действительный JSON с парами ключ-значение строк, представляющими заголовки HTTP:- Уведомление предупреждения в интерактивных сеансах,
otelHeadersHelper failed; telemetry is not being exported, показано один раз за сеанс, когда помощник впервые не удаётся - Вывод
/status - Журнал отладки, при запуске с
--debugили после запуска/debugв сеансе - stderr, в неинтерактивных сеансах, запущенных с
-p
Поведение обновления
Скрипт помощника заголовков запускается при запуске и периодически после этого для поддержки обновления токена. По умолчанию скрипт запускается каждые 29 минут. Настройте интервал с переменной окруженияCLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Поддержка организаций с несколькими командами
Организации с несколькими командами или отделами могут добавлять пользовательские атрибуты для различия между разными группами, используя переменную окруженияOTEL_RESOURCE_ATTRIBUTES:
- Фильтровать метрики по команде или отделу
- Отслеживать затраты по центру затрат
- Создавать панели мониторинга для конкретных команд
- Настраивать оповещения для конкретных команд
vcs.* repository attributes, пользовательские ключи никогда не переопределяют стандартные атрибуты, такие как user.id или session.id: когда ключ конфликтует, Claude Code сохраняет встроенное значение.
Каждый пользовательский ключ становится меткой на каждой серии метрик, поэтому значения высокой кардинальности увеличивают затраты на хранилище в вашем бэкенде метрик. Чтобы отправлять пользовательские атрибуты только в блоке ресурсов и опускать их из меток точек данных, установит�� OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. См. Контроль кардинальности метрик.
Привязка телеметрии к сессиям Desktop SSH
Чтобы видеть, на какой удалённой машине выполнялась сессия Desktop SSH, укажите имя каждой машины в пользовательском атрибуте. Метрики и события не содержат имени машины, на которой выполнялась сессия. На каждой удалённой машине добавьтеOTEL_RESOURCE_ATTRIBUTES в блок env, который включает телеметрию, в файле управляемых настроек, который читает сессия. Запишите имя явно в файле каждой машины. Claude Code не раскрывает значение, поэтому host.name=$(hostname) поступает именно в виде этих символов.
В следующем примере машине присваивается имя 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 секунда:
http://localhost:9464/metrics:
/metrics вместо этого.
Для отправки метрик нескольким экспортерам:
Телеметрия из облачных сеансов и 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, и переменные, которые он экспортирует, заканчиваются с ним.
user.* для определения того, кто отметил Claude.
Доступные метрики и события
Стандартные атрибуты
Все метрики и события содержат следующие стандартные атрибуты:
В сессиях, в которых выполнен вход в шлюз приложений Claude через
/login, CLI помечает экспортируемые данные аутентифицированной идентичностью: user.id — это субъект IdP, user.email — адрес электронной почты, с которым выполнен вход, а user.groups содержит членство в группах IdP в виде строки с разделителями-запятыми. Каждый экспорт также содержит identity.source: gateway-oidc. Идентичность шлюза применяется последней, поэтому ключи user.* и identity.*, заданные через OTEL_RESOURCE_ATTRIBUTES, в таких сессиях игнорируются.
События, которые Claude Code записывает в лог до входа разработчика, не содержат идентичности шлюза. Когда Claude Code открывает сессию без входа в шлюз, например после того как шлюз завершил вход, события запуска, записанные до входа, содержат анонимный
user.id и не содержат identity.source. К ним относятся managed_settings_resolved, plugin_loaded и mcp_server_connection.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, оба дают одинаковые значения:
Значения приводятся к нижнему регистру, а учётные данные, строки запроса и фрагменты из 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, прикреплённая к каждой метрике; у метрик-счётчиков её нет.
Когда
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. Так вы получите событие 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"- Классификатор назвал ровно одно правило, и это правило встроенное, а не написанное вами
-
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"
Чтобы найти отказы прокси при любой
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", если он присутствует в ошибке
Событие установки плагина
Записывается в лог, когда завершается установка плагина, как через команду CLIclaude 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 или новее.
Когда Claude Code не может надёжно определить срок хранения, он приостанавливает очистку и генерирует событие с result, равным "skipped", и атрибутом skip_reason. Когда управляемые настройки задают cleanupPeriodDays, управляемое значение фиксирует срок хранения, и очистка выполняется, даже если файл настроек в области действия с более низким приоритетом повреждён или некорректен. Когда сам managed-settings.json не удаётся прочитать, Claude Code всё равно приостанавливает очистку, если только управляемый уровень не предоставляет cleanupPeriodDays из другого места, например из серверных управляемых настроек или из дополнительного файла managed-settings.d/ рядом с повреждённым файлом. Атрибуты-счётчики удалений присутствуют, только когда result равен "complete".
Имя события: claude_code.retention_sweep
Атрибуты:
- Все стандартные атрибуты
event.name:"retention_sweep"event.timestamp: временная метка в формате ISO 8601event.sequence: счётчик в пределах процесса для упорядочивания событий, описанный в разделе Атрибуты корреляции событийresult:"complete", если очистка выполнена,"skipped", если Claude Code её приостановилperiod_days: значениеcleanupPeriodDaysиз объединённых настроек в днях или30, если ни один источник его не задаёт. В пропущенных событиях — значение, которое использовала бы очистка, вычисленное из источников настроек, которые Claude Code смог прочитатьused_default:"true", если ни один доступный для чтения источник настроек не задаётcleanupPeriodDays, иначе"false". В завершённых событиях"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.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.cost.usage помогает с:
- Отслеживанием тенденций использования по командам или отдельным лицам
- Выявлением сеансов с высоким использованием для оптимизации
- Атрибуцией расходов конкретным навыкам, плагинам или типам подагентов через атрибуты
skill.name,plugin.nameиagent.name
Метрики затрат являются приблизительными. Для официальных данных о выставлении счетов обратитесь к вашему поставщику API (Claude Console, Amazon Bedrock или Google Cloud’s Agent Platform).
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: Паттерны использования инструментов: анализируйте события результатов инструментов для выявления:- Наиболее часто используемых инструментов
- Показателей успеха инструментов
- Среднего времени выполнения инструментов
- Паттернов ошибок по типам инструментов
Сопоставление входных токенов с семантическими соглашениями OpenTelemetry GenAI
Claude Code экспортирует количество входных токенов в том виде, в каком оно указано в блоке usage ответа API, поэтому эти значения не включают токены, прочитанные из кэша промптов или записанные в него:input_tokensв спанеclaude_code.llm_requestи событииapi_request- Тип
"input"метрикиclaude_code.token.usage
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 не требуют ничего из этого: см. Стандартные атрибуты для идентификации, которую несут их экспорты.
Аудит активности MCP
Чтобы захватить активность MCP сервера с полной деталью вызова, включите экспортер логов и установитеOTEL_LOG_TOOL_DETAILS=1. Каждая операция MCP затем производит структурированные события, которые несут имя сервера, имя инструмента и аргументы вызова вместе со стандартными атрибутами идентификации:
Без
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", поэтому серверы, предоставляемые плагинами, остаются различимыми без подробного логирования
Сопоставление вопросов безопасности с событиями
При построении правил обнаружения найдите сигнал, который вы хотите отслеживать, и запросите ваш бэкенд для соответствующего события и атрибутов:
Claude Code выдает только поток исходных событий. Обнаружение аномалий, базирование, корреляция между сеансами и оповещение являются ответственностью вашего SIEM или бэкенда наблюдаемости.
Сопоставление путей утечки данных с управляемыми настройками и событиями
В таблице пути, по которым содержимое сессии может покинуть машину, а также локальное хранение сопоставлены с ключами управляемых настроек, которые их ограничивают, и событиями, которые их записывают. О том, что сам Claude Code отправляет в Anthropic, например об отчётах/feedback, см. Использование данных. Названия ведут на соответствующие записи справочника, где указаны значения и значения по умолчанию.
Для записей
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 и счётчики являются строками, поэтому приводите их к числам перед сравнением.
Машина, работающая как задумано, может не отправлять событие, например, по следующим причинам:
- Никто не запускает Claude Code: очистка не выполняется, и машина хранит свои данные до следующего запуска
- Сессия остаётся открытой: Claude Code выполняет очистку не более одного раза за сессию
- Сессия завершается рано: очистка, не завершившаяся к моменту выхода из сессии, ничего не отправляет, как и очистка, остановившаяся из-за непредвиденной ошибки
Отправка событий в SIEM
УкажитеOTEL_EXPORTER_OTLP_LOGS_ENDPOINT на приемник OTLP вашего SIEM или на OpenTelemetry Collector, который перенаправляет на собственный API приема вашего SIEM. Следующий пример управляемых параметров экспортирует только события с полной деталью инструмента, включенной для аудита MCP и Bash:
claude_code.user_prompt. Если ничего не прибыло, запустите Claude Code с claude --debug-file <path> и проверьте этот журнал на ошибки экспорта [3P telemetry].
Рассмотрения бэкенда
Выбор вашего бэкенда метрик, логов и трассировок определяет типы анализов, которые вы можете выполнять:Бэкенды для метрик
- Базы данных временных рядов: Расчеты скорости, агрегированные метрики
- Колончатые хранилища: Сложные запросы, анализ уникальных пользователей
- Полнофункциональные платформы наблюдаемости: Продвинутые запросы, визуализация, оповещения
Бэкенды для событий и логов
- Системы агрегации логов: Полнотекстовый поиск, анализ логов
- Колончатые хранилища: Анализ структурированных событий
- Полнофункциональные платформы наблюдаемости: Корреляция между метриками и событиями
Бэкенды для трассировок
Выберите бэкенд, поддерживающий хранилище распределенных трассировок и корреляцию span:- Системы распределенной трассировки: Визуализация span, водопады запросов, анализ задержки
- Полнофункциональные платформы наблюдаемости: Поиск трассировок и корреляция с метриками и логами
Информация о сервисе
Все метрики и события экспортируются со следующими атрибутами ресурса: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
- Содержимое файлов в исходном виде и фрагменты кода не включа��тся в метрики или события. Span трассировок — это отдельный путь данных: см. пункт
OTEL_LOG_TOOL_CONTENTниже - При аутентификации через OAuth
user.emailвключается в атрибуты телеметрии, отправляется только на endpoint OTel, который вы настраиваете, никогда на Anthropic. Если это вызывает беспокойство для вашей организации, работайте с вашим бэкендом телеметрии для фильтрации или скрытия этого поля - Содержимое пользовательского промпта не собирается по умолчанию. Записывается только длина промпта. Чтобы включить содержимое промпта, установите
OTEL_LOG_USER_PROMPTS=1. Когда включено:-
События
user_promptсодержат текст промпта в двух атрибутах:promptиprompt_text. Если вы удаляете или маскируете текст промпта события по имени атрибута в вашем коллекторе, укажите в правиле оба атрибута Этот процессорattributesOpenTelemetry Collector удаляет оба атрибута в конвейерах, в которых он указан: -
При включённой трассировке 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 или позже
-
С