Наблюдаемость с помощью OpenTelemetry
Узнайте, как включить и настроить OpenTelemetry для Qwen Code.
Ключевые преимущества
- 🔍 Аналитика использования: Понимание моделей взаимодействия и внедрения функций в вашей команде
- ⚡ Мониторинг производительности: Отслеживание времени отклика, потребления токенов и использования ресурсов
- 🐛 Отладка в реальном времени: Выявление узких мест, сбоев и шаблонов ошибок по мере их возникновения
- 📊 Оптимизация рабочих процессов: Принятие обоснованных решений для улучшения конфигураций и процессов
- 🏢 Корпоративное управление: Мониторинг использования в командах, отслеживание затрат, обеспечение соответствия требованиям и интеграция с существующей инфраструктурой мониторинга
Интеграция с OpenTelemetry
Основанная на OpenTelemetry — независимом от поставщика, отраслевом стандарте фреймворка наблюдаемости — система наблюдаемости Qwen Code предоставляет:
- Универсальную совместимость: Экспорт в любой бэкенд OpenTelemetry (Aliyun, Jaeger, Prometheus, Datadog и др.)
- Стандартизированные данные: Использование согласованных форматов и методов сбора данных в вашем инструментарии
- Интеграцию, устойчивую к будущему: Подключение к существующей и будущей инфраструктуре наблюдаемости
- Отсутствие привязки к поставщику: Переключение между бэкендами без изменения вашей инструментации
Конфигурация
⚠️ Важное замечание: Для работы этой функции требуются соответствующие изменения в коде. Эта документация предоставляется заранее; пожалуйста, следите за будущими обновлениями кода для получения актуальной функциональности.
Всем поведением телеметрии управляют через ваш файл .qwen/settings.json.
Эти настройки могут быть переопределены переменными окружения или флагами командной строки.
| Настройка | Переменная окружения | Флаг командной строки | Описание | Значения | По умолчанию |
|---|---|---|---|---|---|
enabled | QWEN_TELEMETRY_ENABLED | --telemetry / --no-telemetry | Включить или отключить телеметрию | true/false | false |
target | QWEN_TELEMETRY_TARGET | --telemetry-target <local|qwen> | Куда отправлять данные телеметрии | "qwen"/"local" | "local" |
otlpEndpoint | QWEN_TELEMETRY_OTLP_ENDPOINT | --telemetry-otlp-endpoint <URL> | Конечная точка сборщика OTLP | строка URL | http://localhost:4317 |
otlpProtocol | QWEN_TELEMETRY_OTLP_PROTOCOL | --telemetry-otlp-protocol <grpc|http> | Транспортный протокол OTLP | "grpc"/"http" | "grpc" |
outfile | QWEN_TELEMETRY_OUTFILE | --telemetry-outfile <path> | Сохранять телеметрию в файл (переопределяет otlpEndpoint) | путь к файлу | - |
logPrompts | QWEN_TELEMETRY_LOG_PROMPTS | --telemetry-log-prompts / --no-telemetry-log-prompts | Включать промпты в журналы телеметрии | true/false | true |
useCollector | QWEN_TELEMETRY_USE_COLLECTOR | - | Использовать внешний сборщик OTLP (для опытных) | true/false | false |
Примечание о булевых переменных окружения: Для булевых настроек (enabled,
logPrompts, useCollector), установка соответствующей переменной окружения в
true или 1 активирует функцию. Любое другое значение отключит её.
Для подробной информации обо всех параметрах конфигурации см. Руководство по конфигурации.
Телеметрия Aliyun
Прямой экспорт (рекомендуется)
Отправляет телеметрию напрямую в сервисы Aliyun. Коллектор не требуется.
- Включите телеметрию в вашем файле
.qwen/settings.json:{ "telemetry": { "enabled": true, "target": "qwen" } } - Запустите Qwen Code и отправьте запросы.
- Просмотрите логи и метрики в консоли Aliyun.
Локальная телеметрия
Для локальной разработки и отладки вы можете собирать данные телеметрии локально:
Вывод в файл (рекомендуется)
- Включите телеметрию в вашем файле
.qwen/settings.json:{ "telemetry": { "enabled": true, "target": "local", "otlpEndpoint": "", "outfile": ".qwen/telemetry.log" } } - Запустите Qwen Code и отправьте запросы.
- Просмотрите логи и метрики в указанном файле (например,
.qwen/telemetry.log).
Экспорт на основе коллектора (для продвинутых)
- Запустите скрипт автоматизации:
Это сделает следующее:
npm run telemetry -- --target=local- Скачает и запустит Jaeger и OTEL коллектор
- Настроит ваше рабочее пространство для локальной телеметрии
- Предоставит интерфейс Jaeger по адресу http://localhost:16686
- Сохранит логи/метрики в
~/.qwen/tmp/<projectHash>/otel/collector.log - Остановит коллектор при выходе (например,
Ctrl+C)
- Запустите Qwen Code и отправьте запросы.
- Просмотрите трассировки по адресу http://localhost:16686 , а логи/метрики — в файле лога коллектора.
Логи и метрики
В следующем разделе описывается структура логов и метрик, генерируемых для Qwen Code.
sessionIdвключается как общее свойство во все логи и метрики.
Логи
Логи — это записи с меткой времени о конкретных событиях. Для Qwen Code записываются следующие события:
-
qwen-code.config: Это событие происходит один раз при запуске и содержит конфигурацию CLI.- Атрибуты:
model(строка)embedding_model(строка)sandbox_enabled(булево значение)core_tools_enabled(строка)approval_mode(строка)api_key_enabled(булево значение)vertex_ai_enabled(булево значение)code_assist_enabled(булево значение)log_prompts_enabled(булево значение)file_filtering_respect_git_ignore(булево значение)debug_mode(булево значение)mcp_servers(строка)output_format(строка: “text” или “json”)
- Атрибуты:
-
qwen-code.user_prompt: Это событие происходит, когда пользователь отправляет запрос.- Атрибуты:
prompt_length(целое число)prompt_id(строка)prompt(строка, этот атрибут исключается, еслиlog_prompts_enabledустановлен вfalse)auth_type(строка)
- Атрибуты:
-
qwen-code.tool_call: Это событие происходит при каждом вызове функции.- Атрибуты:
function_namefunction_argsduration_mssuccess(булево значение)decision(строка: “accept”, “reject”, “auto_accept” или “modify”, если применимо)error(если применимо)error_type(если применимо)content_length(целое число, если применимо)metadata(если применимо, словарь строка → любой тип)
- Атрибуты:
-
qwen-code.file_operation: Это событие происходит при каждой операции с файлом.- Атрибуты:
tool_name(строка)operation(строка: “create”, “read”, “update”)lines(целое число, если применимо)mimetype(строка, если применимо)extension(строка, если применимо)programming_language(строка, если применимо)diff_stat(строка JSON, если применимо): Строка JSON со следующими полями:ai_added_lines(целое число)ai_removed_lines(целое число)user_added_lines(целое число)user_removed_lines(целое число)
- Атрибуты:
-
qwen-code.api_request: Это событие происходит при выполнении запроса к API Qwen.- Атрибуты:
modelrequest_text(если применимо)
- Атрибуты:
-
qwen-code.api_error: Это событие происходит, если запрос к API завершается ошибкой.- Атрибуты:
modelerrorerror_typestatus_codeduration_msauth_type
- Атрибуты:
-
qwen-code.api_response: Это событие происходит при получении ответа от API Qwen.- Атрибуты:
modelstatus_codeduration_mserror(опционально)input_token_countoutput_token_countcached_content_token_countthoughts_token_counttool_token_countresponse_text(если применимо)auth_type
- Атрибуты:
-
qwen-code.tool_output_truncated: Это событие происходит, когда вывод вызова инструмента слишком большой и усекается.- Атрибуты:
tool_name(строка)original_content_length(целое число)truncated_content_length(целое число)threshold(целое число)lines(целое число)prompt_id(строка)
- Атрибуты:
-
qwen-code.malformed_json_response: Это событие происходит, когда ответgenerateJsonот API Qwen не может быть распознан как JSON.- Атрибуты:
model
- Атрибуты:
-
qwen-code.flash_fallback: Это событие происходит, когда Qwen Code переключается на режим flash в качестве резервного варианта.- Атрибуты:
auth_type
- Атрибуты:
-
qwen-code.slash_command: Это событие происходит, когда пользователь выполняет команду с косой чертой.- Атрибуты:
command(строка)subcommand(строка, если применимо)
- Атрибуты:
-
qwen-code.extension_enable: Это событие происходит, когда расширение активируется. -
qwen-code.extension_install: Это событие происходит, когда расширение устанавливается.- Атрибуты:
extension_name(строка)extension_version(строка)extension_source(строка)status(строка)
- Атрибуты:
-
qwen-code.extension_uninstall: Это событие происходит, когда расширение удаляется.
Метрики
Метрики — это числовые измерения поведения за определенный период времени. Для Qwen Code собираются следующие метрики (названия метрик остаются qwen-code.* для совместимости):
-
qwen-code.session.count(Счетчик, Int): Увеличивается на единицу при каждом запуске CLI. -
qwen-code.tool.call.count(Счетчик, Int): Подсчитывает количество вызовов инструментов.- Атрибуты:
function_namesuccess(булево значение)decision(строка: “accept”, “reject” или “modify”, если применимо)tool_type(строка: “mcp” или “native”, если применимо)
- Атрибуты:
-
qwen-code.tool.call.latency(Гистограмма, мс): Измеряет задержку вызова инструмента.- Атрибуты:
function_namedecision(строка: “accept”, “reject” или “modify”, если применимо)
- Атрибуты:
-
qwen-code.api.request.count(Счетчик, Int): Подсчитывает все запросы к API.- Атрибуты:
modelstatus_codeerror_type(если применимо)
- Атрибуты:
-
qwen-code.api.request.latency(Гистограмма, мс): Измеряет задержку запроса к API.- Атрибуты:
model
- Атрибуты:
-
qwen-code.token.usage(Счетчик, Int): Подсчитывает количество использованных токенов.- Атрибуты:
modeltype(строка: “input”, “output”, “thought”, “cache” или “tool”)
- Атрибуты:
-
qwen-code.file.operation.count(Счетчик, Int): Подсчитывает операции с файлами.- Атрибуты:
operation(строка: “create”, “read”, “update”): Тип операции с файлом.lines(Int, если применимо): Количество строк в файле.mimetype(строка, если применимо): MIME-тип файла.extension(строка, если применимо): Расширение файла.model_added_lines(Int, если применимо): Количество строк, добавленных/измененных моделью.model_removed_lines(Int, если применимо): Количество строк, удаленных/измененных моделью.user_added_lines(Int, если применимо): Количество строк, добавленных/измененных пользователем в предлагаемых ИИ изменениях.user_removed_lines(Int, если применимо): Количество строк, удаленных/измененных пользователем в предлагаемых ИИ изменениях.programming_language(строка, если применимо): Язык программирования файла.
- Атрибуты:
-
qwen-code.chat_compression(Счетчик, Int): Подсчитывает операции сжатия чата.- Атрибуты:
tokens_before: (Int): Количество токенов в контексте до сжатия.tokens_after: (Int): Количество токенов в контексте после сжатия.
- Атрибуты: