18 KiB
Руководство по наблюдаемости Qwen Code
Телеметрия предоставляет данные о производительности, состоянии и использовании Qwen Code. Включив её, вы сможете отслеживать операции, отлаживать проблемы и оптимизировать использование инструментов с помощью трассировок, метрик и структурированных логов.
Система телеметрии Qwen Code построена на стандарте OpenTelemetry (OTEL), что позволяет отправлять данные в любой совместимый бэкенд.
Включение телеметрии
Телеметрию можно включить несколькими способами. Основная настройка осуществляется через файл .qwen/settings.json и переменные окружения, но флаги CLI могут переопределять эти настройки для конкретной сессии.
Порядок приоритета
Ниже перечислен порядок приоритета применения настроек телеметрии, где элементы, указанные выше, имеют больший приоритет:
-
Флаги CLI (для команды
qwen):--telemetry/--no-telemetry: Переопределяетtelemetry.enabled.--telemetry-target <local|gcp>: Переопределяетtelemetry.target.--telemetry-otlp-endpoint <URL>: Переопределяетtelemetry.otlpEndpoint.--telemetry-log-prompts/--no-telemetry-log-prompts: Переопределяетtelemetry.logPrompts.--telemetry-outfile <path>: Перенаправляет вывод телеметрии в файл. См. Экспорт в файл.
-
Переменные окружения:
OTEL_EXPORTER_OTLP_ENDPOINT: Переопределяетtelemetry.otlpEndpoint.
-
Файл настроек рабочей области (
.qwen/settings.json): Значения из объектаtelemetryв этом файле, специфичном для проекта. -
Файл пользовательских настроек (
~/.qwen/settings.json): Значения из объектаtelemetryв этом глобальном файле пользователя. -
Значения по умолчанию: применяются, если не заданы выше.
telemetry.enabled:falsetelemetry.target:localtelemetry.otlpEndpoint:http://localhost:4317telemetry.logPrompts:true
Для скрипта npm run telemetry -- --target=<gcp|local>:
Аргумент --target для этого скрипта только переопределяет telemetry.target на время выполнения и для целей этого скрипта (т.е. выбора collector'а, который нужно запустить). Он не изменяет ваш settings.json на постоянной основе. Скрипт сначала проверит settings.json на наличие telemetry.target, чтобы использовать его как значение по умолчанию.
Пример настроек
Следующий код можно добавить в настройки рабочей области (.qwen/settings.json) или пользователя (~/.qwen/settings.json), чтобы включить телеметрию и отправлять данные в Google Cloud:
{
"telemetry": {
"enabled": true,
"target": "gcp"
},
"sandbox": false
}
Экспорт в файл
Вы можете экспортировать все данные телеметрии в файл для локального анализа.
Чтобы включить экспорт в файл, используйте флаг --telemetry-outfile, указав путь к желаемому файлу вывода. Это необходимо запускать с параметром --telemetry-target=local.
# Укажите путь к файлу, в который хотите сохранить телеметрию
TELEMETRY_FILE=".qwen/telemetry.log"
# Запустите Qwen Code с локальной телеметрией
# ПРИМЕЧАНИЕ: --telemetry-otlp-endpoint="" требуется для отключения стандартного
# экспортера OTLP и обеспечения записи телеметрии в локальный файл.
qwen --telemetry \
--telemetry-target=local \
--telemetry-otlp-endpoint="" \
--telemetry-outfile="$TELEMETRY_FILE" \
--prompt "What is OpenTelemetry?"
Запуск OTEL Collector
OTEL Collector — это сервис, который получает, обрабатывает и экспортирует телеметрические данные.
CLI может отправлять данные, используя либо протокол OTLP/gRPC, либо OTLP/HTTP.
Выбрать протокол можно с помощью флага --telemetry-otlp-protocol
или настройки telemetry.otlpProtocol в файле settings.json. Подробнее — в
документации по конфигурации.
Узнать больше о стандартной конфигурации OTEL exporter можно в документации.
Local
Используйте команду npm run telemetry -- --target=local, чтобы автоматизировать процесс настройки локального telemetry pipeline, включая конфигурацию необходимых параметров в вашем файле .qwen/settings.json. Скрипт устанавливает otelcol-contrib (OpenTelemetry Collector) и jaeger (Jaeger UI для просмотра трассировок). Чтобы начать работу:
-
Выполните команду: Запустите команду из корня репозитория:
npm run telemetry -- --target=localСкрипт выполнит следующие действия:
- Загрузит Jaeger и OTEL, если это необходимо.
- Запустит локальный экземпляр Jaeger.
- Запустит OTEL collector, настроенный на получение данных от Qwen Code.
- Автоматически включит telemetry в настройках вашего workspace.
- При завершении отключит telemetry.
-
Просмотр трассировок: Откройте браузер и перейдите по адресу http://localhost:16686, чтобы получить доступ к Jaeger UI. Здесь вы сможете изучить подробные трассировки операций Qwen Code.
-
Просмотр логов и метрик: Скрипт перенаправляет вывод OTEL collector (включая логи и метрики) в файл
~/.qwen/tmp/<projectHash>/otel/collector.log. Скрипт также предоставит ссылки для просмотра и команду для отслеживания ваших telemetry данных (трассировки, метрики, логи) в реальном времени. -
Остановка сервисов: Нажмите
Ctrl+Cв терминале, где запущен скрипт, чтобы остановить OTEL Collector и Jaeger.
Google Cloud
Используйте команду npm run telemetry -- --target=gcp, чтобы автоматизировать настройку локального OpenTelemetry collector, который будет пересылать данные в ваш проект Google Cloud, включая конфигурацию необходимых параметров в файле .qwen/settings.json. Скрипт устанавливает otelcol-contrib. Чтобы использовать его:
-
Предварительные требования:
- У вас должен быть ID проекта Google Cloud.
- Экспортируйте переменную окружения
GOOGLE_CLOUD_PROJECT, чтобы она была доступна для OTEL collector.export OTLP_GOOGLE_CLOUD_PROJECT="your-project-id" - Пройдите аутентификацию в Google Cloud (например, выполните
gcloud auth application-default loginили убедитесь, что установлена переменнаяGOOGLE_APPLICATION_CREDENTIALS). - Убедитесь, что у вашей учетной записи Google Cloud или сервисной учетной записи есть необходимые роли IAM: "Cloud Trace Agent", "Monitoring Metric Writer" и "Logs Writer".
-
Выполните команду: Запустите команду из корня репозитория:
npm run telemetry -- --target=gcpСкрипт выполнит следующие действия:
- Загрузит бинарный файл
otelcol-contrib, если это необходимо. - Запустит OTEL collector, настроенный на получение данных от Qwen Code и их экспорт в указанный проект Google Cloud.
- Автоматически включит телеметрию и отключит sandbox mode в настройках вашего workspace (
.qwen/settings.json). - Предоставит прямые ссылки для просмотра трассировок, метрик и логов в Google Cloud Console.
- При завершении работы (Ctrl+C) попытается восстановить исходные настройки телеметрии и sandbox mode.
- Загрузит бинарный файл
-
Запустите Qwen Code: В отдельном терминале выполните команды Qwen Code. Это сгенерирует данные телеметрии, которые будут захвачены collector.
-
Просмотр телеметрии в Google Cloud: Используйте ссылки, предоставленные скриптом, чтобы перейти в Google Cloud Console и просмотреть трассировки, метрики и логи.
-
Просмотр логов локального collector: Скрипт перенаправляет вывод локального OTEL collector в
~/.qwen/tmp/<projectHash>/otel/collector-gcp.log. Скрипт также предоставляет ссылки и команды для просмотра логов collector локально. -
Остановка сервиса: Нажмите
Ctrl+Cв терминале, где запущен скрипт, чтобы остановить OTEL Collector.
Справочник по логам и метрикам
В данном разделе описывается структура логов и метрик, генерируемых для Qwen Code.
sessionIdвключается как общий атрибут во все логи и метрики.
Логи
Логи — это записи с меткой времени о конкретных событиях. Для Qwen Code логируются следующие события:
-
qwen-code.config: Это событие происходит один раз при запуске и содержит конфигурацию CLI.- Атрибуты:
model(string)embedding_model(string)sandbox_enabled(boolean)core_tools_enabled(string)approval_mode(string)api_key_enabled(boolean)vertex_ai_enabled(boolean)code_assist_enabled(boolean)log_prompts_enabled(boolean)file_filtering_respect_git_ignore(boolean)debug_mode(boolean)mcp_servers(string)
- Атрибуты:
-
qwen-code.user_prompt: Это событие происходит, когда пользователь отправляет prompt.- Атрибуты:
prompt_lengthprompt(этот атрибут исключается, еслиlog_prompts_enabledустановлен вfalse)auth_type
- Атрибуты:
-
qwen-code.tool_call: Это событие происходит при каждом вызове функции.- Атрибуты:
function_namefunction_argsduration_mssuccess(boolean)decision(string: "accept", "reject", "auto_accept", или "modify", если применимо)error(если применимо)error_type(если применимо)metadata(если применимо, словарь string -> any)
- Атрибуты:
-
qwen-code.api_request: Это событие происходит при отправке запроса к Qwen API.- Атрибуты:
modelrequest_text(если применимо)
- Атрибуты:
-
qwen-code.api_error: Это событие происходит, если запрос к API завершился ошибкой.- Атрибуты:
modelerrorerror_typestatus_codeduration_msauth_type
- Атрибуты:
-
qwen-code.api_response: Это событие происходит при получении ответа от Qwen API.- Атрибуты:
modelstatus_codeduration_mserror(опционально)input_token_countoutput_token_countcached_content_token_countthoughts_token_counttool_token_countresponse_text(если применимо)auth_type
- Атрибуты:
-
qwen-code.flash_fallback: Это событие происходит, когда Qwen Code переключается на flash в качестве резервного варианта.- Атрибуты:
auth_type
- Атрибуты:
-
qwen-code.slash_command: Это событие происходит, когда пользователь выполняет slash-команду.- Атрибуты:
command(string)subcommand(string, если применимо)
- Атрибуты:
Метрики
Метрики — это числовые измерения поведения за определённый период времени. Для Qwen Code собираются следующие метрики (названия метрик остаются qwen-code.* для совместимости):
-
qwen-code.session.count(Counter, Int): Увеличивается на 1 при каждом запуске CLI. -
qwen-code.tool.call.count(Counter, Int): Считает количество вызовов инструментов.- Атрибуты:
function_namesuccess(boolean)decision(string: "accept", "reject", или "modify", если применимо)tool_type(string: "mcp", или "native", если применимо)
- Атрибуты:
-
qwen-code.tool.call.latency(Histogram, ms): Измеряет задержку вызовов инструментов.- Атрибуты:
function_namedecision(string: "accept", "reject", или "modify", если применимо)
- Атрибуты:
-
qwen-code.api.request.count(Counter, Int): Считает все API-запросы.- Атрибуты:
modelstatus_codeerror_type(если применимо)
- Атрибуты:
-
qwen-code.api.request.latency(Histogram, ms): Измеряет задержку API-запросов.- Атрибуты:
model
- Атрибуты:
-
qwen-code.token.usage(Counter, Int): Считает количество использованных токенов.- Атрибуты:
modeltype(string: "input", "output", "thought", "cache", или "tool")
- Атрибуты:
-
qwen-code.file.operation.count(Counter, Int): Считает количество операций с файлами.- Атрибуты:
operation(string: "create", "read", "update"): Тип операции с файлом.lines(Int, если применимо): Количество строк в файле.mimetype(string, если применимо): MIME-тип файла.extension(string, если применимо): Расширение файла.ai_added_lines(Int, если применимо): Количество строк, добавленных/изменённых AI.ai_removed_lines(Int, если применимо): Количество строк, удалённых/изменённых AI.user_added_lines(Int, если применимо): Количество строк, добавленных/изменённых пользователем в предложенных AI изменениях.user_removed_lines(Int, если применимо): Количество строк, удалённых/изменённых пользователем в предложенных AI изменениях.
- Атрибуты:
-
qwen-code.chat_compression(Counter, Int): Считает количество операций сжатия чата.- Атрибуты:
tokens_before: (Int): Количество токенов в контексте до сжатия.tokens_after: (Int): Количество токенов в контексте после сжатия.
- Атрибуты: