docs/developers/development/telemetry.md
Learn how to enable and setup OpenTelemetry for Qwen Code.
Built on OpenTelemetry — the vendor-neutral, industry-standard observability framework — Qwen Code's observability system provides:
[!note]
⚠️ Special Note: This feature requires corresponding code changes. This documentation is provided in advance; please refer to future code updates for actual functionality.
All telemetry behavior is controlled through your .qwen/settings.json file.
These settings can be overridden by environment variables or CLI flags.
| Setting | Environment Variable | CLI Flag | Description | Values | Default |
|---|---|---|---|---|---|
enabled | QWEN_TELEMETRY_ENABLED | --telemetry / --no-telemetry | Enable or disable telemetry | true/false | false |
target | QWEN_TELEMETRY_TARGET | --telemetry-target <local|gcp> | Where to send telemetry data | "gcp"/"local" | "local" |
otlpEndpoint | QWEN_TELEMETRY_OTLP_ENDPOINT | --telemetry-otlp-endpoint <URL> | OTLP collector endpoint | URL string | http://localhost:4317 |
otlpProtocol | QWEN_TELEMETRY_OTLP_PROTOCOL | --telemetry-otlp-protocol <grpc|http> | OTLP transport protocol | "grpc"/"http" | "grpc" |
outfile | QWEN_TELEMETRY_OUTFILE | --telemetry-outfile <path> | Save telemetry to file (overrides otlpEndpoint) | file path | - |
logPrompts | QWEN_TELEMETRY_LOG_PROMPTS | --telemetry-log-prompts / --no-telemetry-log-prompts | Include prompts in telemetry logs | true/false | true |
useCollector | QWEN_TELEMETRY_USE_COLLECTOR | - | Use external OTLP collector (advanced) | true/false | false |
Note on boolean environment variables: For the boolean settings (enabled,
logPrompts, useCollector), setting the corresponding environment variable to
true or 1 will enable the feature. Any other value will disable it.
For detailed information about all configuration options, see the Configuration Guide.
To view Qwen Code telemetry in Alibaba Cloud Managed Service for OpenTelemetry, configure Qwen Code to export to the OTLP endpoint provided by ARMS.
Setting "target": "gcp" alone does not configure the export
destination. If otlpEndpoint is not set, Qwen Code still defaults to
http://localhost:4317. If outfile is set, it overrides
otlpEndpoint and telemetry is written to the file instead of being
sent to Alibaba Cloud.
.qwen/settings.json and set the OTLP
endpoint:
{
"telemetry": {
"enabled": true,
"target": "gcp",
"otlpEndpoint": "https://<your-otlp-endpoint>",
"otlpProtocol": "grpc"
}
}
OTEL_EXPORTER_OTLP_HEADERS (or the signal-specific variants). Qwen
Code does not currently expose OTLP auth headers directly in
.qwen/settings.json.Applications to inspect traces and service
topology.trace.console.aliyun.com or international):
navigate to Integration Center.tracing.console.aliyun.com): navigate to
Cluster Configurations → Access point information.For local development and debugging, you can capture telemetry data locally:
.qwen/settings.json:
{
"telemetry": {
"enabled": true,
"target": "local",
"otlpEndpoint": "",
"outfile": ".qwen/telemetry.log"
}
}
.qwen/telemetry.log).npm run telemetry -- --target=local
~/.qwen/tmp/<projectHash>/otel/collector.logCtrl+C)The following section describes the structure of logs and metrics generated for Qwen Code.
sessionId is included as a common attribute on all logs and metrics.Logs are timestamped records of specific events. The following events are logged for Qwen Code:
qwen-code.config: This event occurs once at startup with the CLI's configuration.
model (string)sandbox_enabled (boolean)core_tools_enabled (string)approval_mode (string)file_filtering_respect_git_ignore (boolean)debug_mode (boolean)truncate_tool_output_threshold (number)truncate_tool_output_lines (number)hooks (string, comma-separated hook event types, omitted if hooks disabled)ide_enabled (boolean)interactive_shell_enabled (boolean)mcp_servers (string)output_format (string: "text" or "json")qwen-code.user_prompt: This event occurs when a user submits a prompt.
prompt_length (int)prompt_id (string)prompt (string, this attribute is excluded if log_prompts_enabled is
configured to be false)auth_type (string)qwen-code.tool_call: This event occurs for each function call.
function_namefunction_argsduration_mssuccess (boolean)decision (string: "accept", "reject", "auto_accept", or "modify", if
applicable)error (if applicable)error_type (if applicable)content_length (int, if applicable)metadata (if applicable, dictionary of string -> any)qwen-code.file_operation: This event occurs for each file operation.
tool_name (string)operation (string: "create", "read", "update")lines (int, if applicable)mimetype (string, if applicable)extension (string, if applicable)programming_language (string, if applicable)diff_stat (json string, if applicable): A JSON string with the following members:
ai_added_lines (int)ai_removed_lines (int)user_added_lines (int)user_removed_lines (int)qwen-code.api_request: This event occurs when making a request to Qwen API.
modelrequest_text (if applicable)qwen-code.api_error: This event occurs if the API request fails.
modelerrorerror_typestatus_codeduration_msauth_typeqwen-code.api_response: This event occurs upon receiving a response from Qwen API.
modelstatus_codeduration_mserror (optional)input_token_countoutput_token_countcached_content_token_countthoughts_token_countresponse_text (if applicable)auth_typeqwen-code.tool_output_truncated: This event occurs when the output of a tool call is too large and gets truncated.
tool_name (string)original_content_length (int)truncated_content_length (int)threshold (int)lines (int)prompt_id (string)qwen-code.malformed_json_response: This event occurs when a generateJson response from Qwen API cannot be parsed as a json.
modelqwen-code.flash_fallback: This event occurs when Qwen Code switches to flash as fallback.
auth_typeqwen-code.slash_command: This event occurs when a user executes a slash command.
command (string)subcommand (string, if applicable)qwen-code.extension_enable: This event occurs when an extension is enabled
qwen-code.extension_install: This event occurs when an extension is installed
extension_name (string)extension_version (string)extension_source (string)status (string)qwen-code.extension_uninstall: This event occurs when an extension is uninstalled
Metrics are numerical measurements of behavior over time. The following metrics are collected for Qwen Code (metric names remain qwen-code.* for compatibility):
qwen-code.session.count (Counter, Int): Incremented once per CLI startup.
qwen-code.tool.call.count (Counter, Int): Counts tool calls.
function_namesuccess (boolean)decision (string: "accept", "reject", or "modify", if applicable)tool_type (string: "mcp", or "native", if applicable)qwen-code.tool.call.latency (Histogram, ms): Measures tool call latency.
function_namedecision (string: "accept", "reject", or "modify", if applicable)qwen-code.api.request.count (Counter, Int): Counts all API requests.
modelstatus_codeerror_type (if applicable)qwen-code.api.request.latency (Histogram, ms): Measures API request latency.
modelqwen-code.token.usage (Counter, Int): Counts the number of tokens used.
modeltype (string: "input", "output", "thought", or "cache")qwen-code.file.operation.count (Counter, Int): Counts file operations.
operation (string: "create", "read", "update"): The type of file operation.lines (Int, if applicable): Number of lines in the file.mimetype (string, if applicable): Mimetype of the file.extension (string, if applicable): File extension of the file.model_added_lines (Int, if applicable): Number of lines added/changed by the model.model_removed_lines (Int, if applicable): Number of lines removed/changed by the model.user_added_lines (Int, if applicable): Number of lines added/changed by user in AI proposed changes.user_removed_lines (Int, if applicable): Number of lines removed/changed by user in AI proposed changes.programming_language (string, if applicable): The programming language of the file.qwen-code.chat_compression (Counter, Int): Counts chat compression operations
tokens_before: (Int): Number of tokens in context prior to compressiontokens_after: (Int): Number of tokens in context after compression