К основному содержимому

Настройка пользовательского сборщика OpenTelemetry для агентов Office

Обновлено сегодня

Вы можете маршрутизировать полную телеметрию аудита от агентов Office на собственный сборщик OpenTelemetry (OTEL). Это дает вашей организации полный контроль над хранением, шифрованием и интеграцией с вашей платформой SIEM или наблюдаемости.

В этом руководстве описано, как включить пользовательский сборщик, какие данные вы получите и полная справка по схеме span.

Пользовательские сборщики OTEL доступны для организаций Claude Enterprise и для развертываний прямого поставщика (Amazon Bedrock, Google Vertex AI или шлюз).

Что вы получите

При настройке пользовательского сборщика агенты Office отправляют данные трассировки, охватывающие каждый ход пользователя. Каждый ход создает дерево span, захватывающее подсказку, вызовы модели, выполнение инструментов, загрузку файлов и события сжатия контекста.

Ваш сборщик получает все атрибуты span, включая те, которые содержат пользовательский контент (текст подсказки, входные и выходные данные инструментов, URL-адреса документов и имена файлов). Никакие атрибуты не редактируются и не фильтруются. Текст ответа помощника не включается в отправляемые данные span. Ваша организация владеет этими данными.

Важно: Метрики не отправляются на пользовательские сборщики. Пространство имен счетчика office_agent.* маршрутизируется только в Anthropic. Однако каждое увеличение счетчика также появляется как событие span на активном span, поэтому те же сигналы доступны в ваших трассировках.

Телеметрия отправляется через OTLP/HTTP на вашу конечную точку по адресу {your_url}/v1/traces. gRPC не поддерживается, так как надстройка работает в Office WebView.


Включение пользовательского сборщика

Процесс установки отличается в зависимости от того, как ваша организация проходит аутентификацию в Claude.

Важно: Когда настроена пользовательская конечная точка, телеметрия отправляется исключительно на ваш сборщик. Span не отправляются дважды в Anthropic.

Организации Claude Enterprise (OAuth)

Администратор организации устанавливает конечную точку сборщика в консоли администратора Claude.ai в разделе Параметры организации > Агенты Office. Параметр применяется ко всей организации.

Параметр

Описание

otlp_endpoint

Базовый URL вашего сборщика OTLP. Надстройка добавляет /v1/traces. Настоятельно рекомендуется HTTPS.

otlp_headers

Необязательные заголовки аутентификации, отформатированные в соответствии со спецификацией OpenTelemetry: key1=value1,key2=value2

Протокол должен быть основан на HTTP OTLP. gRPC отклоняется во время конфигурации.

Развертывания прямого поставщика (Amazon Bedrock, Google Vertex AI, шлюз)

Для развертываний, которые проходят аутентификацию у вашего собственного поставщика модели, а не у Claude.ai, конечная точка сборщика предоставляется через один из трех каналов конфигурации. Все три используют одни и те же два ключа.

Рекомендуется: Используйте плагин claude-in-office для Claude Code. Он проведет вас через создание манифеста, регистрацию атрибутов расширения Entra и установку конечной точки начальной загрузки с предварительно подключенными otlp_endpoint и otlp_headers. Три канала ниже задокументированы для справки и ручной установки.

Ключ

Формат

Описание

otlp_endpoint

URL HTTPS

Базовый URL вашего сборщика OTLP. Надстройка удаляет любой завершающий слэш и добавляет /v1/traces.

otlp_headers

key1=value1,key2=value2

Необязательные заголовки аутентификации. Тот же формат, что и переменная окружения OTEL_EXPORTER_OTLP_HEADERS в OpenTelemetry.

Если otlp_endpoint не установлен или пуст, пользовательский сборщик не настроен и надстройка возвращается к поведению по умолчанию.

Примечание: Эти каналы конфигурации применяются только к развертываниям Microsoft Office. Надстройки Google Workspace настраиваются отдельно.

Канал 1: Параметр URL манифеста

Добавьте ключи в качестве параметров строки запроса к URL-адресу области задач в пользовательском манифесте надстройки:

URL-кодируйте значения. Это применяет конфигурацию к каждому пользователю, который устанавливает манифест.

Канал 2: Расширение каталога Azure Entra ID

Для конфигурации для каждого пользователя зарегистрируйте ключи как атрибуты расширения каталога Entra ID и назначьте их через Microsoft Graph. Надстройка читает их из токена ID пользователя, используя вложенную аутентификацию приложения (NAA).

Имена утверждений в выданном токене ID следуют формату расширения каталога Azure:

Утверждение

Соответствует

extn.otlp_endpoint

otlp_endpoint

extn.otlp_headers

otlp_headers

Установите их для каждого пользователя с помощью Graph PATCH для объекта пользователя. Azure кодирует значения расширения каталога как массивы с одним элементом в токене ID; надстройка автоматически их распаковывает. Этот канал требует entra_sso=1 в параметрах URL манифеста для включения получения токена NAA.

Канал 3: ответ конечной точки начальной загрузки

Если ваше развертывание использует конечную точку начальной загрузки (конечную точку JSON, которую размещает ваша организация и которую надстройка вызывает при запуске), включите ключи в тело ответа:

{
"otlp_endpoint": "https://otel-collector.your-domain.com",
"otlp_headers": "Authorization=Bearer <token>"
}

URL конечной точки начальной загрузки сам по себе настраивается через bootstrap_url в параметрах URL манифеста или в утверждении Entra extn.bootstrap_url. Если был получен токен Entra ID, он передается конечной точке начальной загрузки как заголовок авторизации Bearer, чтобы ваша конечная точка могла аутентифицировать пользователя перед возвратом конфигурации для каждого пользователя.

Приоритет

Когда несколько каналов предоставляют значение, более поздние каналы переопределяют более ранние: параметры манифеста читаются первыми, затем утверждения Entra, затем ответ начальной загрузки. Ответ начальной загрузки имеет приоритет.

Если вы еще этого не сделали, самый быстрый способ — это плагин claude-in-office.


Режимы развертывания

Экспорт пользовательского сборщика доступен в обоих режимах развертывания:

  • Claude.ai Enterprise (OAuth): полный журнал аудита, включая идентификацию пользователя (user.email, user.account_uuid, organization.id), метаданные сервера MCP и записи загрузки файлов.

  • Прямой поставщик (Bedrock, Vertex AI, шлюз): основной журнал аудита (подсказки, входные и выходные данные инструментов, URL-адреса документов), но без идентификации пользователя, без метаданных MCP и без диапазонов загрузки файлов. Атрибуция пользователя требует сопоставления session.id с журналами вашего собственного поставщика удостоверений.

Основной журнал аудита идентичен в обоих режимах. Развертывания прямого поставщика не имеют контекста учетной записи Claude.ai, поэтому атрибуты, полученные из профиля пользователя или организации Claude.ai, отсутствуют. Полный список см. в тегах [claude.ai-only] в схеме диапазона ниже.

Метки поверхности и поставщика

Каждый диапазон включает две метки, определяющие, какое приложение Office и платформа его создали. Используйте их в качестве основных измерений для фильтрации и панелей мониторинга.

Метка

Значения

agent.surface

sheet (Excel/Google Sheets), doc (Word), slide (PowerPoint)

agent.vendor

m (Microsoft)


Справочник диапазона

Каждый ход пользователя создает дерево родитель/потомок до пяти типов диапазонов. Атрибуты, отмеченные [content], содержат данные, созданные пользователем; они составляют ваш журнал аудита. Атрибуты, отмеченные [claude.ai-only], заполняются только при входе пользователя с учетной записью Claude; они отсутствуют при развертывании Bedrock, Vertex AI и шлюза. Отсутствующие атрибуты полностью опускаются из диапазона (нет ключа с нулевым значением).

Диапазон file.upload и все атрибуты mcp.* также являются [claude.ai-only], поскольку загрузка файлов и подключения сервера MCP — это функции платформы Claude.

Для развертываний прямого поставщика идентификация пользователя должна быть скоррелирована через session.id и document.url, объединенные с журналами сеансов вашего поставщика удостоверений.

Атрибуты ресурса

Эти атрибуты появляются на каждом диапазоне:

Атрибут

Описание

service.name

Фиксированное значение: office-agent

service.version

Фиксированное значение: 1.0.0

git.sha

Идентификатор коммита сборки

agent.query (корневой диапазон)

Один диапазон на ход пользователя. Это корень дерева диапазонов и содержит идентификацию сеанса, контекст документа и статус сервера MCP. SpanKind: INTERNAL.

Атрибут

Описание

agent.surface

sheet | doc | slide

agent.vendor

m

user.message [content]

Подсказка пользователя (первые 4000 символов)

session.id

Непрозрачный идентификатор сеанса

user.email [claude.ai-only]

Адрес электронной почты пользователя

user.bucket [claude.ai-only]

Детерминированный хеш-бакет (SHA-256 электронной почты, mod 30)

user.account_uuid [claude.ai-only]

UUID учетной записи Claude

document.url [content]

URL открытого документа Office

organization.id [claude.ai-only]

UUID организации Claude

org.rate_limit_tier [claude.ai-only]

Уровень подписки Claude

org.type [claude.ai-only]

Тип организации Claude

agent.selected_model

Модель, выбранная пользователем для этого сеанса

office.platform

PC | Mac | OfficeOnline | iOS | Android | Universal

office.version

Номер сборки Office

mcp.configured_count [claude.ai-only]

Количество настроенных серверов MCP

mcp.connected_count [claude.ai-only]

Количество успешно подключенных серверов MCP

mcp.failed_count [claude.ai-only]

Количество серверов MCP, не подключившихся

mcp.fetch_status [claude.ai-only]

success | error | timeout | no_auth | not_attempted

mcp.fetch_duration_ms [claude.ai-only]

Время получения реестра MCP

mcp.fetch_http_status [claude.ai-only]

Код статуса HTTP при получении реестра MCP

mcp.servers [content] [claude.ai-only]

Сериализованные сведения о серверах MCP (имена, количество инструментов, сообщения об ошибках)

file.upload.count [claude.ai-only]

Количество файлов, прикрепленных к этому ходу

file.upload.total_bytes [claude.ai-only]

Всего загруженных байтов

file.upload.image_count [claude.ai-only]

Количество прикрепленных изображений

file.upload.document_count [claude.ai-only]

Количество прикрепленных документов

file.upload.other_count [claude.ai-only]

Количество других прикреплений

error.name

Имя класса исключения (присутствует при ошибке)

agent.query_phase

Этап, на котором произошла ошибка запроса (присутствует при ошибке)

agent.stream

Один span на каждый вызов API к Claude, как дочерний элемент span запроса. SpanKind: CLIENT.

Атрибут

Описание

model

ID модели, используемой для этого вызова

max_tokens

Запрошено максимальное количество выходных токенов

agent.message_count

Количество сообщений в беседе в момент начала потока

input_tokens

Входные токены, выставленные в счёт (из ответа API)

output_tokens

Выходные токены, выставленные в счёт (из ответа API)

cache_read_tokens

Токены, полученные из кэша подсказок

cache_creation_tokens

Токены, записанные в кэш подсказок

stop_reason

end_turn | tool_use | max_tokens | и т. д.

request_id

Заголовок request-id API Anthropic, используемый для корреляции при обращении в поддержку

Примечание о кэшировании подсказок: надстройка безусловно запрашивает кэширование подсказок. Атрибуты cache_read_tokens и cache_creation_tokens устанавливаются из ответа API поставщика и опускаются, если ответ их не содержит. Кэширование подсказок доступно на платформе Claude Developer Platform; на момент написания Amazon Bedrock и Google Vertex AI ещё не возвращают эти поля через клиент, используемый надстройкой. Когда поддержка появится у вашего поставщика, эти атрибуты начнут отображаться автоматически.

agent.tool_execution

Один спан на вызов инструмента как дочерний элемент спана потока. SpanKind: INTERNAL. Это основная запись о действиях, которые модель выполнила над документом.

Атрибут

Описание

tool_name

Идентификатор инструмента (например, get_cell_ranges, execute_office_js, edit_slide_xml)

tool.id

Уникальный ID этого вызова инструмента

tool.caller

server | client

tool.owner

first_party | mcp | server

tool.read_write

read | write | read_write

tool.accept_decision

manual | auto_accept | deferred

tool.input [content]

Сериализованный ввод инструмента (первые 4000 символов)

tool.success

Логическое значение

tool.output [content]

Сериализованный вывод инструмента (первые 4000 символов)

tool.output_chars

Полная длина вывода в символах (используется для обнаружения усечения)

tool.error_type

Классификация ошибки (присутствует при сбое)

sheet.cells_read

Прочитанные ячейки (только поверхность листа)

sheet.cells_written

Записанные ячейки (только поверхность листа)

sheet.cells_copied

Скопированные ячейки (только поверхность листа)

Примечание: Атрибут tool.accept_decision записывает, как было принято решение о разрешении: manual (пользователь одобрил это конкретное действие), auto_accept (пользователь ранее предоставил постоянное одобрение) или deferred (действие было поставлено в очередь для последующего рассмотрения). Используйте это для аудита моделей одобрения в вашей организации.

agent.compaction

Одна пролог на разговор автоматического резюмирования, срабатывает при приближении контекста к лимиту окна. SpanKind: CLIENT.

Атрибут

Описание

compaction.pre_tokens

Количество токенов до резюмирования

compaction.post_tokens

Количество токенов после резюмирования

compaction.tokens_saved

Разница

compaction.success

Логическое значение

compaction.trigger

В настоящее время всегда реактивный

Эта пролог также содержит agent.surface, agent.vendor, session.id, user.email [claude.ai-only], user.bucket [claude.ai-only], office.platform и office.version, дублированные из корневой пролога, чтобы вы могли независимо запрашивать события сжатия.

file.upload [claude.ai-only]

Одна пролог на отдельную загрузку файла как дочерняя пролога запроса. SpanKind: CLIENT. Этот тип пролога появляется только когда пользователи входят с учетной записью Claude.ai. Загрузка файлов недоступна при прямых развертываниях поставщика.

Атрибут

Описание

file.upload.filename [content]

Исходное имя файла

file.upload.size_bytes

Размер файла

file.upload.mime_type

Тип MIME

file.upload.file_id

Идентификатор Anthropic Files API

file.upload.success

Логическое значение


События пролога

События пролога — это отмеченные временем маркеры, прикрепленные к приведенным выше прологам. Они фиксируют переходы жизненного цикла и сигналы, эквивалентные счетчикам.

  • agent.query: exception {exception.type}; file_upload {file_id, mime_type, content_category}

  • agent.stream: first_token; stream_complete; stream_error {exception.type}

  • agent.tool_execution: tool_init; tool_run; tool_result; tool_error {error_type}

  • agent.compaction: compaction_start; compaction_complete; compaction_error {exception.type}

  • file.upload: exception {exception.type}

Каждый внутренний счетчик продукта также записывает событие пролога с тем же именем на текущей активной пролог, обеспечивая эквивалент потока метрик в ваших данных трассировки. Событие office_agent.token.usage выдается на каждой пролог agent.stream, один раз для каждого ненулевого типа токена, с атрибутами {token_usage.type: input | output | cacheRead | cacheCreation, token_usage.model, token_usage.token_count}. Это отражает форму счетчика *.token.usage, выдаваемую другими продуктами Anthropic, поэтому один сборщик может агрегировать стоимость токена по продуктам путем группировки по service.name.


Поведение, специфичное для поверхности

Схема телеметрии согласована на всех поверхностях. Вот различия:

  • Sheets (Excel): пролог agent.tool_execution включают атрибуты sheet.cells_read, sheet.cells_written и sheet.cells_copied. События пролога office_agent.cell_edit_collision_total появляются, когда пользователь находится в процессе редактирования ячейки, а инструмент пытается выполнить запись.

  • Documents (Word): события воронки редактирования документов отслеживают жизненный цикл редактирования: office_agent.doc_edit_received_total, office_agent.doc_edit_parsed_total, office_agent.doc_edit_applied_total, office_agent.doc_proposed_edit_reviewed_total. Нет атрибутов sheet.cells_*.

  • Slides (PowerPoint): нет атрибутов или событий, специфичных для поверхности, помимо общей схемы.


Восстановление сеанса пользователя

Развертывания Claude.ai

  • Фильтруйте пролог по user.email (или user.account_uuid) и session.id.

  • Упорядочьте пролог agent.query по временной метке начала; каждая — это один ход пользователя.

  • Для каждого хода user.message — это подсказка, а document.url — это файл, над которым выполняется работа.

  • Дочерние пролог agent.tool_execution, упорядоченные по временной метке, — это выполненные действия: tool.input — это то, что было попытано, tool.output — это результат, tool.accept_decision записывает, явно ли пользователь одобрил.

Развертывания прямого поставщика

Надстройка не имеет идентификации пользователя Claude.ai в этом режиме, поэтому пролог не содержат user.email или user.account_uuid. Чтобы отнести деятельность к пользователю:

  • Фильтруйте пролог по session.id, чтобы выделить один непрерывный сеанс надстройки.

  • Используйте document.url для определения обрабатываемого файла.

  • Сопоставьте сеанс с журналами вашего поставщика удостоверений: события входа Entra, журналы доступа шлюза или журнал запросов вашей конечной точки начальной загрузки (которая получает токен Entra ID пользователя в качестве заголовка Bearer).

  • После того как сеанс приписан пользователю, реконструкция за каждый ход идентична: agent.query упорядочены по временной метке, с user.message, tool.input, tool.output и tool.accept_decision, предоставляющими журнал аудита.

Это создает полный упорядоченный стенограмму взаимодействия в обоих режимах развертывания.

Нашли ответ на свой вопрос?