Руководство по наблюдаемости 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
:false
telemetry.target
:local
telemetry.otlpEndpoint
:http://localhost:4317
telemetry.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_length
prompt
(этот атрибут исключается, еслиlog_prompts_enabled
установлен вfalse
)auth_type
- Атрибуты:
-
qwen-code.tool_call
: Это событие происходит при каждом вызове функции.- Атрибуты:
function_name
function_args
duration_ms
success
(boolean)decision
(string: “accept”, “reject”, “auto_accept”, или “modify”, если применимо)error
(если применимо)error_type
(если применимо)metadata
(если применимо, словарь string -> any)
- Атрибуты:
-
qwen-code.api_request
: Это событие происходит при отправке запроса к Qwen API.- Атрибуты:
model
request_text
(если применимо)
- Атрибуты:
-
qwen-code.api_error
: Это событие происходит, если запрос к API завершился ошибкой.- Атрибуты:
model
error
error_type
status_code
duration_ms
auth_type
- Атрибуты:
-
qwen-code.api_response
: Это событие происходит при получении ответа от Qwen API.- Атрибуты:
model
status_code
duration_ms
error
(опционально)input_token_count
output_token_count
cached_content_token_count
thoughts_token_count
tool_token_count
response_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_name
success
(boolean)decision
(string: “accept”, “reject”, или “modify”, если применимо)tool_type
(string: “mcp”, или “native”, если применимо)
- Атрибуты:
-
qwen-code.tool.call.latency
(Histogram, ms): Измеряет задержку вызовов инструментов.- Атрибуты:
function_name
decision
(string: “accept”, “reject”, или “modify”, если применимо)
- Атрибуты:
-
qwen-code.api.request.count
(Counter, Int): Считает все API-запросы.- Атрибуты:
model
status_code
error_type
(если применимо)
- Атрибуты:
-
qwen-code.api.request.latency
(Histogram, ms): Измеряет задержку API-запросов.- Атрибуты:
model
- Атрибуты:
-
qwen-code.token.usage
(Counter, Int): Считает количество использованных токенов.- Атрибуты:
model
type
(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): Количество токенов в контексте после сжатия.
- Атрибуты: