97 97
98## 設定詳細資訊98## 設定詳細資訊
99 99
100### 常見設定變數100### 常用設定變數
101 101
102這些變數為所有部署設定匯出器、端點和匯出行為。102這些變數為所有部署設定匯出器、端點和匯出行為。
103 103
104如果您設定了每個信號的端點或協議變數,例如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`,Claude Code 會改用它而不是該信號的通用變數。如果您設定了每個信號的標頭變數,例如 `OTEL_EXPORTER_OTLP_METRICS_HEADERS`,Claude Code 會將其與該信號的通用 `OTEL_EXPORTER_OTLP_HEADERS` 合併。104如果您設定了個別訊號的端點或通訊協定變數(例如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`),Claude Code 會針對該訊號使用它,而不使用通用變數。如果您設定了個別訊號的標頭變數(例如 `OTEL_EXPORTER_OTLP_METRICS_HEADERS`),Claude Code 會針對該訊號將其與通用的 `OTEL_EXPORTER_OTLP_HEADERS` 合併。
105 105
106在具有受管設定的機器上,請參閱[受管設定如何鎖定 OTLP 目的地](#how-managed-settings-lock-the-otlp-destination)以了解 Claude Code 移除的內容。106在具有受管設定的機器上,請參閱[受管設定如何鎖定 OTLP 目的地](#how-managed-settings-lock-the-otlp-destination),以了解 Claude Code 會移除哪些內容。
107 107
108| 環境變數 | 說明 | 範例值 |108| 環境變數 | 說明 | 範例值 |
109| - | - | - |109| - | - | - |
110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 啟用遙測收集(必需) | `1` |110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 啟用遙測收集(必要) | `1` |
111| `OTEL_METRICS_EXPORTER` | 指標匯出器類型,以逗號分隔。使用 `none` 停用 | `console`、`otlp`、`prometheus`、`none` |111| `OTEL_METRICS_EXPORTER` | 指標匯出器類型,以逗號分隔。使用 `none` 停用 | `console`, `otlp`, `prometheus`, `none` |
112| `OTEL_LOGS_EXPORTER` | 日誌/事件匯出器類型,以逗號分隔。使用 `none` 停用 | `console`、`otlp`、`none` |112| `OTEL_LOGS_EXPORTER` | 日誌/事件匯出器類型,以逗號分隔。使用 `none` 停用 | `console`, `otlp`, `none` |
113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 匯出器的協議,適用於所有信號。Claude Code 沒有預設協議,因此請為您啟用的每個 `otlp` 匯出器設定此項或信號特定的協議變數 | `grpc`、`http/json`、`http/protobuf` |113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 匯出器的通訊協定,套用於所有訊號。對於有效的 `http://` 或 `https://` 端點,預設為 `http/protobuf`。對於 gRPC 端點(例如 `http://localhost:4317`),請將此設為 `grpc`。此預設值需要 Claude Code v2.1.323 或更新版本 | `grpc`, `http/json`, `http/protobuf` |
114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有信號的 OTLP 收集器端點 | `http://localhost:4317` |114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有訊號的 OTLP 收集器端點 | `http://localhost:4317` |
115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指標的協議,覆蓋通用設定 | `grpc`、`http/json`、`http/protobuf` |115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指標的通訊協定,覆寫一般設定 | `grpc`, `http/json`, `http/protobuf` |
116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指標端點,覆蓋通用設定 | `http://localhost:4318/v1/metrics` |116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指標端點,覆寫一般設定 | `http://localhost:4318/v1/metrics` |
117| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | 日誌的協議,覆蓋通用設定 | `grpc`、`http/json`、`http/protobuf` |117| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | 日誌的通訊協定,覆寫一般設定 | `grpc`, `http/json`, `http/protobuf` |
118| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | OTLP 日誌端點,覆蓋通用設定 | `http://localhost:4318/v1/logs` |118| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | OTLP 日誌端點,覆寫一般設定 | `http://localhost:4318/v1/logs` |
119| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP 的驗證標頭 | `Authorization=Bearer token` |119| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP 的身分驗證標頭 | `Authorization=Bearer token` |
120| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 指標的驗證標頭,與通用標頭合併 | `Authorization=Bearer token` |120| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 指標的身分驗證標頭,會與一般標頭合併 | `Authorization=Bearer token` |
121| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 日誌的驗證標頭,與通用標頭合併 | `Authorization=Bearer token` |121| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 日誌的身分驗證標頭,會與一般標頭合併 | `Authorization=Bearer token` |
122| `OTEL_METRIC_EXPORT_INTERVAL` | 匯出間隔(毫秒)(預設值:60000) | `5000`、`60000` |122| `OTEL_METRIC_EXPORT_INTERVAL` | 匯出間隔,以毫秒為單位(預設:60000) | `5000`, `60000` |
123| `OTEL_LOGS_EXPORT_INTERVAL` | 日誌匯出間隔(毫秒)(預設值:5000) | `1000`、`10000` |123| `OTEL_LOGS_EXPORT_INTERVAL` | 日誌匯出間隔,以毫秒為單位(預設:5000) | `1000`, `10000` |
124| `OTEL_LOG_USER_PROMPTS` | 啟用使用者提示內容的日誌記錄(預設值:停用) | `1` 啟用 |124| `OTEL_LOG_USER_PROMPTS` | 啟用使用者提示詞內容的日誌記錄(預設:停用) | `1` 以啟用 |
125| `OTEL_LOG_ASSISTANT_RESPONSES` | 在 `assistant_response` 事件上啟用助手回應文字的日誌記錄(預設值:停用)。未設定時,回退到 `OTEL_LOG_USER_PROMPTS` 的值 | `1` 啟用,`0` 保持編輯 |125| `OTEL_LOG_ASSISTANT_RESPONSES` | 在 `assistant_response` 事件上啟用助理回應文字的日誌記錄(預設:停用)。未設定時,會改用 `OTEL_LOG_USER_PROMPTS` 的值 | `1` 以啟用,`0` 以維持遮蔽 |
126| `OTEL_LOG_TOOL_DETAILS` | 在工具事件和追蹤跨度屬性中啟用工具參數和輸入引數的日誌記錄:Bash 命令、MCP 伺服器和工具名稱、技能名稱、使用者撰寫的工作流程名稱和工具輸入。也在 `user_prompt` 事件上啟用自訂、外掛程式和 MCP 命令名稱,以及在[成本和令牌計數器](#cost-counter)上啟用真實代理、技能、外掛程式和 MCP 伺服器和工具名稱(預設值:停用)。對於 Claude Desktop 的內建伺服器,在 Claude Desktop 擁有的工作階段中,即使關閉旗標,`mcp_server_name`/`mcp_tool_name` 也會在 `tool_decision`/`tool_result` 上發出。例外需要 Claude Code v2.1.214 或更新版本 | `1` 啟用 |126| `OTEL_LOG_TOOL_DETAILS` | 在工具事件和追蹤 span 屬性中啟用工具參數與輸入引數的日誌記錄:Bash 命令、MCP 伺服器與工具名稱、skill 名稱、使用者撰寫的工作流程名稱,以及工具輸入。也會在 `user_prompt` 事件上啟用自訂、外掛和 MCP 命令名稱,並在[成本與 token 計數器](#cost-counter)上啟用真實的 agent、skill、外掛、MCP 伺服器與工具名稱(預設:停用)。對於 Claude Desktop 的內建伺服器,在 Claude Desktop 擁有的工作階段中,即使此旗標關閉,`mcp_server_name`/`mcp_tool_name` 仍會在 `tool_decision`/`tool_result` 上發出。此例外需要 Claude Code v2.1.214 或更新版本 | `1` 以啟用 |
127| `OTEL_LOG_TOOL_CONTENT` | 在 [`tool.output` 跨度事件](#tool-output-span-event)中啟用工具內容的日誌記錄(預設值:停用)。跨度屬性在[其自己的閘門](#new-context-gates)下攜帶工具內容。需要[追蹤](#traces-beta)。內容在內容限制處截斷(預設值 60 KB) | `1` 啟用 |127| `OTEL_LOG_TOOL_CONTENT` | 在 [`tool.output` span 事件](#tool-output-span-event)中啟用工具內容的日誌記錄(預設:停用)。Span 屬性會依[其各自的閘控](#new-context-gates)攜帶工具內容。需要[追蹤](#traces-beta)。內容會在內容上限(預設為 60 KB)處截斷 | `1` 以啟用 |
128| `OTEL_LOG_MANAGED_SETTINGS` | 將編輯的受管設定和設定編輯前的 SHA-256 摘要新增至[受管設定已解決](#managed-settings-resolved-event)事件(預設值:停用)。專案或本機設定中的值不會將其開啟。需要 Claude Code v2.1.274 或更新版本 | `1` 啟用 |128| `OTEL_LOG_MANAGED_SETTINGS` | 將已遮蔽的受管設定,以及遮蔽前設定的 SHA-256 摘要,加入 [managed settings resolved](#managed-settings-resolved-event) 事件(預設:停用)。專案或本機設定中的值不會啟用它。需要 Claude Code v2.1.274 或更新版本 | `1` 以啟用 |
129| `OTEL_LOG_RAW_API_BODIES` | 將完整的 Anthropic Messages API 請求和回應 JSON 作為 `api_request_body` / `api_response_body` 日誌事件發出(預設值:停用)。主體包括整個對話歷史記錄。啟用此項意味著同意 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_DETAILS` 和 `OTEL_LOG_TOOL_CONTENT` 會揭露的所有內容 | `1` 用於在內容限制處截斷的內聯主體(預設值 60 KB),或 `file:<dir>` 用於磁碟上的未截斷主體,在事件中帶有 `body_ref` 指標 |129| `OTEL_LOG_RAW_API_BODIES` | 將完整的 Anthropic Messages API 請求與回應 JSON 以 `api_request_body` / `api_response_body` 日誌事件發出(預設:停用)。主體包含完整的對話歷程。啟用此項即表示同意揭露 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_DETAILS` 和 `OTEL_LOG_TOOL_CONTENT` 會揭露的所有內容 | `1` 表示內嵌主體,並在內容上限(預設為 60 KB)處截斷;或 `file:<dir>` 表示將未截斷的主體存放在磁碟上,並在事件中附上 `body_ref` 指標 |
130| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 內容限制:內容承載屬性(例如模型回應、工具內容、系統提示詞和原始 API 主體)的最大長度,包括截斷標記,以 UTF-16 程式碼單位計(預設值:61440,即 60 KB)。預設值適用於將屬性值上限設為 64 KB 的後端;只有在您的後端接受更大的值時才提高它,或降低它以減少遙測量。當設定了 OpenTelemetry SDK 屬性限制 `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 或其日誌記錄和跨度變體之一且其值較小時,Claude Code 會在該較小的值處截斷,以便 `[TRUNCATED ...]` 標記保持在 SDK 限制內 | `262144` |130| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 內容上限:攜帶內容之屬性(例如模型回應、工具內容、系統提示詞和原始 API 主體)的最大長度,包含截斷標記,以 UTF-16 碼元為單位(預設:61440,即 60 KB)。預設值是針對將屬性值上限設為 64 KB 的後端而訂定;僅在您的後端接受更大的值時才調高,或調低以減少遙測量。當 OpenTelemetry SDK 屬性上限(`OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 或其 logrecord 與 span 變體之一)設定得更低時,Claude Code 會在該較小的值處截斷,讓 `[TRUNCATED ...]` 標記維持在 SDK 上限之內 | `262144` |
131| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 指標時間性偏好(預設值:`delta`)。如果您的後端期望累積時間性,請設定為 `cumulative` | `delta`、`cumulative` |131| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 指標時間性偏好(預設:`delta`)。如果您的後端預期累積時間性,請設為 `cumulative` | `delta`, `cumulative` |
132| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 重新整理動態標頭的間隔(預設值:1740000ms / 29 分鐘) | `900000` |132| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 重新整理動態標頭的間隔(預設:1740000ms / 29 分鐘) | `900000` |
133 133
134對於 `http/protobuf` 和 `http/json` 協議,Claude Code 會使用 `Content-Length` 標頭傳送每個匯出請求。134對於 `http/protobuf` 和 `http/json` 通訊協定,Claude Code 會在每個匯出請求中附上 `Content-Length` 標頭。
135 135
136### mTLS 驗證136### mTLS 身分驗證
137 137
138您如何為 OTLP 匯出器設定用戶端憑證取決於用於該信號的 OTLP 協議,透過 `OTEL_EXPORTER_OTLP_PROTOCOL` 或每個信號的覆蓋設定。相同的設定適用於指標、日誌和追蹤。138如何為 OTLP 匯出器設定用戶端憑證,取決於該訊號所使用的 OTLP 通訊協定,此通訊協定透過 `OTEL_EXPORTER_OTLP_PROTOCOL` 或個別訊號的覆寫來設定。相同的設定適用於指標、日誌和追蹤。
139 139
140| 協議 | 用戶端憑證變數 | 信任收集器的 CA 使用 |140| 通訊協定 | 用戶端憑證變數 | 用以信任收集器 CA 的變數 |
141| :- | :- | :- |141| :- | :- | :- |
142| `http/protobuf`、`http/json` | `CLAUDE_CODE_CLIENT_CERT`、`CLAUDE_CODE_CLIENT_KEY` 和選擇性的 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`。請參閱[網路設定](https://code.claude.com/docs/zh-TW/network-config.md#mtls-authentication) | `NODE_EXTRA_CA_CERTS` |142| `http/protobuf`, `http/json` | `CLAUDE_CODE_CLIENT_CERT`、`CLAUDE_CODE_CLIENT_KEY`,以及選用的 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`。請參閱[網路設定](https://code.claude.com/docs/zh-TW/network-config.md#mtls-authentication) | `NODE_EXTRA_CA_CERTS` |
143| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 和 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`,或每個信號的變體,例如 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` 以針對每個信號使用不同的憑證 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |143| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 和 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`,或個別訊號的變體(例如 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY`),以便為每個訊號使用不同的憑證 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |
144 144
145對於 `grpc`,OpenTelemetry SDK 直接讀取標準 OTLP 變數,因此設定每個信號指標變數的現有設定會繼續運作。在具有受管設定的機器上,Claude Code [可能在啟動時移除開發人員設定的每個信號認證和端點](#how-managed-settings-lock-the-otlp-destination)。145對於 `grpc`,OpenTelemetry SDK 會直接讀取標準 OTLP 變數,因此設定了個別訊號指標變數的現有設定仍可繼續運作。在具有受管設定的機器上,Claude Code 可能會在啟動時[移除開發人員設定的個別訊號憑證與端點](#how-managed-settings-lock-the-otlp-destination)。
146 146
147### 指標基數控制147### 指標基數控制
148 148
149以下環境變數控制指標和事件中包含哪些屬性以管理基數:149下列環境變數控制哪些屬性會包含在指標和事件中,以管理基數:
150 150
151| 環境變數 | 說明 | 預設值 | 停用範例 |151| 環境變數 | 說明 | 預設值 | 停用範例 |
152| - | - | - | - |152| - | - | - | - |
153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指標和事件中包含 session.id 和雲端工作階段的 ccr.session.id 屬性 | `true` | `false` |153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指標和事件中包含 session.id 以及雲端工作階段的 ccr.session.id 屬性 | `true` | `false` |
154| `OTEL_METRICS_INCLUDE_VERSION` | 在指標和事件中包含 app.version 屬性 | `false` | `true` |154| `OTEL_METRICS_INCLUDE_VERSION` | 在指標和事件中包含 app.version 屬性 | `false` | `true` |
155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指標和事件中包含 user.account\_uuid 和 user.account\_id 屬性 | `true` | `false` |155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指標和事件中包含 user.account\_uuid 和 user.account\_id 屬性 | `true` | `false` |
156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指標和事件中包含 app.entrypoint 屬性 | `false` | `true` |156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指標和事件中包含 app.entrypoint 屬性 | `false` | `true` |
157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 將 `OTEL_RESOURCE_ATTRIBUTES` 中的金鑰作為屬性包含在指標資料點和事件上 | `true` | `false` |157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 將 `OTEL_RESOURCE_ATTRIBUTES` 中的鍵作為屬性包含在指標資料點和事件上 | `true` | `false` |
158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 在指標和事件上包含 `vcs.*` [儲存庫身分屬性](#repository-attributes)。需要 Claude Code v2.1.269 或更新版本 | `false` | `true` |158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 在指標和事件上包含 `vcs.*` [儲存庫識別屬性](#repository-attributes)。需要 Claude Code v2.1.269 或更新版本 | `false` | `true` |
159 159
160較低的基數通常意味著更好的效能和更低的儲存成本,但分析的資料粒度較低。160較低的基數通常代表較佳的效能與較低的儲存成本,但用於分析的資料粒度也較粗。
161 161
162### Traces(測試版)162### 追蹤(beta)
163 163
164分散式追蹤匯出跨度,將每個使用者提示連結到它觸發的 API 請求和工具執行,因此您可以在追蹤後端中將完整請求檢視為單一追蹤。164分散式追蹤會匯出 span,將每個使用者提示詞連結到其觸發的 API 請求與工具執行,讓您可以在追蹤後端中將完整的請求檢視為單一追蹤。
165 165
166追蹤預設為關閉。若要啟用它,請同時設定 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 和 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`,然後設定 `OTEL_TRACES_EXPORTER` 以選擇跨度的傳送位置。追蹤重複使用[常見 OTLP 設定](#common-configuration-variables)以取得端點、協議、標頭和 [mTLS](#mtls-authentication)。在具有受管設定的機器上,Claude Code [可能在啟動時移除開發人員設定的每個信號認證和端點](#how-managed-settings-lock-the-otlp-destination)。166追蹤預設為關閉。若要啟用,請同時設定 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 和 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`,然後設定 `OTEL_TRACES_EXPORTER` 以選擇 span 的傳送目的地。追蹤會沿用[通用 OTLP 設定](#common-configuration-variables)中的端點、通訊協定、標頭和 [mTLS](#mtls-authentication)。在具有受管設定的機器上,Claude Code 可能會在啟動時[移除開發人員設定的個別訊號憑證與端點](#how-managed-settings-lock-the-otlp-destination)。
167 167
168| 環境變數 | 說明 | 範例值 |168| 環境變數 | 說明 | 範例值 |
169| - | - | - |169| - | - | - |
170| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 啟用跨度追蹤(必需)。也接受 `ENABLE_ENHANCED_TELEMETRY_BETA` | `1` |170| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 啟用 span 追蹤(必要)。也接受 `ENABLE_ENHANCED_TELEMETRY_BETA` | `1` |
171| `OTEL_TRACES_EXPORTER` | 追蹤匯出器類型,以逗號分隔。使用 `none` 停用 | `console`、`otlp`、`none` |171| `OTEL_TRACES_EXPORTER` | 追蹤匯出器類型,以逗號分隔。使用 `none` 停用 | `console`, `otlp`, `none` |
172| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 追蹤的協議,覆蓋 `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`、`http/json`、`http/protobuf` |172| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 追蹤的通訊協定,覆寫 `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`, `http/json`, `http/protobuf` |
173| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 追蹤端點,覆蓋 `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |173| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 追蹤端點,覆寫 `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |
174| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | 追蹤的驗證標頭,與 `OTEL_EXPORTER_OTLP_HEADERS` 合併 | `Authorization=Bearer token` |174| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | 追蹤的身分驗證標頭,會與 `OTEL_EXPORTER_OTLP_HEADERS` 合併 | `Authorization=Bearer token` |
175| `OTEL_TRACES_EXPORT_INTERVAL` | 跨度批次匯出間隔(毫秒)(預設值:5000) | `1000`、`10000` |175| `OTEL_TRACES_EXPORT_INTERVAL` | Span 批次匯出間隔,以毫秒為單位(預設:5000) | `1000`, `10000` |
176 176
177跨度預設會編輯使用者提示文字、工具輸入詳細資訊和工具內容。設定 `OTEL_LOG_USER_PROMPTS=1`、`OTEL_LOG_TOOL_DETAILS=1` 和 `OTEL_LOG_TOOL_CONTENT=1` 以包含它們。177Span 預設會遮蔽使用者提示詞文字、工具輸入詳細資訊和工具內容。設定 `OTEL_LOG_USER_PROMPTS=1`、`OTEL_LOG_TOOL_DETAILS=1` 和 `OTEL_LOG_TOOL_CONTENT=1` 即可將其包含在內。
178 178
179當追蹤處於作用中時,Bash 和 PowerShell 子程序會自動繼承包含作用中工具執行跨度的 W3C 追蹤內容的 `TRACEPARENT` 環境變數。這讓任何讀取 `TRACEPARENT` 的子程序都可以在相同追蹤下將其自己的跨度作為父項,啟用透過 Claude 執行的指令碼和命令的端對端分散式追蹤。179追蹤啟用時,Bash 和 PowerShell 子程序會自動繼承 `TRACEPARENT` 環境變數,其中包含作用中工具執行 span 的 W3C 追蹤上下文。這讓任何讀取 `TRACEPARENT` 的子程序都能將自己的 span 掛在同一個追蹤之下,從而透過 Claude 執行的指令碼和命令實現端對端分散式追蹤。
180 180
181當追蹤處於作用中且 Claude Code 直接連線到 Anthropic API 時,每個模型請求都會攜帶設定為 `claude_code.llm_request` 跨度內容的 W3C `traceparent` 標頭,API 的 `traceresponse` 標頭會記錄為跨度連結。這些一起透過任何相容的中介將 Claude Code 的用戶端跨度連線到伺服器端追蹤。出站 HTTP MCP 請求以相同方式攜帶 `traceparent`。標頭不會傳送給第三方提供者。181當追蹤啟用且 Claude Code 直接連線至 Anthropic API 時,每個模型請求都會攜帶一個 W3C `traceparent` 標頭,其值設為 `claude_code.llm_request` span 的上下文,而 API 的 `traceresponse` 標頭則會記錄為 span 連結。兩者共同透過任何相容的中介,將 Claude Code 的用戶端 span 連接到伺服器端的追蹤。對外的 HTTP MCP 請求也會以相同方式攜帶 `traceparent`。此標頭不會傳送給第三方供應商。
182 182
183預設情況下,模型和 HTTP MCP 請求上的 `traceparent` 標頭僅在 `ANTHROPIC_BASE_URL` 未設定或指向 Anthropic API 時傳送,因為某些代理會拒絕無法識別的標頭。子程序 `TRACEPARENT` 變數由相同的開關控制以保持一致性。如果您透過自訂 `ANTHROPIC_BASE_URL` 代理執行 Claude Code 並想要傳播追蹤內容,請設定 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`。183預設情況下,模型請求與 HTTP MCP 請求上的 `traceparent` 標頭僅在 `ANTHROPIC_BASE_URL` 未設定或指向 Anthropic API 時才會傳送,因為部分代理伺服器會拒絕無法辨識的標頭。為求一致,子程序的 `TRACEPARENT` 變數也由同一個開關控制。如果您透過自訂的 `ANTHROPIC_BASE_URL` 代理伺服器執行 Claude Code,並希望傳播追蹤上下文,請設定 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`。
184 184
185在 Agent SDK 和使用 `-p` 啟動的非互動式工作階段中,Claude Code 也會在啟動每個互動跨度時從其自己的環境讀取 `TRACEPARENT` 和 `TRACESTATE`。這讓嵌入程序將其作用中的 W3C 追蹤內容傳遞到子程序中,以便 Claude Code 的跨度顯示為呼叫者分散式追蹤的子項。互動式工作階段會忽略入站 `TRACEPARENT` 以避免意外繼承來自 CI 或容器環境的環境值。185在 Agent SDK 以及以 `-p` 啟動的非互動式工作階段中,Claude Code 在啟動每個互動 span 時,也會從自身環境讀取 `TRACEPARENT` 和 `TRACESTATE`。這讓嵌入的程序能將其作用中的 W3C 追蹤上下文傳入子程序,使 Claude Code 的 span 顯示為呼叫端分散式追蹤的子項。互動式工作階段會忽略傳入的 `TRACEPARENT`,以避免意外繼承來自 CI 或容器環境的既有值。
186 186
187入站追蹤內容也適用於[事件](#events)。在設定了 `TRACEPARENT` 的 Agent SDK 和 `-p` 工作階段中,每個 OTLP 事件日誌記錄都會攜帶 `trace_id` 和 `span_id` 值,將其連結到您的應用程式追蹤,即使未設定追蹤匯出器,您的日誌後端也可以將事件與追蹤的其餘部分相關聯。187傳入的追蹤上下文也適用於[事件](#events)。在設定了 `TRACEPARENT` 的 Agent SDK 和 `-p` 工作階段中,每筆 OTLP 事件日誌記錄都會攜帶 `trace_id` 和 `span_id` 值,將其連結到您應用程式的追蹤,即使未設定追蹤匯出器亦然,讓您的日誌後端能將事件與追蹤的其餘部分建立關聯。
188 188
189在互動跨度作用中時發出的記錄會攜帶互動跨度的 ID,即使 Claude Code 在跨度的非同步內容外發出它,例如在權限提示回呼或在啟動期間緩衝並稍後匯出的記錄中。在沒有作用中互動跨度的情況下發出的記錄會直接攜帶入站 `TRACEPARENT` ID。189在互動進行中發出的記錄會攜帶互動 span 的 ID,即使 Claude Code 是在 span 的非同步上下文之外發出它亦然,例如在權限提示的回呼中,或是啟動期間緩衝、稍後才匯出的記錄。在沒有作用中互動 span 時發出的記錄,則會直接攜帶傳入的 `TRACEPARENT` ID。
190 190
191#### 跨度階層191#### Span 階層
192 192
193每個使用者提示啟動一個 `claude_code.interaction` 根跨度。API 呼叫、工具呼叫和 hook 執行會記錄為其子項。工具跨度有兩個自己的子跨度:一個用於等待權限決定所花費的時間,一個用於執行本身。當 Agent 工具或舊版 Task 工具產生子代理時,子代理的 API 和工具跨度會巢狀在父項的 `claude_code.tool` 跨度下。193每個使用者提示詞都會啟動一個 `claude_code.interaction` 根 span。API 呼叫、工具呼叫和 hook 執行會記錄為其子項。工具 span 本身有兩個子 span:一個記錄等待權限決定所花的時間,另一個記錄執行本身。當 Agent 工具(或舊版的 Task 工具)產生 subagent 時,subagent 的 API 與工具 span 會巢狀於父項的 `claude_code.tool` span 之下。
194 194
195```text theme={null}195```text theme={null}
196claude_code.interaction196claude_code.interaction
202 └── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans202 └── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans
203```203```
204 204
205在 Agent SDK 和 `claude -p` 工作階段中,當環境中設定了 `TRACEPARENT` 時,`claude_code.interaction` 本身會成為呼叫者跨度的子項。205在 Agent SDK 和 `claude -p` 工作階段中,當環境中設定了 `TRACEPARENT` 時,`claude_code.interaction` 本身會成為呼叫端 span 的子項。
206 206
207當 `PreToolUse` hook [延遲工具呼叫](https://code.claude.com/docs/zh-TW/hooks.md#defer-a-tool-call-for-later)時,Claude Code 會儲存延遲它的轉向的追蹤內容。當您恢復工作階段且工具重新執行時,工具的跨度會作為該較早轉向的 `claude_code.interaction` 跨度的子項加入該較早轉向的追蹤。207當 `PreToolUse` hook [延後某個工具呼叫](https://code.claude.com/docs/zh-TW/hooks.md#defer-a-tool-call-for-later)時,Claude Code 會儲存延後該呼叫之回合的追蹤上下文。當您繼續該工作階段且工具重新執行時,工具的 span 會加入先前那個回合的追蹤,成為該回合 `claude_code.interaction` span 的子項。
208 208
209#### 跨度屬性209#### Span 屬性
210 210
211每個跨度都會攜帶[標準屬性](#standard-attributes)加上與其名稱相符的 `span.type` 屬性。下表列出在每個跨度上設定的其他屬性。`llm_request`、`tool.execution` 和 `hook` 跨度在記錄失敗時設定 OpenTelemetry 狀態 `ERROR`;其他跨度始終以狀態 `UNSET` 結束。211每個 span 都攜帶[標準屬性](#standard-attributes),外加一個與其名稱相符的 `span.type` 屬性。下表列出每個 span 上設定的其他屬性。`llm_request`、`tool.execution` 和 `hook` span 在記錄到失敗時會設定 OpenTelemetry 狀態 `ERROR`;其他 span 一律以狀態 `UNSET` 結束。
212 212
213**`claude_code.interaction`**213**`claude_code.interaction`**
214 214
215| 屬性 | 說明 | 由以下閘門控制 |215| 屬性 | 說明 | 閘控變數 |
216| - | - | - |216| - | - | - |
217| `user_prompt` | 提示文字。除非設定了閘門,否則值為 `<REDACTED>` | `OTEL_LOG_USER_PROMPTS` |217| `user_prompt` | 提示詞文字。除非設定了閘控變數,否則值為 `<REDACTED>` | `OTEL_LOG_USER_PROMPTS` |
218| `user_prompt_length` | 提示長度(字元) | |218| `user_prompt_length` | 提示詞長度(以字元計) | |
219| `interaction.sequence` | 互動的 1 為基礎計數器,按 Claude Code 程序而不是按工作階段計數,如 [`event.sequence`](#event-correlation-attributes) 所述 | |219| `interaction.sequence` | 從 1 起算的互動計數器,依每個 Claude Code 程序而非每個工作階段計數,如 [`event.sequence`](#event-correlation-attributes) 所述 | |
220| `parent.source` | 跨度如何獲得其追蹤父項:當它以入站 `TRACEPARENT` 為父項時為 `env`,當它啟動自己的追蹤時為 `none`。需要 Claude Code v2.1.268 或更新版本 | |220| `parent.source` | 此 span 取得其追蹤父項的方式:當它掛在傳入的 `TRACEPARENT` 之下時為 `env`,當它啟動自己的追蹤時為 `none`。需要 Claude Code v2.1.268 或更新版本 | |
221| `interaction.duration_ms` | 轉向的掛鐘持續時間 | |221| `interaction.duration_ms` | 該回合的實際經過時間 | |
222 222
223**`claude_code.llm_request`**223**`claude_code.llm_request`**
224 224
225| 屬性 | 說明 | 由以下閘門控制 |225| 屬性 | 說明 | 閘控變數 |
226| - | - | - |226| - | - | - |
227| `model` | 模型識別碼 | |227| `model` | 模型識別碼 | |
228| `gen_ai.system` | 始終為 `anthropic`。OpenTelemetry GenAI 語義慣例 | |228| `gen_ai.system` | 一律為 `anthropic`。OpenTelemetry GenAI 語意慣例 | |
229| `gen_ai.request.model` | 與 `model` 相同的值。OpenTelemetry GenAI 語義慣例 | |229| `gen_ai.request.model` | 與 `model` 的值相同。OpenTelemetry GenAI 語意慣例 | |
230| `query_source` | 發出請求的子系統,例如 `repl_main_thread` 或子代理名稱 | `ENABLE_BETA_TRACING_DETAILED` |230| `query_source` | 發出請求的子系統,例如 `repl_main_thread` 或 subagent 名稱 | `ENABLE_BETA_TRACING_DETAILED` |
231| `query_source_safe` | `query_source` 的有界形式,無論詳細測試版追蹤是否作用中都會發出,具有 `repl_main_thread` 或 `agent.builtin.general-purpose` 等值。`:` 變成 `.`,使用者命名的代理顯示為 `agent.custom`。需要 Claude Code v2.1.268 或更新版本 | |231| `query_source_safe` | `query_source` 的有限值形式,無論詳細 beta 追蹤是否啟用都會發出,其值例如 `repl_main_thread` 或 `agent.builtin.general-purpose`。`:` 會變成 `.`,使用者命名的 agent 會顯示為 `agent.custom`。需要 Claude Code v2.1.268 或更新版本 | |
232| `agent_id` | 發出請求的子代理或隊友的識別碼。在主工作階段上不存在 | |232| `agent_id` | 發出請求的 subagent 或隊友的識別碼。在主工作階段上不存在 | |
233| `parent_agent_id` | 產生此代理的代理的識別碼。對於主工作階段和直接從其產生的代理不存在 | |233| `parent_agent_id` | 產生此 agent 之 agent 的識別碼。對於主工作階段以及直接由其產生的 agent 不存在 | |
234| `workflow.run_id` | 產生此代理的[工作流程](https://code.claude.com/docs/zh-TW/workflows.md)工具執行的執行識別碼,前綴為 `wf_`。對於不是由工作流程產生的代理不存在 | |234| `workflow.run_id` | 產生此 agent 的 [Workflow](https://code.claude.com/docs/zh-TW/workflows.md) 工具執行之執行識別碼,前綴為 `wf_`。對於非由工作流程產生的 agent 不存在 | |
235| `workflow.name` | 產生此代理的工作流程的名稱。使用者撰寫的名稱會被替換為 `custom`,除非設定了閘門 | `OTEL_LOG_TOOL_DETAILS` |235| `workflow.name` | 產生此 agent 之工作流程的名稱。除非設定了閘控變數,否則使用者撰寫的名稱會被替換為 `custom` | `OTEL_LOG_TOOL_DETAILS` |
236| `speed` | `fast` 或 `normal` | |236| `speed` | `fast` 或 `normal` | |
237| `effort` | 套用於請求的[努力等級](https://code.claude.com/docs/zh-TW/model-config.md#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。當 Claude Code 不傳送努力等級時不存在,例如在不支援努力的模型上。需要 Claude Code v2.1.274 或更新版本 | |237| `effort` | 套用於請求的 [effort 等級](https://code.claude.com/docs/zh-TW/model-config.md#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。當 Claude Code 未傳送 effort 等級時不存在,例如在不支援 effort 的模型上。需要 Claude Code v2.1.274 或更新版本 | |
238| `llm_request.context` | `interaction`、`tool` 或 `standalone`,取決於父跨度 | |238| `llm_request.context` | 依父 span 而定,為 `interaction`、`tool` 或 `standalone` | |
239| `duration_ms` | 包括重試的掛鐘持續時間 | |239| `duration_ms` | 包含重試在內的實際經過時間 | |
240| `ttft_ms` | 首個令牌的時間(毫秒) | |240| `ttft_ms` | 第一個 token 的產生時間,以毫秒為單位 | |
241| `first_content_ms` | 從請求開始到成功嘗試的第一個內容區塊的時間(毫秒)。在回退到非串流路徑的請求上不存在。需要 Claude Code v2.1.268 或更新版本 | |241| `first_content_ms` | 從請求開始到成功嘗試的第一個內容區塊所經過的時間,以毫秒為單位。在改走非串流路徑的請求上不存在。需要 Claude Code v2.1.268 或更新版本 | |
242| `input_tokens` | 來自 API 使用區塊的輸入 token 計數。不包括從提示詞快取讀取或寫入提示詞快取的 token,這些會在 `cache_read_tokens` 和 `cache_creation_tokens` 中報告 | |242| `input_tokens` | 來自 API 用量區塊的輸入 token 數。不包含從提示詞快取讀取或寫入的 token,這些會在 `cache_read_tokens` 和 `cache_creation_tokens` 中回報 | |
243| `output_tokens` | 輸出令牌計數 | |243| `output_tokens` | 輸出 token 數 | |
244| `cache_read_tokens` | 從提示快取讀取的令牌 | |244| `cache_read_tokens` | 從提示詞快取讀取的 token | |
245| `cache_creation_tokens` | 寫入提示快取的令牌 | |245| `cache_creation_tokens` | 寫入提示詞快取的 token | |
246| `request_id` | API 請求 ID。與 `request_id` [事件相關屬性](#event-correlation-attributes)相同的值 | |246| `request_id` | API 請求 ID。與 `request_id` [事件關聯屬性](#event-correlation-attributes)的值相同 | |
247| `gen_ai.response.id` | 與 `request_id` 相同的值。OpenTelemetry GenAI 語義慣例 | |247| `gen_ai.response.id` | 與 `request_id` 的值相同。OpenTelemetry GenAI 語意慣例 | |
248| `client_request_id` | 最終嘗試的用戶端產生的 `x-client-request-id` | |248| `client_request_id` | 最後一次嘗試由用戶端產生的 `x-client-request-id` | |
249| `attempt` | 為此請求進行的總嘗試次數 | |249| `attempt` | 此請求的總嘗試次數 | |
250| `success` | `true` 或 `false` | |250| `success` | `true` 或 `false` | |
251| `status_code` | 請求失敗時的 HTTP 狀態碼 | |251| `status_code` | 請求失敗時的 HTTP 狀態碼 | |
252| `error` | 請求失敗時的錯誤訊息 | |252| `error` | 請求失敗時的錯誤訊息 | |
253| `error_class` | 請求失敗時的簡短錯誤類別令牌,例如 `api_timeout` 或 `server_overload`。需要 Claude Code v2.1.268 或更新版本 | |253| `error_class` | 請求失敗時的簡短錯誤類別 token,例如 `api_timeout` 或 `server_overload`。需要 Claude Code v2.1.268 或更新版本 | |
254| `response.has_tool_call` | 當回應包含工具使用區塊時為 `true` | |254| `response.has_tool_call` | 當回應包含工具使用區塊時為 `true` | |
255| `stop_reason` | API 回應 `stop_reason`,例如 `end_turn`、`tool_use`、`max_tokens`、`stop_sequence`、`pause_turn` 或 `refusal` | |255| `stop_reason` | API 回應的 `stop_reason`,例如 `end_turn`、`tool_use`、`max_tokens`、`stop_sequence`、`pause_turn` 或 `refusal` | |
256| `gen_ai.response.finish_reasons` | 與 `stop_reason` 相同的值,包裝在字串陣列中。OpenTelemetry GenAI 語義慣例 | |256| `gen_ai.response.finish_reasons` | 與 `stop_reason` 的值相同,包裝在字串陣列中。OpenTelemetry GenAI 語意慣例 | |
257 257
258每次重試嘗試也會記錄為具有 `attempt` 和 `client_request_id` 屬性的 `gen_ai.request.attempt` 跨度事件。258每次重試嘗試也會記錄為一個 `gen_ai.request.attempt` span 事件,帶有 `attempt` 和 `client_request_id` 屬性。
259 259
260**`claude_code.tool`**260**`claude_code.tool`**
261 261
262| 屬性 | 說明 | 由以下閘門控制 |262| 屬性 | 說明 | 閘控變數 |
263| - | - | - |263| - | - | - |
264| `tool_name` | 工具名稱 | |264| `tool_name` | 工具名稱 | |
265| `tool_name_safe` | `tool_name` 的形式,不攜帶任何使用者選擇的名稱。內建工具名稱逐字傳遞。MCP 工具名稱顯示為 `mcp_other`,除了符合幾個固定形狀的工具名稱,例如名為 `browser_*` 的 `playwright` 工具,它們逐字傳遞。需要 Claude Code v2.1.268 或更新版本 | |265| `tool_name_safe` | 不攜帶任何使用者自選名稱的 `tool_name` 形式。內建工具名稱會原樣傳遞。MCP 工具名稱會顯示為 `mcp_other`,但符合少數固定形式的工具名稱除外,例如名為 `browser_*` 的 `playwright` 工具,會原樣傳遞。需要 Claude Code v2.1.268 或更新版本 | |
266| `bash_command_class` | 對於 Bash 工具:命令的第一個程式的類別,來自固定清單,例如 `vcs` 或 `package_manager`。`other` 用於清單外的程式,`unparsed` 當行無法解析時。需要 Claude Code v2.1.268 或更新版本 | |266| `bash_command_class` | 適用於 Bash 工具:命令的第一個程式在固定清單中的類別,例如 `vcs` 或 `package_manager`。程式不在清單中時為 `other`,該行無法剖析時為 `unparsed`。需要 Claude Code v2.1.268 或更新版本 | |
267| `bash_argv0` | 對於 Bash 工具:當命令的第一個程式在相同的固定清單上時,為該程式本身,例如 `git` 或 `npm`。`other` 用於清單外的任何程式。需要 Claude Code v2.1.268 或更新版本 | |267| `bash_argv0` | 適用於 Bash 工具:當命令的第一個程式位於同一份固定清單中時,即為該程式,例如 `git` 或 `npm`。任何不在清單中的程式皆為 `other`。需要 Claude Code v2.1.268 或更新版本 | |
268| `duration_ms` | 包括權限等待和執行的掛鐘持續時間 | |268| `duration_ms` | 包含權限等待與執行在內的實際經過時間 | |
269| `result_tokens` | 工具結果的近似令牌大小 | |269| `result_tokens` | 工具結果的概略 token 大小 | |
270| `agent_id` | 執行工具的子代理或隊友的識別碼。在主工作階段上不存在 | |270| `agent_id` | 執行該工具的 subagent 或隊友的識別碼。在主工作階段上不存在 | |
271| `parent_agent_id` | 產生此代理的代理的識別碼。對於主工作階段和直接從其產生的代理不存在 | |271| `parent_agent_id` | 產生此 agent 之 agent 的識別碼。對於主工作階段以及直接由其產生的 agent 不存在 | |
272| `workflow.run_id` | 產生此代理的工作流程工具執行的執行識別碼,前綴為 `wf_`。對於不是由工作流程產生的代理不存在 | |272| `workflow.run_id` | 產生此 agent 的 Workflow 工具執行之執行識別碼,前綴為 `wf_`。對於非由工作流程產生的 agent 不存在 | |
273| `workflow.name` | 產生此代理的工作流程的名稱。使用者撰寫的名稱會被替換為 `custom`,除非設定了閘門 | `OTEL_LOG_TOOL_DETAILS` |273| `workflow.name` | 產生此 agent 之工作流程的名稱。除非設定了閘控變數,否則使用者撰寫的名稱會被替換為 `custom` | `OTEL_LOG_TOOL_DETAILS` |
274| `tool_use_id` | 此呼叫的模型 `tool_use` 區塊 id。與 [tool\_result](#tool-result-event) 和 [tool\_decision](#tool-decision-event) 事件上的 `tool_use_id` 以及 hook 承載中的相符,因此您可以將跨度連結到這些記錄 | |274| `tool_use_id` | 模型針對此呼叫的 `tool_use` 區塊 id。與 [tool\_result](#tool-result-event) 和 [tool\_decision](#tool-decision-event) 事件上以及 hook payload 中的 `tool_use_id` 相符,讓您可以將 span 與這些記錄關聯 | |
275| `gen_ai.tool.call.id` | 與 `tool_use_id` 相同的值。OpenTelemetry GenAI 語義慣例 | |275| `gen_ai.tool.call.id` | 與 `tool_use_id` 的值相同。OpenTelemetry GenAI 語意慣例 | |
276| `file_path` | Read、Edit 和 Write 工具的目標檔案路徑 | `OTEL_LOG_TOOL_DETAILS` |276| `file_path` | Read、Edit 和 Write 工具的目標檔案路徑 | `OTEL_LOG_TOOL_DETAILS` |
277| `full_command` | Bash 工具的命令字串 | `OTEL_LOG_TOOL_DETAILS` |277| `full_command` | Bash 工具的命令字串 | `OTEL_LOG_TOOL_DETAILS` |
278| `skill_name` | Skill 工具的技能名稱 | `OTEL_LOG_TOOL_DETAILS` |278| `skill_name` | Skill 工具的 skill 名稱 | `OTEL_LOG_TOOL_DETAILS` |
279| `subagent_type` | Agent 工具或舊版 Task 工具的子代理類型 | `OTEL_LOG_TOOL_DETAILS` |279| `subagent_type` | Agent 工具或舊版 Task 工具的 subagent 類型 | `OTEL_LOG_TOOL_DETAILS` |
280 280
281**`claude_code.tool` 上的 `tool.output` 跨度事件**281**`claude_code.tool` 上的 `tool.output` span 事件**
282 282
283如果您設定 `OTEL_LOG_TOOL_CONTENT=1`,Read 和 Bash 呼叫可以在 `claude_code.tool` 跨度上記錄 `tool.output` 跨度事件。Edit 和 Write 呼叫只有在您也設定 `OTEL_LOG_TOOL_DETAILS=1` 時才會記錄一個。該變數不限於這兩個工具,因此請檢查其[設定表中的列](#common-configuration-variables)以了解它在其他地方新增的引數。283如果您設定 `OTEL_LOG_TOOL_CONTENT=1`,Read 和 Bash 呼叫可以在 `claude_code.tool` span 上記錄 `tool.output` span 事件。Edit 和 Write 呼叫僅在您同時設定 `OTEL_LOG_TOOL_DETAILS=1` 時才會記錄。該變數的範圍並不限於這兩個工具,因此請查看其[在設定表中的列](#common-configuration-variables),了解它在其他地方新增的引數。
284 284
285MCP 工具、WebFetch 和 WebSearch 也會記錄此事件,在 Claude Code v2.1.283 或更新版本上。285在 Claude Code v2.1.283 或更新版本上,MCP 工具、WebFetch 和 WebSearch 也會記錄此事件。
286 286
287Claude Code 從工具呼叫的成功返回時寫入此事件,因此引發錯誤的呼叫不會記錄任何內容,無論工具如何。在確實返回的呼叫中,它不會為以下內容記錄 `tool.output` 事件:287Claude Code 會根據工具呼叫的成功傳回來寫入此事件,因此引發錯誤的呼叫不會記錄任何內容,無論是哪個工具。在確實有傳回的呼叫中,下列情況不會記錄 `tool.output` 事件:
288 288
289* 呼叫 Read、Edit、Write、Bash、WebFetch、WebSearch 和 MCP 工具以外的任何工具289* 對 Read、Edit、Write、Bash、WebFetch、WebSearch 和 MCP 工具以外之任何工具的呼叫
290* 返回檔案文字以外的任何內容的 Read,例如影片、PDF 或檔案內容未變更的重新讀取290* 傳回檔案文字以外內容的 Read,例如影像、PDF,或重新讀取內容未變更的檔案
291* Edit 或 Write 呼叫,除非您也設定 `OTEL_LOG_TOOL_DETAILS=1`291* Edit 或 Write 呼叫,除非您同時設定了 `OTEL_LOG_TOOL_DETAILS=1`
292* Claude Code 在執行期間將其移至背景,以便等待中的訊息能夠傳達給 Claude 的 WebFetch 或 WebSearch 呼叫。稍後到達的結果也不會被記錄。若要了解 Claude Code 何時移動呼叫,請參閱終端機的[Claude Code 何時傳送您佇列的內容](https://code.claude.com/docs/zh-TW/interactive-mode.md#when-claude-code-sends-what-you-queued),以及 Agent SDK 工作階段的 [`priority` 欄位](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#sdkusermessage)292* Claude Code 在執行期間移至背景、以便讓等待中的訊息能傳達給 Claude 的 WebFetch 或 WebSearch 呼叫。稍後抵達的結果也不會記錄。若要了解 Claude Code 何時會移動呼叫,終端機請參閱 [Claude Code 何時傳送您排入佇列的內容](https://code.claude.com/docs/zh-TW/interactive-mode.md#when-claude-code-sends-what-you-queued),Agent SDK 工作階段請參閱 [`priority` 欄位](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#sdkusermessage)
293 293
294該事件攜帶這些屬性,每個都在內容限制處截斷(預設值 60 KB)。`由以下閘門控制` 命名屬性在 `OTEL_LOG_TOOL_CONTENT=1` 之上需要的變數,對於 Edit 和 Write,該變數控制事件本身而不是屬性。294此事件攜帶下列屬性,每個屬性都會在內容上限(預設為 60 KB)處截斷。「閘控變數」欄列出屬性在 `OTEL_LOG_TOOL_CONTENT=1` 之外還需要的變數;對於 Edit 和 Write,該變數閘控的是事件本身而非屬性。
295 295
296| 屬性 | 說明 | 由以下閘門控制 |296| 屬性 | 說明 | 閘控變數 |
297| - | - | - |297| - | - | - |
298| `content` | Read 工具返回的文字,或 Write 呼叫被要求寫入的文字 | Write 工具的 `OTEL_LOG_TOOL_DETAILS` |298| `content` | Read 工具傳回的文字,或 Write 呼叫被要求寫入的文字 | Write 工具需 `OTEL_LOG_TOOL_DETAILS` |
299| `output` | 對於 Bash 工具,命令的組合輸出,stderr 交錯到 stdout。對於 MCP 工具、WebFetch 或 WebSearch,工具返回的結果:文字區塊由換行符連結,影片或文件被替換為 `[image]` 等佔位符 | |299| `output` | 對於 Bash 工具,為命令的合併輸出,stderr 會交錯併入 stdout。對於 MCP 工具、WebFetch 或 WebSearch,為工具傳回的結果:文字區塊以換行連接,影像或文件會替換為預留位置,例如 `[image]` | |
300| `diff` | Edit 工具套用的結構化修補程式 | `OTEL_LOG_TOOL_DETAILS` |300| `diff` | Edit 工具套用的結構化修補 | `OTEL_LOG_TOOL_DETAILS` |
301| `file_path` | Read、Edit 和 Write 工具的目標檔案路徑,重複跨度屬性的相同名稱 | `OTEL_LOG_TOOL_DETAILS` |301| `file_path` | Read、Edit 和 Write 工具的目標檔案路徑,與同名的 span 屬性重複 | `OTEL_LOG_TOOL_DETAILS` |
302| `bash_command` | Bash 工具的命令字串 | `OTEL_LOG_TOOL_DETAILS` |302| `bash_command` | Bash 工具的命令字串 | `OTEL_LOG_TOOL_DETAILS` |
303 303
304父跨度的 `tool_name` 屬性告訴您事件來自哪個工具。在內容限制處切割的屬性伴隨著 `<attribute>_truncated` 和 `<attribute>_original_length`。304父 span 的 `tool_name` 屬性會告訴您事件來自哪個工具。在內容上限處被截斷的屬性會附帶 `<attribute>_truncated` 和 `<attribute>_original_length`。
305 305
306**`claude_code.tool.blocked_on_user`**306**`claude_code.tool.blocked_on_user`**
307 307
308| 屬性 | 說明 | 由以下閘門控制 |308| 屬性 | 說明 | 閘控變數 |
309| - | - | - |309| - | - | - |
310| `duration_ms` | 等待權限決定所花費的時間 | |310| `duration_ms` | 等待權限決定所花的時間 | |
311| `decision` | `accept`、`reject` 或 `cancelled`,其中 `cancelled` 表示 Claude Code 停止等待該工具呼叫的權限決定,且未執行該工具呼叫 | |311| `decision` | `accept`、`reject` 或 `cancelled`,其中 `cancelled` 表示 Claude Code 停止等待該工具呼叫的權限決定,且未執行它 | |
312| `source` | 對於 `accept` 或 `reject`,表示決定的來源,例如 `config`、`hook` 或 `user_temporary`,其含義如[工具決定事件](#tool-decision-event)所述。對於 `cancelled`,表示在做出任何決定之前結束等待的原因,例如 `user_abort` | |312| `source` | 對於 `accept` 或 `reject`,為決定的來源,例如 `config`、`hook` 或 `user_temporary`,其含義如 [Tool decision 事件](#tool-decision-event)中所述。對於 `cancelled`,為在做出任何決定前結束等待的原因,例如 `user_abort` | |
313 313
314`source` 為 `user_abort` 的 `cancelled` 決定,表示在權限提示或[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)檢查仍待處理時,一則需要立即傳遞的訊息中斷了該回合。例如,在自動模式檢查期間,使用者有一則已排入佇列的訊息,並[立即傳送了它](https://code.claude.com/docs/zh-TW/interactive-mode.md#when-claude-code-sends-what-you-queued)。314`source` 為 `user_abort` 的 `cancelled` 決定,表示在權限提示或[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)檢查仍待處理時,有一則需要立即傳遞的訊息中斷了該回合。例如,在自動模式檢查期間,使用者有一則已排入佇列的訊息,並[立即傳送了它](https://code.claude.com/docs/zh-TW/interactive-mode.md#when-claude-code-sends-what-you-queued)。
315 315
316**`claude_code.tool.execution`**316**`claude_code.tool.execution`**
317 317
318| 屬性 | 說明 | 由以下閘門控制 |318| 屬性 | 說明 | 閘控變數 |
319| - | - | - |319| - | - | - |
320| `duration_ms` | 執行工具主體所花費的時間 | |320| `duration_ms` | 執行工具主體所花的時間 | |
321| `tool_use_id` | 與父 `claude_code.tool` 跨度上的相同值 | |321| `tool_use_id` | 與父項 `claude_code.tool` span 上的值相同 | |
322| `gen_ai.tool.call.id` | 與 `tool_use_id` 相同的值。OpenTelemetry GenAI 語義慣例 | |322| `gen_ai.tool.call.id` | 與 `tool_use_id` 的值相同。OpenTelemetry GenAI 語意慣例 | |
323| `success` | `true` 或 `false` | |323| `success` | `true` 或 `false` | |
324| `error` | 執行失敗時的錯誤類別字串,例如 `Error:ENOENT` 或 `ShellError`。當設定了閘門時包含完整的錯誤訊息 | `OTEL_LOG_TOOL_DETAILS` |324| `error` | 執行失敗時的錯誤類別字串,例如 `Error:ENOENT` 或 `ShellError`。設定了閘控變數時,則改為包含完整的錯誤訊息 | `OTEL_LOG_TOOL_DETAILS` |
325| `error_class` | 識別碼形式的錯誤類別,字母、數字和底線以外的字元被替換為 `_`,例如 `Error_ENOENT` 或 `ShellError`。即使 `error` 攜帶完整訊息也會攜帶類別。需要 Claude Code v2.1.268 或更新版本 | |325| `error_class` | 識別碼形式的錯誤類別,字母、數字和底線以外的字元會替換為 `_`,例如 `Error_ENOENT` 或 `ShellError`。即使 `error` 攜帶完整訊息,此屬性仍攜帶類別。需要 Claude Code v2.1.268 或更新版本 | |
326 326
327**`claude_code.hook`**327**`claude_code.hook`**
328 328
329此跨度僅在詳細測試版追蹤作用中時出現,這需要 `ENABLE_BETA_TRACING_DETAILED=1` 和 `BETA_TRACING_ENDPOINT`,一對也[變更日誌和追蹤的去向](https://code.claude.com/docs/zh-TW/env-vars.md#variables)。在您的殼層、使用者設定或受管設定中設定該對;兩個變數都在[專案和本機設定](https://code.claude.com/docs/zh-TW/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略。`CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 單獨不會產生它。329此 span 僅在詳細 beta 追蹤啟用時出現,這需要 `ENABLE_BETA_TRACING_DETAILED=1` 和 `BETA_TRACING_ENDPOINT`,這組變數也會[變更您日誌與追蹤的傳送目的地](https://code.claude.com/docs/zh-TW/env-vars.md#variables)。請在您的 shell、使用者設定或受管設定中設定這組變數;這兩個變數在[專案與本機設定](https://code.claude.com/docs/zh-TW/settings-reference.md#variables-claude-code-ignores-in-env)中會被忽略。單獨設定 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 不會產生此 span。
330 330
331在互動式 CLI 工作階段中,詳細測試版追蹤也需要您的組織被列入該功能的允許清單。Agent SDK 和非互動式 `-p` 工作階段不需要允許清單。331在互動式 CLI 工作階段中,詳細 beta 追蹤還需要您的組織已列入此功能的允許清單。Agent SDK 和非互動式 `-p` 工作階段不需要列入允許清單。
332 332
333> [!WARNING]333> [!WARNING]
334>334>
335> 僅在除錯時設定 `ENABLE_BETA_TRACING_DETAILED`,請勿在正式環境中設定。詳細測試版追蹤的匯出量很高,且其[內容屬性](#new-context-gates)不屬於穩定跨度 schema 的一部分。335> 僅在除錯時設定 `ENABLE_BETA_TRACING_DETAILED`,請勿用於正式環境。詳細 beta 追蹤的匯出量很大,且其[內容屬性](#new-context-gates)不屬於穩定的 span schema。
336 336
337| 屬性 | 說明 | 由以下閘門控制 |337| 屬性 | 說明 | 閘控變數 |
338| - | - | - |338| - | - | - |
339| `hook_event` | Hook 事件類型,例如 `PreToolUse` | |339| `hook_event` | Hook 事件類型,例如 `PreToolUse` | |
340| `hook_name` | 完整 hook 名稱,例如 `PreToolUse:Write` | |340| `hook_name` | 完整 hook 名稱,例如 `PreToolUse:Write` | |
341| `num_hooks` | 執行的相符 hook 命令數 | |341| `num_hooks` | 已執行的相符 hook 命令數量 | |
342| `hook_definitions` | JSON 序列化的 hook 設定 | `OTEL_LOG_TOOL_DETAILS` |342| `hook_definitions` | JSON 序列化的 hook 設定 | `OTEL_LOG_TOOL_DETAILS` |
343| `duration_ms` | 所有相符 hook 的掛鐘持續時間 | |343| `duration_ms` | 所有相符 hook 的實際經過時間 | |
344| `num_success` | 成功完成的 hook 計數 | |344| `num_success` | 成功完成的 hook 數量 | |
345| `num_blocking` | 返回阻止決定的 hook 計數 | |345| `num_blocking` | 傳回阻擋決定的 hook 數量 | |
346| `num_non_blocking_error` | 失敗而不阻止的 hook 計數 | |346| `num_non_blocking_error` | 失敗但未阻擋的 hook 數量 | |
347| `num_cancelled` | 在完成前取消的 hook 計數 | |347| `num_cancelled` | 在完成前被取消的 hook 數量 | |
348 348
349**詳細測試版追蹤下的內容屬性**349**詳細 beta 追蹤下的內容屬性**
350 350
351> [!NOTE]351> [!NOTE]
352>352>
353> 其他內容承載屬性,例如 `new_context`、`system_reminders`、`system_prompt_preview`、`user_system_prompt`、`tool_input` 和 `response.model_output`,僅在詳細測試版追蹤作用中時發出。它們不是穩定跨度 schema 的一部分。353> 其他攜帶內容的屬性,例如 `new_context`、`system_reminders`、`system_prompt_preview`、`user_system_prompt`、`tool_input` 和 `response.model_output`,僅在詳細 beta 追蹤啟用時才會發出。它們不屬於穩定的 span schema。
354 354
355這些屬性出現在以下跨度上,`由以下閘門控制` 命名屬性在詳細測試版追蹤之上需要的變數。長於內容限制(預設值 60 KB)的值會被截斷。355這些屬性出現在下列 span 上,「閘控變數」欄列出屬性在詳細 beta 追蹤之外還需要的變數。長度超過內容上限(預設為 60 KB)的值會被截斷。
356 356
357| 屬性 | 跨度 | 說明 | 由以下閘門控制 |357| 屬性 | Span | 說明 | 閘控變數 |
358| - | - | - | - |358| - | - | - | - |
359| `new_context` | `claude_code.interaction` | 使用者提示詞 | `OTEL_LOG_USER_PROMPTS` |359| `new_context` | `claude_code.interaction` | 使用者提示詞 | `OTEL_LOG_USER_PROMPTS` |
360| `new_context` | `claude_code.llm_request` | 隨請求傳送的新使用者訊息和工具結果 | `OTEL_LOG_USER_PROMPTS` |360| `new_context` | `claude_code.llm_request` | 隨請求傳送的新使用者訊息與工具結果 | `OTEL_LOG_USER_PROMPTS` |
361| `system_reminders` | `claude_code.llm_request` | 請求新訊息中[系統提醒](https://code.claude.com/docs/zh-TW/glossary.md#system-reminder)的文字 | `OTEL_LOG_USER_PROMPTS` |361| `system_reminders` | `claude_code.llm_request` | 請求的新訊息中[系統提醒](https://code.claude.com/docs/zh-TW/glossary.md#system-reminder)的文字 | `OTEL_LOG_USER_PROMPTS` |
362| `system_prompt_preview` | `claude_code.llm_request` | 隨請求傳送的完整系統提示詞的前 500 個字元 | `OTEL_LOG_USER_PROMPTS` |362| `system_prompt_preview` | `claude_code.llm_request` | 隨請求傳送之完整系統提示詞的前 500 個字元 | `OTEL_LOG_USER_PROMPTS` |
363| `user_system_prompt` | `claude_code.llm_request` | 僅限您透過 `systemPrompt` SDK 選項或 `--system-prompt` 和 `--append-system-prompt` 旗標提供的系統提示詞文字。每個工作階段發出一次,而不是每個請求 | `OTEL_LOG_USER_PROMPTS` |363| `user_system_prompt` | `claude_code.llm_request` | 僅包含您透過 `systemPrompt` SDK 選項或 `--system-prompt` 與 `--append-system-prompt` 旗標提供的系統提示詞文字。每個工作階段發出一次,而非每個請求發出一次 | `OTEL_LOG_USER_PROMPTS` |
364| `response.model_output` | `claude_code.llm_request` | 模型對請求的回應文字 | `OTEL_LOG_USER_PROMPTS` |364| `response.model_output` | `claude_code.llm_request` | 模型對該請求之回應的文字 | `OTEL_LOG_USER_PROMPTS` |
365| `new_context` | `claude_code.tool` | 工具呼叫的結果,無論工具如何 | `OTEL_LOG_TOOL_CONTENT` |365| `new_context` | `claude_code.tool` | 工具呼叫的結果,無論是哪個工具 | `OTEL_LOG_TOOL_CONTENT` |
366| `tool_input` | `claude_code.tool` | 工具呼叫的序列化輸入 | `OTEL_LOG_TOOL_DETAILS` |366| `tool_input` | `claude_code.tool` | 工具呼叫的序列化輸入 | `OTEL_LOG_TOOL_DETAILS` |
367 367
368在詳細測試版追蹤下且設定 `OTEL_LOG_USER_PROMPTS=1` 時,Claude Code 也會發出 `claude_code.system_prompt` 事件,攜帶完整的系統提示詞,並在內容限制處截斷。它會在工作階段首次傳送每個不同的系統提示詞時到達,並在壓縮後再次到達。368在詳細 beta 追蹤下並設定 `OTEL_LOG_USER_PROMPTS=1` 時,Claude Code 也會發出 `claude_code.system_prompt` 事件,攜帶完整的系統提示詞,並在內容上限處截斷。此事件會在工作階段首次傳送每個不同的系統提示詞時送達,並在壓縮後再次送達。
369 369
370### 動態標頭370### 動態標頭
371 371
372對於需要動態驗證的企業環境,您可以設定指令碼以動態產生標頭。動態標頭僅適用於 `http/protobuf` 和 `http/json` 協議。使用 `grpc` 協議,Claude Code 僅使用靜態標頭變數 `OTEL_EXPORTER_OTLP_HEADERS` 及其每個信號的變體。372對於需要動態身分驗證的企業環境,您可以設定一個指令碼來動態產生標頭。動態標頭僅適用於 `http/protobuf` 和 `http/json` 通訊協定。使用 `grpc` 通訊協定時,Claude Code 只會使用靜態標頭變數,即 `OTEL_EXPORTER_OTLP_HEADERS` 及其個別訊號的變體。
373 373
374#### 設定設定374#### 設定組態
375 375
376新增至您的 `.claude/settings.json`,將路徑替換為您自己的指令碼:376加入到您的 `.claude/settings.json`,並將路徑替換為您自己的指令碼:
377 377
378```json theme={null}378```json theme={null}
379{379{
381}381}
382```382```
383 383
384該值可以是可執行檔的路徑,包括包含空格的路徑,或帶有引數的殼層命令列。在 Windows 上,該值始終透過殼層執行,因此在 JSON 值內引用包含空格的路徑。384此值可以是可執行檔的路徑(包括含有空格的路徑),或帶有引數的 shell 命令列。在 Windows 上,此值一律會透過 shell 執行,因此請在 JSON 值中為含有空格的路徑加上引號。
385 385
386#### 指令碼需求386#### 指令碼需求
387 387
388指令碼必須輸出有效的 JSON,其中包含代表 HTTP 標頭的字串鍵值對:388指令碼必須輸出有效的 JSON,以字串鍵值對表示 HTTP 標頭:
389 389
390```bash theme={null}390```bash theme={null}
391#!/bin/bash391#!/bin/bash
393echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"393echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
394```394```
395 395
396如果協助程式失敗或列印不符合這些需求的輸出,匯出會失敗,您的遙測後端在協助程式再次運作之前不會從工作階段接收任何內容。Claude Code 在以下位置報告失敗:396如果輔助程式失敗,或印出的輸出不符合這些需求,匯出就會失敗,在輔助程式恢復正常之前,您的遙測後端不會從該工作階段收到任何內容。Claude Code 會在下列位置回報此失敗:
397 397
398* 互動式工作階段中的警告通知,[`otelHeadersHelper failed; telemetry is not being exported`](https://code.claude.com/docs/zh-TW/errors#otelheadershelper-failed),在協助程式首次失敗時每個工作階段顯示一次398* 互動式工作階段中的警告通知 [`otelHeadersHelper failed; telemetry is not being exported`](https://code.claude.com/docs/zh-TW/errors#otelheadershelper-failed),在輔助程式首次失敗時,每個工作階段顯示一次
399* `/status` 輸出399* `/status` 輸出
400* 偵錯日誌,當使用 [`--debug`](https://code.claude.com/docs/zh-TW/cli-reference#cli-flags) 執行或在工作階段中執行 `/debug` 後400* 除錯日誌,在以 [`--debug`](https://code.claude.com/docs/zh-TW/cli-reference#cli-flags) 執行時,或在工作階段中執行 `/debug` 之後
401* stderr,在使用 `-p` 啟動的非互動式工作階段中401* stderr,在以 `-p` 啟動的非互動式工作階段中
402 402
403#### 重新整理行為403#### 重新整理行為
404 404
405標頭協助程式指令碼在啟動時執行,之後定期執行以支援令牌重新整理。預設情況下,指令碼每 29 分鐘執行一次。使用 `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` 環境變數自訂間隔。405標頭輔助指令碼會在啟動時執行,之後定期執行以支援 token 重新整理。預設情況下,指令碼每 29 分鐘執行一次。您可以使用 `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` 環境變數自訂間隔。
406 406
407### 多團隊組織支援407### 多團隊組織支援
408 408
409具有多個團隊或部門的組織可以使用 `OTEL_RESOURCE_ATTRIBUTES` 環境變數新增自訂屬性以區分不同的群組:409擁有多個團隊或部門的組織,可以使用 `OTEL_RESOURCE_ATTRIBUTES` 環境變數新增自訂屬性,以區分不同群組:
410 410
411```bash theme={null}411```bash theme={null}
412# Add custom attributes for team identification412# Add custom attributes for team identification
413export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"413export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
414```414```
415 415
416這些自訂屬性包含在所有指標和事件中,允許您:416這些自訂屬性會包含在所有指標和事件中,讓您能夠:
417 417
418* 按團隊或部門篩選指標418* 依團隊或部門篩選指標
419* 追蹤每個成本中心的成本419* 依成本中心追蹤成本
420* 建立團隊特定的儀表板420* 建立團隊專屬的儀表板
421* 為特定團隊設定警示421* 為特定團隊設定警示
422 422
423Claude Code 將這些值作為屬性附加到每個指標資料點和事件記錄,除了在 OTLP 資源區塊中傳送它們。因為大多數指標後端將資料點屬性公開為可查詢的標籤,您可以直接按自訂金鑰分組和篩選指標。除了 `vcs.*` [儲存庫屬性](#repository-attributes),自訂金鑰永遠不會覆蓋[標準屬性](#standard-attributes),例如 `user.id` 或 `session.id`:當金鑰衝突時,Claude Code 會保留內建值。423除了在 OTLP 資源區塊中傳送這些值之外,Claude Code 還會將它們作為屬性附加到每個指標資料點和事件記錄上。由於大多數指標後端會將資料點屬性公開為可查詢的標籤,您可以直接依自訂鍵將指標分組與篩選。除了 `vcs.*` [儲存庫屬性](#repository-attributes)之外,自訂鍵絕不會覆寫[標準屬性](#standard-attributes),例如 `user.id` 或 `session.id`:當鍵發生衝突時,Claude Code 會保留內建值。
424 424
425每個自訂金鑰都會成為每個指標系列上的標籤,因此高基數值會增加指標後端中的儲存成本。若要僅在資源區塊中傳送自訂屬性並從資料點標籤中省略它們,請設定 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`。請參閱[指標基數控制](#metrics-cardinality-control)。425每個自訂鍵都會成為每個指標序列上的標籤,因此高基數的值會增加指標後端的儲存成本。若要只在資源區塊中傳送自訂屬性,並將其從資料點標籤中省略,請設定 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`。請參閱[指標基數控制](#metrics-cardinality-control)。
426 426
427> [!WARNING]427> [!WARNING]
428>428>
429> `OTEL_RESOURCE_ATTRIBUTES` 環境變數使用逗號分隔的鍵值對,具有嚴格的格式要求:429> `OTEL_RESOURCE_ATTRIBUTES` 環境變數使用以逗號分隔的 key=value 對,並有嚴格的格式需求:
430>430>
431> * **不允許空格**:值不能包含空格。例如,`user.organizationName=My Company` 無效431> * **不允許空格**:值不能包含空格。例如,`user.organizationName=My Company` 無效
432> * **格式**:必須是逗號分隔的鍵值對:`key1=value1,key2=value2`432> * **格式**:必須是以逗號分隔的 key=value 對:`key1=value1,key2=value2`
433> * **允許的字元**:僅限 US-ASCII 字元,不包括控制字元、空格、雙引號、逗號、分號和反斜線433> * **允許的字元**:僅限 US-ASCII 字元,但不包括控制字元、空白字元、雙引號、逗號、分號和反斜線
434> * **特殊字元**:允許範圍外的字元必須進行百分比編碼434> * **特殊字元**:允許範圍以外的字元必須經過百分比編碼,且值中的 `=` 必須寫成 `%3D`
435>435>
436> 對於需要空格的值,請改用底線或 camelCase。以下範例使用每種形式設定 `org.name`:436> 對於需要空格的值,請改用底線或 camelCase。下列範例分別以這兩種形式設定 `org.name`:
437>437>
438> ```bash theme={null}438> ```bash theme={null}
439> export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"439> export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
440> export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"440> export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"
441> ```441> ```
442>442>
443> 您可以百分比編碼任何字元,不僅是排除的字元。此範例對空格和撇號進行編碼:443> 您可以對任何字元進行百分比編碼,不限於被排除的字元。此範例同時編碼了空格和撇號:
444>444>
445> ```bash theme={null}445> ```bash theme={null}
446> export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"446> export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
447> ```447> ```
448>448>
449> 將值包裝在引號中不會逃脫空格。例如,`org.name="My Company"` 會導致文字值 `"My Company"`(包括引號),而不是 `My Company`。449> 將值包在引號中並不會跳脫空格。例如,`org.name="My Company"` 會產生包含引號的字面值 `"My Company"`,而不是 `My Company`。
450 450
451### 將遙測歸因至 Desktop SSH 工作階段451### 將遙測歸屬至 Desktop SSH 工作階段
452 452
453若要查看 [Desktop SSH 工作階段](https://code.claude.com/docs/zh-TW/desktop.md#ssh-sessions)在哪台遠端機器上執行,請在自訂屬性中為每台機器命名。指標和事件不會指明工作階段執行所在的機器。453若要查看 [Desktop SSH 工作階段](https://code.claude.com/docs/zh-TW/desktop.md#ssh-sessions)是在哪台遠端機器上執行,請在自訂屬性中為每台機器命名。指標和事件不會指出工作階段執行所在的機器。
454 454
455在每台遠端機器上,將 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) 新增至開啟遙測的 `env` 區塊,該區塊位於[工作階段讀取的受管設定檔](https://code.claude.com/docs/zh-TW/desktop.md#managed-settings)中。在每台機器的檔案中直接寫出名稱。Claude Code 不會展開該值,因此 `host.name=$(hostname)` 會以這些字元原樣到達。455在每台遠端機器上,將 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) 加入到開啟遙測的 `env` 區塊中,該區塊位於[工作階段所讀取的受管設定檔](https://code.claude.com/docs/zh-TW/desktop.md#managed-settings)中。請在每台機器的檔案中寫出名稱。Claude Code 不會展開該值,因此 `host.name=$(hostname)` 會以這些字元原樣送達。
456 456
457以下範例將機器命名為 `build-7`:457下列範例將機器命名為 `build-7`:
458 458
459```json theme={null}459```json theme={null}
460{460{
469}469}
470```470```
471 471
472當沒有其他項目設定此變數時,`host.name` 會出現在資源區塊中,無論是在 Desktop SSH 工作階段中,或是在該機器上的 CLI 中。關於自訂屬性還會出現在哪些地方,請參閱[多團隊組織支援](#multi-team-organization-support)。472當沒有其他來源設定此變數時,`host.name` 會出現在資源區塊中,無論是在 Desktop SSH 工作階段中,還是在該機器上的 CLI 中。關於自訂屬性還會出現在哪些地方,請參閱[多團隊組織支援](#multi-team-organization-support)。
473 473
474如果名稱沒有到達,請檢查是否為以下原因之一:474如果名稱沒有送達,請檢查是否為下列原因之一:
475 475
476* **您在執行 Desktop 的電腦上設定了它**:Desktop 不會將您在該處設定的值傳遞給 SSH 工作階段476* **您在執行 Desktop 的電腦上設定了它**:Desktop 不會將您在那裡設定的值傳遞給 SSH 工作階段
477* **您在 `/etc/profile` 或其他只有登入 shell 會讀取的檔案中匯出了它**:當您從登入 shell 執行 `claude` 時名稱會到達,但在 Desktop SSH 工作階段中不會。Desktop 不會透過登入 shell 啟動 Claude Code。請改為在遠端機器上的[受管設定檔](https://code.claude.com/docs/zh-TW/desktop.md#managed-settings)中,於 `env` 下設定此變數。477* **您在 `/etc/profile` 或其他只有登入 shell 才會讀取的檔案中匯出了它**:當您從登入 shell 執行 `claude` 時名稱會送達,但在 Desktop SSH 工作階段中則不會。Desktop 不會透過登入 shell 啟動 Claude Code。請改為在遠端機器上的[受管設定檔](https://code.claude.com/docs/zh-TW/desktop.md#managed-settings)中,於 `env` 下設定此變數。
478* **值中含有空格**:此時 Claude Code 不會將任何鍵複製到事件或資料點上,也不會回報錯誤。[移除值中的空格](#multi-team-organization-support)。478* **某個值中含有空格**:此時 Claude Code 不會將任何鍵複製到事件或資料點上。若要查看哪個值含有空格,請在遠端機器上的工作階段中執行 `/status`。[移除值中的空格](#multi-team-organization-support)。
479* **其他項目已設定此變數**:在桌面應用程式啟動的工作階段中,啟動環境中已設定的變數[優先於設定檔](https://code.claude.com/docs/zh-TW/settings-reference.md#how-env-values-interact-with-your-shell)。[除錯日誌](https://code.claude.com/docs/zh-TW/debug-your-config.md)會列出每個被忽略的變數。當第三方 Desktop 部署在其提供的環境中[指定 OTLP 端點](#how-managed-settings-lock-the-otlp-destination)時,該環境會攜帶 Desktop 自己的 `OTEL_RESOURCE_ATTRIBUTES`。479* **已有其他來源設定了此變數**:在桌面應用程式啟動的工作階段中,啟動環境中已設定的變數[優先於設定檔](https://code.claude.com/docs/zh-TW/settings-reference.md#how-env-values-interact-with-your-shell)。[除錯日誌](https://code.claude.com/docs/zh-TW/debug-your-config.md)會列出每個被忽略的變數。當第三方 Desktop 部署在其提供的環境中[指定 OTLP 端點](#how-managed-settings-lock-the-otlp-destination)時,該環境會攜帶 Desktop 自己的 `OTEL_RESOURCE_ATTRIBUTES`。
480 480
481### 範例設定481### 設定範例
482 482
483在執行 `claude` 之前設定這些環境變數。下面的每個案例都顯示完整的設定,每個變數都在[常見設定變數](#common-configuration-variables)下描述。若要確認設定生效,請在啟動工作階段後檢查您的後端是否有 `claude_code.session.count` 指標;[快速入門](#quick-start)涵蓋僅日誌驗證以及當沒有任何內容到達時要檢查的內容。483請在執行 `claude` 之前設定這些環境變數。下列每個情境都展示了完整的設定,每個變數的說明請見[常用設定變數](#common-configuration-variables)。若要確認設定已生效,請在啟動工作階段後檢查您的後端是否有 `claude_code.session.count` 指標;[快速入門](#quick-start)涵蓋僅日誌的驗證方式,以及在沒有任何資料送達時應檢查的項目。
484 484
485用於主控台偵錯,匯出間隔為 1 秒:485用於主控台除錯,匯出間隔為 1 秒:
486 486
487```bash theme={null}487```bash theme={null}
488export CLAUDE_CODE_ENABLE_TELEMETRY=1488export CLAUDE_CODE_ENABLE_TELEMETRY=1
506export OTEL_METRICS_EXPORTER=prometheus506export OTEL_METRICS_EXPORTER=prometheus
507```507```
508 508
509在[自託管環境](https://code.claude.com/docs/zh-TW/self-hosted-environments-reference.md#pass-through-session-child-metrics)上,工作階段僅在執行器的預設容量為 1 時繫結連接埠 9464。在更高的容量下,執行器改為在其自己的 `/metrics` 端點上重新公開工作階段計數器和量表。509在[自行託管環境](https://code.claude.com/docs/zh-TW/self-hosted-environments-reference.md#pass-through-session-child-metrics)中,僅當 runner 採用預設容量 1 時,工作階段才會繫結連接埠 9464。在較高容量下,runner 會改為在其自己的 `/metrics` 端點上重新公開工作階段的計數器與量測值。
510 510
511若要將指標傳送到多個匯出器:511將指標傳送到多個匯出器:
512 512
513```bash theme={null}513```bash theme={null}
514export CLAUDE_CODE_ENABLE_TELEMETRY=1514export CLAUDE_CODE_ENABLE_TELEMETRY=1
516export OTEL_EXPORTER_OTLP_PROTOCOL=http/json516export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
517```517```
518 518
519若要將指標和日誌傳送到不同的端點或後端:519將指標和日誌傳送到不同的端點或後端:
520 520
521```bash theme={null}521```bash theme={null}
522export CLAUDE_CODE_ENABLE_TELEMETRY=1522export CLAUDE_CODE_ENABLE_TELEMETRY=1
528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317
529```529```
530 530
531若要僅匯出指標,不匯出事件或日誌:531僅匯出指標,不匯出事件或日誌:
532 532
533```bash theme={null}533```bash theme={null}
534export CLAUDE_CODE_ENABLE_TELEMETRY=1534export CLAUDE_CODE_ENABLE_TELEMETRY=1
537export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317537export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
538```538```
539 539
540若要僅匯出事件和日誌,不匯出指標:540僅匯出事件和日誌,不匯出指標:
541 541
542```bash theme={null}542```bash theme={null}
543export CLAUDE_CODE_ENABLE_TELEMETRY=1543export CLAUDE_CODE_ENABLE_TELEMETRY=1