@blueking/open-telemetry 0.0.22-beta.1 → 0.0.23

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 (45) hide show
  1. package/README.md +258 -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 +10 -10
  5. package/dist/core/runtime-context.d.ts +1 -1
  6. package/dist/core/sdk.d.ts +1 -1
  7. package/dist/index.d.ts +2 -2
  8. package/dist/index.js +608 -662
  9. package/dist/index.js.map +1 -1
  10. package/dist/plugins/blank-screen.d.ts +1 -1
  11. package/dist/plugins/common.d.ts +2 -2
  12. package/dist/plugins/device.d.ts +2 -2
  13. package/dist/plugins/resource.d.ts +1 -0
  14. package/dist/plugins/web-vitals.d.ts +1 -3
  15. package/dist/schema/attributes.d.ts +6 -7
  16. package/dist/schema/span.d.ts +24 -15
  17. package/package.json +1 -1
  18. package/skills/bk-rum-otele/SKILL.md +31 -30
  19. package/skills/bk-rum-otele/references/actions.md +166 -0
  20. package/skills/bk-rum-otele/references/api.md +248 -215
  21. package/skills/bk-rum-otele/references/architecture.md +139 -37
  22. package/skills/bk-rum-otele/references/blank-screen.md +190 -0
  23. package/skills/bk-rum-otele/references/capabilities.md +175 -83
  24. package/skills/bk-rum-otele/references/configuration.md +226 -151
  25. package/skills/bk-rum-otele/references/data-model.md +157 -24
  26. package/skills/bk-rum-otele/references/errors-security.md +168 -0
  27. package/skills/bk-rum-otele/references/extensions.md +237 -0
  28. package/skills/bk-rum-otele/references/framework-integration.md +318 -75
  29. package/skills/bk-rum-otele/references/getting-started.md +186 -70
  30. package/skills/bk-rum-otele/references/network.md +258 -0
  31. package/skills/bk-rum-otele/references/performance.md +198 -0
  32. package/skills/bk-rum-otele/references/privacy.md +236 -67
  33. package/skills/bk-rum-otele/references/production.md +266 -0
  34. package/skills/bk-rum-otele/references/session-context.md +185 -0
  35. package/skills/bk-rum-otele/references/telemetry-reference.md +500 -51
  36. package/skills/bk-rum-otele/references/transport-sampling.md +321 -32
  37. package/skills/bk-rum-otele/references/troubleshooting.md +341 -151
  38. package/skills/bk-rum-otele/references/views-routing.md +211 -0
  39. package/skills/bk-rum-otele/references/concepts.md +0 -60
  40. package/skills/bk-rum-otele/references/custom-plugin.md +0 -170
  41. package/skills/bk-rum-otele/references/plugins-basic.md +0 -135
  42. package/skills/bk-rum-otele/references/plugins-error-security.md +0 -86
  43. package/skills/bk-rum-otele/references/plugins-experience.md +0 -124
  44. package/skills/bk-rum-otele/references/plugins-network.md +0 -32
  45. package/skills/bk-rum-otele/references/plugins.md +0 -62
@@ -2,97 +2,189 @@
2
2
 
3
3
  # 能力矩阵
4
4
 
5
- 本页回答四个问题:SDK 能采什么、默认是否启用、依赖哪个浏览器能力、最终上报什么。精确名称与属性请继续查[遥测参考](./telemetry-reference.md)。
6
-
7
- ## 总览
8
-
9
- | 能力 | 配置入口 | 默认 | 浏览器入口 | 原始 RUM Span |
10
- | --- | --- | --- | --- | --- |
11
- | Session | `session` | 必选基础能力 | `localStorage`、用户活动、页面可见性 | `browser.session` start/rotate/end |
12
- | View | `tracking.view` | 自动模式 | Navigation Timing、History、hash、BFCache、DOM Mutation | `browser.view` start/update/end |
13
- | Fetch/XHR | `tracking.request` | 开 | `fetch`、`XMLHttpRequest`、Resource Timing | `browser.resource` |
14
- | 静态资源 | `tracking.resource` | 开 | Resource PerformanceObserver | `browser.resource` |
15
- | JS / Promise / 资源错误 | `tracking.error` | 开 | `error`、`unhandledrejection` | 三类 `browser.*error` |
16
- | Web Vitals | `tracking.webVitals` | 开 | `web-vitals`、Layout Shift、Event Timing | `browser.web_vital` |
17
- | Action | `tracking.action` | 开 | click、DOM、请求与活动总线 | `action.click` |
18
- | 手动 Action | `reportAction()` | 可调用 | 业务调用 | `action.custom` |
19
- | 自定义事件 | `reportCustomEvent()` | 可调用 | 业务调用 | `custom.<name>` |
20
- | 白屏 | `tracking.blankScreen` | 开 | DOM 命中测试、View 活动 | `browser.blank_screen` |
21
- | 设备 | `tracking.device` | 开 | UA、UA-CH、Screen、Network Information | Resource 与运行时公共属性 |
22
- | Long Task | `tracking.longTask` | 关 | Long Animation Frames / Long Tasks | `browser.long_task` |
23
- | WebSocket | `tracking.websocket` | 关 | `WebSocket` Proxy | `browser.websocket` connect/open/error/close |
24
- | CSP | `tracking.cspViolation` | 关 | `securitypolicyviolation` | `csp.violation` |
25
- | 自定义插件 | `extensions.plugins` / `use()` | 无 | 由插件决定 | `context.startSpan()` |
26
- | OTel instrumentation | `extensions.instrumentations` / `useInstrumentation()` | 无 | 由 instrumentation 决定 | 支持 |
27
-
28
- “默认开”表示获得 Consent 且 SDK 已启动后启用。是否真正导出还受 `enabled`、Session 采样和 Session/View 有效性控制。
29
-
30
- ## 能力边界
31
-
32
- ### SDK 直接负责
33
-
34
- - 创建和轮换 Session,划分初始加载、SPA、BFCache、手动和 Session 续期 View。
35
- - 统一 patch Fetch/XHR;请求 span、活动追踪、Trace Header 和 Resource Timing 共用同一生命周期。
36
- - 把浏览器事件归一为 `span_type`、`span_subtype`、`result`、`error_type` 等字段。
37
- - 自动为 Span 关联 `session.id`、`view.id` 和 `action.id`。
38
- - 在 exporter 前执行采样、有效上下文、自上报请求和 `tracking.beforeSend` 过滤。
39
-
40
- ### SDK 不负责
41
-
42
- - 不聚合 `session.duration`、影响用户数、地理信息、Trace 关键路径等后端指标。
43
- - 不自动判断业务字段是否敏感,也不 hash `user.id`。
44
- - 不采集 HTTP 请求/响应 Body。
45
- - 不在浏览器生成 Counter、Histogram、分位数、错误指纹或跨事件计数。
46
- - 不保证浏览器未暴露的数据,例如缺少 `Timing-Allow-Origin` 的跨域资源网络阶段。
47
-
48
- ## 默认开启与关闭
5
+ 本页用于快速判断:是否默认启用、监听什么浏览器来源、产出什么 Span、在哪些情况下退化。精确算法和字段继续进入对应专题页。
6
+
7
+ ## 总体边界
8
+
9
+ SDK 只产生原始 RUM Span:
10
+
11
+ - 一个 `WebTracerProvider`;
12
+ - 一个 OTLP/HTTP JSON 出口 `<endpoint>/v1/rum`;
13
+ - 不创建 Metric/Log Provider;
14
+ - 不在浏览器聚合计数、分位数、直方图或错误指纹;
15
+ - 服务端从原始 Session/View/Action/Resource/Error/Vital Span 派生统计。
16
+
17
+ 普通 Span 必须命中 Session 采样,并关联有效 `session.id` 与 `view.id` 才能导出;Session 生命周期 Span 可以没有 View。
18
+
19
+ ## 全部能力
20
+
21
+ | 能力 | 配置/API | 默认 | 浏览器来源 | 主要 Span | 详情 |
22
+ | --- | --- | --- | --- | --- | --- |
23
+ | Session | `session` | 基础能力 | localStorage、活动、visibility、storage | `browser.session` | [Session 上下文](./session-context.md) |
24
+ | View / Router | `tracking.view` | auto | Navigation Timing、History、hash、BFCache | `browser.view` | [View 与路由](./views-routing.md) |
25
+ | View Loading Time | `tracking.view.loadingTime` | 开 | 请求/资源/DOM/`window.open` 活动 | `browser.view` update | [View 与路由](./views-routing.md) |
26
+ | Fetch/XHR | `tracking.request` | 开 | fetch、XMLHttpRequest、Resource Timing | `browser.resource` CLIENT | [网络](./network.md) |
27
+ | Trace Header | `allowedTracingUrls` | 无白名单 | W3C Trace Context | 被观测请求的 `traceparent` | [网络](./network.md) |
28
+ | 静态资源 | `tracking.resource` | 开 | Resource PerformanceObserver | `browser.resource` CLIENT | [网络](./network.md) |
29
+ | JS Error | `tracking.error` | 开 | window error | `browser.error` | [错误与安全](./errors-security.md) |
30
+ | Promise rejection | `tracking.error` | 开 | unhandledrejection | `browser.unhandledrejection` | [错误与安全](./errors-security.md) |
31
+ | 资源加载错误 | `tracking.error` | 开 | capture error | `browser.resource_error` | [错误与安全](./errors-security.md) |
32
+ | Web Vitals | `tracking.webVitals` | 开 | web-vitals、PerformanceObserver | `browser.web_vital` | [性能体验](./performance.md) |
33
+ | 自动 Action | `tracking.action` | 开 | click、Activity 总线 | `action.click` | [用户操作](./actions.md) |
34
+ | 手动 Action | `reportAction()` | 可调用 | 业务调用 | `action.custom` | [用户操作](./actions.md) |
35
+ | Custom event | `reportCustomEvent()` | 可调用 | 业务调用 | `custom.<name>` | [API](./api.md) |
36
+ | Blank Screen | `tracking.blankScreen` | 开 | DOM 九点采样、页面活动 | `browser.blank_screen` | [白屏](./blank-screen.md) |
37
+ | Device | `tracking.device` | 开 | UA/UA-CH、Screen、Network Information | Resource/运行时属性 | [Session 上下文](./session-context.md) |
38
+ | Long Task | `tracking.longTask` | 关 | LoAF 或 Long Tasks | `browser.long_task` | [性能体验](./performance.md) |
39
+ | CSP | `tracking.cspViolation` | 关 | securitypolicyviolation | `csp.violation` | [错误与安全](./errors-security.md) |
40
+ | WebSocket | `tracking.websocket` | 关 | WebSocket constructor/events | `browser.websocket` CLIENT | [网络](./network.md) |
41
+ | RUM Plugin | `extensions.plugins` / `use()` | 无 | 插件决定 | `context.startSpan()` | [扩展](./extensions.md) |
42
+ | OTel Instrumentation | `extensions.instrumentations` / `useInstrumentation()` | 无 | instrumentation 决定 | instrumentation Span | [扩展](./extensions.md) |
43
+
44
+ “默认开”仍要求 `enabled: true`、Consent 为 granted、SDK 已 start、Session 被采样。浏览器缺少所需 API 时对应插件通常静默降级。
45
+
46
+ ## 默认开关配置展开
47
+
48
+ 以下配置与只传 application/transport 的能力开关等价:
49
49
 
50
50
  ```ts
51
- new BkOpenTelemetry({
52
- application: { name: 'capability-demo' },
53
- transport: { endpoint: 'https://collector.example.com' },
54
- tracking: {
55
- request: true,
56
- resource: true,
57
- error: true,
58
- webVitals: true,
59
- action: true,
60
- blankScreen: true,
61
- device: true,
62
- longTask: false,
63
- websocket: false,
64
- cspViolation: false,
51
+ tracking: {
52
+ request: true,
53
+ resource: true,
54
+ error: true,
55
+ webVitals: true,
56
+ action: true,
57
+ blankScreen: true,
58
+ device: true,
59
+ longTask: false,
60
+ websocket: false,
61
+ cspViolation: false,
62
+ view: {
63
+ tracking: 'auto',
64
+ loadingTime: true,
65
65
  },
66
- });
66
+ }
67
67
  ```
68
68
 
69
- Session 与 View 是导出有效性边界,不提供关闭开关。`tracking.view` 只配置自动/手动模式、稳定耗时和路由分组。
69
+ Session、Activity、Page View 关联基础不提供整体关闭开关。`tracking.view` 可以改 manual,但仍需要 View 才能导出普通 Span。
70
70
 
71
- ## 浏览器降级行为
71
+ ## Session 与公共上下文
72
72
 
73
- | 条件 | 行为 |
73
+ | 项目 | 当前行为 |
74
74
  | --- | --- |
75
- | 无 `PerformanceObserver` 或不支持 `resource` | 跳过静态资源观察和请求网络阶段匹配;Fetch/XHR 本身仍可采集 |
76
- | 不支持 Long Animation Frames | Long Task 插件尝试回退 Long Tasks API |
77
- | 两种 Long Task API 都不支持 | 跳过 Long Task,不抛出业务异常 |
78
- | 跨域资源无 `Timing-Allow-Origin` | 只保留浏览器可见的总耗时/体积,不伪造网络阶段 |
79
- | 无 Network Information / UA-CH | 只写入可获得的设备字段 |
80
- | 无 `localStorage` 或访问失败 | Session/Device 持久化退回内存 |
81
- | 插件初始化抛错 | 隔离该插件;`debug: true` 时输出 warning,其余插件继续启动 |
75
+ | 无活动超时 | 固定 15 分钟 |
76
+ | 最大生命周期 | 固定 4 小时 |
77
+ | 跨 Tab | localStorage + storage event |
78
+ | 存储失败 | 回退进程内存 |
79
+ | 采样 | `application.name + session.id` 稳定 hash |
80
+ | 用户 | 业务传 `user.id`,原样透传 |
81
+ | 设备 ID | 默认每次 Device 插件初始化生成;可选持久化 |
82
82
 
83
- ## 成本与隐私提示
83
+ Session Span 包括 start/rotate/end;View、Action、Resource 等通过 ID 属性关联,不要求它们共享同一个 Trace。
84
84
 
85
- | 能力 | 主要成本/风险 | 建议 |
85
+ ## View 与页面体验
86
+
87
+ View 类型:
88
+
89
+ - `initial_load`:首屏;
90
+ - `route_change`:SPA/手动 route;
91
+ - `bf_cache`:BFCache 恢复;
92
+ - `session_renewal`:Session 轮换后重建 View。
93
+
94
+ 每个 View 产生 start/update/end 生命周期 Span,`view.version` 递增。Loading Time 等待页面活动安静后更新;隐藏页面会取消当前自动计算,业务可用 `setViewLoadingTime()` 手动确认。
95
+
96
+ 自动 mode 不因 query-only 改变创建 View。默认 path group 只是 pathname,不会自动模板化动态 ID。
97
+
98
+ ## 网络与资源
99
+
100
+ Fetch/XHR 插件统一负责:
101
+
102
+ - 建 `browser.resource` CLIENT Span;
103
+ - 请求结果和 HTTP status;
104
+ - 可选 W3C `traceparent`;
105
+ - 与 Resource Timing 在最多 200ms 内匹配;
106
+ - 向 View/Action activity 通知开始与结束。
107
+
108
+ 静态资源插件消费 Resource PerformanceEntry。跨域没有 `Timing-Allow-Origin` 时,只发送浏览器能看到的字段,不猜测 DNS/TCP/TLS。
109
+
110
+ WebSocket 仅记录 connect/open/error/close,不记录 message、payload、数量或字节。
111
+
112
+ ## 错误与安全
113
+
114
+ 自动 Error 会记录:
115
+
116
+ - 归一 Span 分类和 ERROR status;
117
+ - error message/source/handled;
118
+ - 可用时 exception type/message/stack;
119
+ - JS 行列/文件或资源 URL/tag。
120
+
121
+ SDK 不做错误节流、fingerprint 和分组。CSP 插件每次 violation 建原始 Span,可能产生高事件量并包含原始策略。
122
+
123
+ ## Web Vitals 与 Long Task
124
+
125
+ Vitals:CLS、FCP、INP、LCP、TTFB。每个指标保留 value、rating 和浏览器可提供的 attribution。CLS 和 INP 按当前 View 聚合边界定稿,不是全站一个永久累计值。
126
+
127
+ Long Task 优先 Long Animation Frame 获取脚本归因,不支持时回退 Long Tasks。默认关闭,threshold 默认 50ms。
128
+
129
+ ## Action 与白屏
130
+
131
+ Action 以点击后的副作用窗口建模,关联请求、DOM、错误和页面活动。可识别:
132
+
133
+ - rage click:短时间相近位置的点击链;
134
+ - error click:Action 窗口内出现错误;
135
+ - dead click:没有有效副作用且满足排除条件。
136
+
137
+ 默认只从显式 data attribute 命名,不读取任意 DOM 文本。
138
+
139
+ 白屏在页面活动稳定后,对视口九点采样并连续确认两次;每个 View 最多上报一次。它是启发式检测,不适合所有 Canvas/iframe/非常规布局。
140
+
141
+ ## 浏览器降级矩阵
142
+
143
+ | 缺失/限制 | 降级结果 |
144
+ | --- | --- |
145
+ | `PerformanceObserver` 不支持 resource | Fetch/XHR 基础 Span仍可有;资源时序和静态资源跳过 |
146
+ | Long Animation Frame 不支持 | 尝试 Long Tasks API |
147
+ | 两种长任务 API 都不支持 | 不产生 Long Task,不阻断页面 |
148
+ | Event Timing/指标 API 不支持 | 对应 Vital 缺失,不伪造 |
149
+ | 跨域资源无 TAO | 详细 timing/size 可能缺失 |
150
+ | Network Information 不支持 | network.* 运行时字段缺失 |
151
+ | UA-CH 不支持 | 回退 userAgent 解析 |
152
+ | localStorage 抛错 | Session/Device 持久化退回内存 |
153
+ | `elementsFromPoint` 不支持 | 白屏使用单个 `elementFromPoint` |
154
+ | 插件 init 抛错 | 隔离插件;debug 模式警告 |
155
+ | 页面快速退出 | flush/keepalive 尽力发送,不保证交付 |
156
+
157
+ ## SDK 明确不提供
158
+
159
+ - HTTP request/response Body;
160
+ - WebSocket message;
161
+ - OpenTelemetry Metric/Log;
162
+ - 客户端 Counter/Histogram/分位数;
163
+ - IP、geo、ASN;
164
+ - 错误 fingerprint/group;
165
+ - Session replay;`session.has_replay` 当前固定 false;
166
+ - 自动 user.id hash;
167
+ - 自动动态路由识别;
168
+ - 离线持久队列和 exactly-once 交付;
169
+ - 服务端 trace 聚合、留存、权限与删除。
170
+
171
+ ## 成本和风险选择
172
+
173
+ | 入口 | 主要影响 | 建议 |
86
174
  | --- | --- | --- |
87
- | `session.sampleRate` | 决定 RUM Span 总体数据量 | 按应用容量设置;排障临时设为 `1` |
88
- | Action 文本命名 | DOM 文本可能包含用户输入 | 保持 `nameCollection: 'explicit'`,关键元素使用 `data-bk-action-name` |
89
- | Device 持久 ID | 支持跨 Session 关联 | 默认不持久化;需取得合规依据后再开启 |
90
- | Long Task | 产生 Span 与脚本归因信息 | 仅性能分析场景开启,结合采样控制 |
91
- | WebSocket | Proxy 全局构造器并监听连接生命周期 | 不包裹 `send()`,不采集消息内容、数量或字节数 |
92
-
93
- ## 下一步
94
-
95
- - 配置每项能力:[配置参考](./configuration.md)
96
- - 理解启动与上报链路:[架构与数据流](./architecture.md)
97
- - 查看单个插件实现行为:[插件总览](./plugins.md)
98
- - 查看精确遥测名称和属性:[遥测参考](./telemetry-reference.md)
175
+ | `session.sampleRate` | 全局 Span 量 | 先测平均 Span/Session,再定比例 |
176
+ | `resource` | 页面资源多时事件量大 | 通常保留;用服务端采样/聚合 |
177
+ | `longTask` | 卡顿高时大量事件和脚本字段 | 问题驱动、小流量开启 |
178
+ | `cspViolation` | 策略异常时事件风暴 | 先评估并脱敏 original policy |
179
+ | `websocket` | 全局构造器 patch、长连接 | 只在连接可观测确有需求时开 |
180
+ | Action `text` | DOM 文本隐私 | 保持 explicit,使用稳定 data name |
181
+ | Device persistent ID | 跨 Session 关联 | 需 Consent/存储政策支持 |
182
+ | traceparent | CORS 与第三方泄露 | 精确 allowlist |
183
+
184
+ ## 阅读路径
185
+
186
+ - 想先跑起来:[快速上手](./getting-started.md)
187
+ - 准备上线:[生产接入指南](./production.md)
188
+ - 查全部配置:[配置参考](./configuration.md)
189
+ - 查 Span 和字段:[遥测字段字典](./telemetry-reference.md)
190
+ - 理解内部流程:[架构与数据流](./architecture.md)