@blueking/open-telemetry 0.0.22 → 0.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +256 -70
  2. package/dist/bk-rum.global.js +2 -2
  3. package/dist/bk-rum.global.js.map +1 -1
  4. package/dist/core/config.d.ts +4 -2
  5. package/dist/core/processor.d.ts +2 -2
  6. package/dist/core/runtime-context.d.ts +4 -0
  7. package/dist/core/sampling.d.ts +0 -1
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js +395 -477
  10. package/dist/index.js.map +1 -1
  11. package/dist/plugins/blank-screen.d.ts +1 -1
  12. package/dist/plugins/common.d.ts +3 -4
  13. package/dist/plugins/web-vitals.d.ts +0 -5
  14. package/dist/schema/attributes.d.ts +6 -8
  15. package/dist/schema/span.d.ts +24 -15
  16. package/package.json +1 -1
  17. package/skills/bk-rum-otele/SKILL.md +26 -23
  18. package/skills/bk-rum-otele/references/actions.md +166 -0
  19. package/skills/bk-rum-otele/references/api.md +248 -215
  20. package/skills/bk-rum-otele/references/architecture.md +139 -37
  21. package/skills/bk-rum-otele/references/blank-screen.md +190 -0
  22. package/skills/bk-rum-otele/references/capabilities.md +175 -83
  23. package/skills/bk-rum-otele/references/configuration.md +226 -151
  24. package/skills/bk-rum-otele/references/data-model.md +156 -24
  25. package/skills/bk-rum-otele/references/errors-security.md +168 -0
  26. package/skills/bk-rum-otele/references/extensions.md +236 -0
  27. package/skills/bk-rum-otele/references/framework-integration.md +318 -75
  28. package/skills/bk-rum-otele/references/getting-started.md +186 -70
  29. package/skills/bk-rum-otele/references/network.md +258 -0
  30. package/skills/bk-rum-otele/references/performance.md +197 -0
  31. package/skills/bk-rum-otele/references/privacy.md +236 -67
  32. package/skills/bk-rum-otele/references/production.md +264 -0
  33. package/skills/bk-rum-otele/references/session-context.md +185 -0
  34. package/skills/bk-rum-otele/references/telemetry-reference.md +479 -51
  35. package/skills/bk-rum-otele/references/transport-sampling.md +318 -32
  36. package/skills/bk-rum-otele/references/troubleshooting.md +341 -151
  37. package/skills/bk-rum-otele/references/views-routing.md +211 -0
  38. package/skills/bk-rum-otele/references/concepts.md +0 -60
  39. package/skills/bk-rum-otele/references/custom-plugin.md +0 -170
  40. package/skills/bk-rum-otele/references/plugins-basic.md +0 -135
  41. package/skills/bk-rum-otele/references/plugins-error-security.md +0 -83
  42. package/skills/bk-rum-otele/references/plugins-experience.md +0 -124
  43. package/skills/bk-rum-otele/references/plugins-network.md +0 -32
  44. package/skills/bk-rum-otele/references/plugins.md +0 -62
package/README.md CHANGED
@@ -1,86 +1,103 @@
1
1
  # @blueking/open-telemetry
2
2
 
3
- 面向浏览器真实用户监控(RUM)的 OpenTelemetry SDK。它把 Session、View、Fetch/XHR、静态资源、错误、Web Vitals、用户操作、白屏、Long Task、WebSocket、CSP 和设备信息统一为原始 RUM Span,并通过 OTLP HTTP 上报。计数、分位数、错误分组等聚合全部由服务端完成。
3
+ 面向浏览器真实用户监控(RUM)的 OpenTelemetry SDK。它把 Session、View、Fetch/XHR、静态资源、错误、Web Vitals、Action、白屏、Long Task、WebSocket、CSP 与设备上下文建模为原始 Span,并通过 OTLP/HTTP JSON 上报。
4
4
 
5
- ## 快速接入
5
+ SDK 只创建一个 `WebTracerProvider`:
6
+
7
+ ```text
8
+ Browser events
9
+ → Session / View / Action runtime context
10
+ → RUM Span
11
+ → Session sampling + context/filter hooks
12
+ → Simple/BatchSpanProcessor
13
+ → POST <transport.endpoint>/v1/rum
14
+ ```
15
+
16
+ 不创建 Metric/Log Provider,不采集 HTTP Body 或 WebSocket message,也不在浏览器做计数、分位数、错误分组等聚合;这些工作由服务端从原始 Span 派生。
17
+
18
+ ## 安装
6
19
 
7
20
  ```bash
8
- npm install @blueking/open-telemetry
21
+ pnpm add @blueking/open-telemetry
9
22
  ```
10
23
 
11
24
  ```ts
12
25
  import { BkOpenTelemetry } from '@blueking/open-telemetry';
13
26
 
14
- export const bkOT = new BkOpenTelemetry({
27
+ export const rum = new BkOpenTelemetry({
15
28
  application: {
16
29
  name: 'order-center',
17
30
  environment: 'production',
18
- version: '1.2.0',
31
+ version: '2026.07.21',
19
32
  },
20
33
  transport: {
21
34
  endpoint: 'https://rum-collector.example.com',
22
- token: 'report-token',
23
- },
24
- session: {
25
- sampleRate: 0.2,
26
- },
27
- tracking: {
28
- view: {
29
- getPathGroup: url => new URL(url, location.href).pathname.replace(/\/orders\/[^/]+/, '/orders/:id'),
30
- },
35
+ token: 'limited-browser-write-token',
31
36
  },
32
37
  });
33
38
  ```
34
39
 
35
- `application.name` 与 `transport.endpoint` 必填。SDK 只有一个上报地址:`<endpoint>/v1/rum`。不创建 OpenTelemetry Metric/Log Provider,也不采集请求/响应 Body。
40
+ `application.name` 和 `transport.endpoint` 必填。endpoint 是根地址,SDK 去掉末尾斜杠后固定追加 `/v1/rum`。构造后默认自动启动。
36
41
 
37
- ## 默认能力
42
+ 完整接入步骤见[快速上手](./wikis/getting-started.md),上线前请继续阅读[生产接入指南](./wikis/production.md)。
38
43
 
39
- 只提供最小配置时,SDK 会自动启动并建立 Session 与 View。
44
+ ## 默认能力
40
45
 
41
- | 能力 | 默认 | 产出 |
42
- | --- | --- | --- |
43
- | Session / View | 开启且不可关闭 | `browser.session`、`browser.view` 生命周期 Span 与运行时关联字段 |
44
- | Fetch / XHR | 开启 | `browser.resource` CLIENT Span,可选 `traceparent` |
45
- | 静态资源 | 开启 | `browser.resource` Span、网络阶段属性 |
46
- | Error | 开启 | JS、Promise、资源加载错误 Span |
47
- | Web Vitals | 开启 | CLS/FCP/INP/LCP/TTFB 原始 Span |
48
- | Action | 开启 | 点击耗时和挫败信号 Span,不上报关联计数 |
49
- | Blank Screen | 开启 | 白屏 Span |
50
- | Device | 开启 | 浏览器、OS、硬件 Resource 属性,以及设备 ID、屏幕、网络运行时属性 |
51
- | Long Task / WebSocket / CSP | 关闭 | 按需通过 `tracking` 开启 |
46
+ | 能力 | 默认 | 浏览器来源 | 主要产出 |
47
+ | --- | --- | --- | --- |
48
+ | Session | 基础能力 | localStorage、用户活动、visibility | `browser.session` start/rotate/end |
49
+ | View / Router | auto | Navigation Timing、History、hash、BFCache | `browser.view` start/update/end |
50
+ | View Loading Time | 开 | 请求、DOM、资源、`window.open` activity | `view.loading_time` |
51
+ | Fetch/XHR | 开 | fetch、XMLHttpRequest、Resource Timing | `browser.resource` CLIENT |
52
+ | 静态资源 | 开 | Resource PerformanceObserver | `browser.resource` CLIENT |
53
+ | Error | 开 | error、unhandledrejection、资源加载错误 | 三类 Error Span + exception event |
54
+ | Web Vitals | 开 | web-vitals / PerformanceObserver | CLS/FCP/INP/LCP/TTFB Span |
55
+ | Action | 开 | click 与 activity | `action.click`、挫败信号 |
56
+ | Blank Screen | 开 | 页面稳定 + DOM 九点采样 | `browser.blank_screen` |
57
+ | Device | 开 | UA/UA-CH、Screen、Network Information | Resource 与运行时属性 |
58
+ | Long Task | 关 | Long Animation Frame / Long Tasks | `browser.long_task` |
59
+ | WebSocket | 关 | WebSocket 生命周期 | connect/open/error/close Span |
60
+ | CSP | 关 | securitypolicyviolation | `csp.violation` |
52
61
 
53
- 完整的浏览器 API、默认值、配置入口和遥测产出见[能力矩阵](./wikis/capabilities.md)。
62
+ Session 和 View 是普通 Span 的必要关联边界,不能通过一个 `tracking.session: false` 关闭。精确默认值、降级行为和成本见[能力矩阵](./wikis/capabilities.md)。
54
63
 
55
- ## 生产配置基线
64
+ ## 推荐生产配置
56
65
 
57
66
  ```ts
58
- const bkOT = new BkOpenTelemetry({
67
+ export const rum = new BkOpenTelemetry({
59
68
  application: {
60
69
  name: 'order-center',
61
70
  environment: 'production',
62
- version: '1.2.0',
71
+ version: window.__APP_VERSION__,
63
72
  },
64
73
  transport: {
65
74
  endpoint: 'https://rum-collector.example.com',
66
- token: 'report-token',
75
+ token: window.__RUM_WRITE_TOKEN__,
67
76
  processor: 'batch',
68
- batch: { maxQueueSize: 2048, maxExportBatchSize: 512 },
77
+ timeoutMillis: 10_000,
78
+ },
79
+ session: {
80
+ sampleRate: 0.2,
69
81
  },
70
- session: { sampleRate: 0.2 },
71
82
  tracking: {
72
83
  view: {
73
- getPathGroup: url => new URL(url, location.href).pathname.replace(/\/orders\/[^/]+/, '/orders/:id'),
84
+ getPathGroup(rawUrl) {
85
+ return new URL(rawUrl, location.href).pathname.replace(/\/orders\/[^/]+/, '/orders/:id');
86
+ },
74
87
  excludedActivityUrls: [/\/events\/stream(?:\?|$)/],
75
88
  },
76
89
  request: {
77
- allowedTracingUrls: [url => new URL(url).origin === 'https://api.example.com'],
78
90
  excludedUrls: [/\/health(?:\?|$)/],
91
+ allowedTracingUrls: [
92
+ rawUrl => new URL(rawUrl, location.href).origin === 'https://api.example.com',
93
+ ],
94
+ },
95
+ blankScreen: {
96
+ rootSelector: '#app',
79
97
  },
80
- blankScreen: { rootSelector: '#app' },
81
98
  },
82
99
  context: {
83
- user: { id: window.USER_ID },
100
+ user: { id: window.__USER__?.rumId },
84
101
  attributes: {
85
102
  page: () => ({ 'biz.module': 'order' }),
86
103
  },
@@ -95,57 +112,226 @@ const bkOT = new BkOpenTelemetry({
95
112
  });
96
113
  ```
97
114
 
98
- 生产接入至少确认以下事项:
115
+ 生产配置至少需要确认:
116
+
117
+ 1. 动态路由已转成低基数 `view.url_path_group`;
118
+ 2. URL path、user ID、错误和业务属性已完成隐私评审;
119
+ 3. Session 采样率有访问量和平均 Span/Session 的容量依据;
120
+ 4. 只向明确的自有 API 注入 `traceparent`,且 CORS 已允许该 header;
121
+ 5. 流式/长轮询请求不会无限延长 View loading time;
122
+ 6. SPA 的白屏 root 指向真实挂载节点;
123
+ 7. 同一 window 只有一个 SDK 实例;
124
+ 8. Collector 接受 OTLP JSON,并对 `/v1/rum`、鉴权、CORS、body limit 做过真实浏览器验证。
125
+
126
+ ## 上报协议
127
+
128
+ 最终请求:
129
+
130
+ ```text
131
+ POST <endpoint>/v1/rum
132
+ Content-Type: application/json
133
+ Authorization: Bearer <token> # 配置 token 时
134
+
135
+ {
136
+ "resourceSpans": [
137
+ {
138
+ "resource": { "attributes": [...] },
139
+ "scopeSpans": [
140
+ {
141
+ "scope": { "name": "bk-rum" },
142
+ "spans": [...]
143
+ }
144
+ ]
145
+ }
146
+ ]
147
+ }
148
+ ```
149
+
150
+ 当前使用 `@opentelemetry/exporter-trace-otlp-http@0.217.0` 的浏览器 JSON exporter:默认请求超时 10 秒、并发出口上限 30、不压缩;429/502/503/504 和部分网络错误可重试,并支持 `Retry-After`。
99
151
 
100
- 1. `getPathGroup` 已把动态 ID 转成低基数路由模板。
101
- 2. 跨域 Trace Header 白名单足够精确,服务端 CORS 已放行 `traceparent`。
102
- 3. `user.id`、URL、错误和业务属性满足隐私要求;SDK 不采集 HTTP Body。
103
- 4. SPA 的 `blankScreen.rootSelector` 指向真实挂载节点。
104
- 5. 同一页面只运行一个实例,避免重复 patch Fetch/XHR/WebSocket。
152
+ 默认 BatchSpanProcessor:queue 2048、batch 512、delay 5000ms、export timeout 30000ms。队列满后新结束的 Span 被丢弃。详细重试、keepalive、flush 与 CORS 规则见[上报协议、批处理与采样](./wikis/reference/transport.md)。
105
153
 
106
- ## 手动事件与 View
154
+ ## Session 采样与导出条件
107
155
 
108
156
  ```ts
109
- bkOT.setUser({ id: 'user-001' });
157
+ session: {
158
+ sampleRate: 0.2,
159
+ }
160
+ ```
161
+
162
+ - 范围 0–1,默认 1,越界截断;
163
+ - 根据 `application.name + session.id` 稳定 hash;
164
+ - 同一 Session 的决定一致,轮换后重新计算;
165
+ - 未采样时 `startSpan()` 返回 non-recording Span,手动事件不导出;
166
+ - 普通 Span 还必须有有效 `session.id` 与 `view.id`;
167
+ - `browser.session` 是允许没有 View 的例外;
168
+ - SDK 自身 `/v1/rum` 请求、显式 discard 和 beforeSend 返回 false 的 Span 会被过滤。
169
+
170
+ ## 手动事件
110
171
 
111
- bkOT.reportAction({
112
- name: '立即购买',
113
- attributes: { 'biz.order_id': 'O20260716001' },
172
+ ```ts
173
+ rum.reportAction({
174
+ name: 'submit-order',
175
+ attributes: { 'biz.order.channel': 'web' },
176
+ });
177
+
178
+ rum.reportCustomEvent({
179
+ name: 'checkout_completed',
180
+ attributes: { 'biz.payment.method': 'card' },
114
181
  });
115
182
 
116
- bkOT.reportCustomEvent({
117
- name: 'order.checkout',
118
- attributes: { 'biz.order_amount': 199 },
183
+ rum.reportCustomEvent({
184
+ name: 'checkout_failed',
185
+ error: new Error('payment rejected'),
119
186
  });
120
187
  ```
121
188
 
122
- 手动 View 最稳妥的接入方式是在 SDK 启动并建立 Session 后创建:
189
+ - `reportAction()` 立即创建 `action.custom`,不是持续关联后续请求的自动 Action;
190
+ - `reportCustomEvent()` 创建 `custom.<name>`;带 Error 时记录 exception 和 ERROR status;
191
+ - name 是检索维度,必须有限枚举,不能拼用户/订单/随机 ID;
192
+ - 两者都受当前 Session 采样约束。
193
+
194
+ 默认 `autoStart: true` 是异步启动,构造后立即同步调用的手动事件不会排队,可能因为 View 尚未建立而丢失。首个手动事件不能丢时,使用 `autoStart: false`,先 `await rum.start()`,manual View 再调用 `startView()`,之后才开放业务上报。
195
+
196
+ ## 用户和 View
123
197
 
124
198
  ```ts
125
- const bkOT = new BkOpenTelemetry({
199
+ rum.setUser({ id: 'stable-safe-user-id' });
200
+ rum.setUser({ id: undefined });
201
+
202
+ rum.setViewName('order-detail');
203
+ rum.setViewLoadingTime();
204
+ ```
205
+
206
+ SDK 不 hash `user.id`。View 默认自动监听 History/hash;query-only 变化不建新 View。
207
+
208
+ 需要完全由 Router 控制时:
209
+
210
+ ```ts
211
+ const rum = new BkOpenTelemetry({
126
212
  application: { name: 'manual-view-app' },
127
- autoStart: false,
128
213
  transport: { endpoint: 'https://rum-collector.example.com' },
214
+ autoStart: false,
129
215
  tracking: { view: { tracking: 'manual' } },
130
216
  });
131
217
 
132
- await bkOT.start();
133
- bkOT.startView({ name: '订单详情', url: location.href });
218
+ await rum.start();
219
+ rum.startView({ name: 'order-detail', url: location.href });
220
+ ```
221
+
222
+ 先 start 建立 Session,再 startView;不要同时使用自动和手动路由边界。Vue、React、Hash Router、SSR 与微前端示例见[框架与路由集成](./wikis/framework-integration.md)。
223
+
224
+ ## Consent
225
+
226
+ ```ts
227
+ const rum = new BkOpenTelemetry({
228
+ application: { name: 'consent-app' },
229
+ transport: { endpoint: 'https://rum-collector.example.com' },
230
+ privacy: { trackingConsent: 'not-granted' },
231
+ });
232
+
233
+ await rum.setTrackingConsent('granted');
234
+ await rum.setTrackingConsent('not-granted');
235
+ ```
236
+
237
+ 未授权时不安装插件/instrumentation。撤销会关闭采集、清理 Session 上下文并 flush 已结束的队列数据,但不会删除服务端已经接收的数据,也不会删除 localStorage 中仍有效的 Session 记录;再次授权后可能复用该 Session。
238
+
239
+ `trackingConsent: 'not-granted'` 控制的是采集和发送,不会推迟构造阶段的所有浏览器读取:只要 `tracking.device !== false`,`new BkOpenTelemetry()` 仍会读取 UA/UA-CH、内存和逻辑处理器等 Device Resource 快照,但此时不会发送。合规要求“授权前不能读取”时,应在授权后再构造实例。完整边界见[隐私、Consent 与字段治理](./wikis/reference/privacy.md)。
240
+
241
+ ## 扩展
242
+
243
+ SDK 扩展分两类:
244
+
245
+ ```ts
246
+ const rum = new BkOpenTelemetry({
247
+ application: { name: 'extensible-app' },
248
+ transport: { endpoint: 'https://rum-collector.example.com' },
249
+ autoStart: false,
250
+ });
251
+
252
+ rum.use(myRumPlugin);
253
+ rum.useInstrumentation(myOtelInstrumentation);
254
+ await rum.start();
255
+ ```
256
+
257
+ - `BkOTPlugin` 获得 Session/View/Action runtime context、脱敏、活动和 `startSpan()` 能力;
258
+ - OTel instrumentation 绑定到 SDK 私有 WebTracerProvider,但它的 Span 仍须通过 RUM 上下文过滤;
259
+ - `use()` / `useInstrumentation()` 只能在首次 start 前调用;
260
+ - Consent 撤销和 shutdown 会关闭扩展。
261
+
262
+ 契约、生命周期和历史时间关联见[插件与 OpenTelemetry 扩展](./wikis/features/extensions.md)。
263
+
264
+ 隐私 Hook 只处理 Resource/Span 的 attributes。`recordException()` 产生的 exception message/stacktrace 不对 `tracking.beforeSend` 暴露;敏感异常内容必须在产生前避免,或在 Collector 端二次清洗。
265
+
266
+ SDK 默认不附加独立页面属性;页面地址使用经过 `redactUrl` 处理的 `view.url`,低基数路由聚合使用 `view.url_path_group`。业务需要额外页面维度时,可通过 `context.attributes.page` 添加。
267
+
268
+ ## 数据模型和主要字段
269
+
270
+ OTLP 字段分五层:
271
+
272
+ 1. Resource:`service.name`、环境、版本、SDK、设备和 `session.sample_rate`;
273
+ 2. Scope:instrumentation name/version;
274
+ 3. Span envelope:trace/span ID、时间、kind、status;
275
+ 4. RUM attributes:Session/View/Action 关联、`event.*`、`span_type`、`result` 等;
276
+ 5. Span events:exception、Long Task script/attribution。
277
+
278
+ 主要分类:
279
+
280
+ | Span | 关键字段 |
281
+ | --- | --- |
282
+ | `browser.session` | phase、session.id/start_time、reason、previous_id |
283
+ | `browser.view` | phase、version、name、URL group、loading type/time、navigation timings |
284
+ | `browser.resource` | URL、method/status、resource type、size/protocol、DNS/TCP/TLS/TTFB/download |
285
+ | Error spans | message/source/handled、code location、exception event |
286
+ | `browser.web_vital` | metric/value/rating 与 attribution |
287
+ | `action.click` | action ID/name/target/loading time/frustration |
288
+ | `browser.blank_screen` | reason/score/sample counts/root/center element |
289
+ | `browser.long_task` | duration/blocking、entry type、script/attribution events |
290
+
291
+ 完整层级见[RUM 数据模型](./wikis/concepts/data-model.md),所有精确字段见[遥测字段字典](./wikis/reference/telemetry.md)。
292
+
293
+ ## 调试
294
+
295
+ ```ts
296
+ const rum = new BkOpenTelemetry({
297
+ application: { name: 'debug-app' },
298
+ transport: {
299
+ endpoint: 'https://rum-collector.example.com',
300
+ processor: 'simple',
301
+ },
302
+ session: { sampleRate: 1 },
303
+ debug: true,
304
+ autoStart: false,
305
+ });
306
+
307
+ await rum.start();
308
+
309
+ console.log({
310
+ sampled: rum.isSampled(),
311
+ session: rum.isSessionActive(),
312
+ view: rum.isViewActive(),
313
+ attributes: rum.getRuntimeAttributes(),
314
+ });
315
+
316
+ rum.reportCustomEvent({ name: 'rum_probe' });
317
+ await rum.flush();
134
318
  ```
135
319
 
136
- `reportAction()`、`reportCustomEvent()` 和 View 控制方法均受 Session 采样/有效状态约束。调试时先使用 `session.sampleRate: 1`。
320
+ 如果有 debug Span、没有请求,检查 CORS/endpoint/exporter;如果没有 Span,检查 Consent、启动、采样、Session/View、能力开关和 beforeSend。完整诊断树见[调试与排障](./wikis/reference/troubleshooting.md)。
137
321
 
138
322
  ## 文档导航
139
323
 
140
- | 目标 | 文档 |
324
+ | 任务 | 文档 |
141
325
  | --- | --- |
142
- | 首次接入 | [快速上手](./wikis/getting-started.md) |
143
- | 判断能采什么、默认是否开启、产出哪类信号 | [能力矩阵](./wikis/capabilities.md) |
144
- | 理解初始化、插件顺序、上下文、过滤和上报数据流 | [架构与数据流](./wikis/architecture.md) |
145
- | 查完整配置、默认值和约束 | [配置参考](./wikis/configuration.md) |
146
- | 查公开方法与导出符号 | [API 参考](./wikis/api.md) |
147
- | 查精确 RUM Span 名和字段 | [遥测参考](./wikis/telemetry-reference.md) |
148
- | 隐私、Consent 和低基数字段 | [隐私与公共属性](./wikis/privacy-attributes.md) |
149
- | 没有数据或数据异常 | [调试与排障](./wikis/troubleshooting.md) |
150
-
151
- 完整 Wiki 入口见 [`wikis/`](./wikis/README.md)。文档以当前 `src/` 和 `src/index.ts` 公开导出为事实来源,不承诺历史配置兼容。
326
+ | 首次安装和验证 | [快速上手](./wikis/getting-started.md) |
327
+ | 上线检查和容量/隐私/CORS | [生产接入指南](./wikis/production.md) |
328
+ | 判断支持范围、默认开关和降级 | [能力矩阵](./wikis/capabilities.md) |
329
+ | Vue/React/Router/SSR/微前端 | [框架与路由集成](./wikis/framework-integration.md) |
330
+ | 理解模块、启动、过滤和导出 | [架构与数据流](./wikis/concepts/architecture.md) |
331
+ | 理解 OTLP 层级和字段归属 | [RUM 数据模型](./wikis/concepts/data-model.md) |
332
+ | 查全部配置和默认值 | [配置参考](./wikis/reference/configuration.md) |
333
+ | 查类、方法、类型和扩展 API | [API 参考](./wikis/reference/api.md) |
334
+ | 查 Span 名和逐字段定义 | [遥测字段字典](./wikis/reference/telemetry.md) |
335
+ | 查协议、batch、重试和采样 | [上报协议、批处理与采样](./wikis/reference/transport.md) |
336
+ | 查 Consent 和脱敏边界 | [隐私、Consent 与字段治理](./wikis/reference/privacy.md) |
337
+ | 解决无数据、重复、缺字段和误报 | [调试与排障](./wikis/reference/troubleshooting.md) |