@blueking/open-telemetry 0.0.14 → 0.0.16
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.
- package/README.md +96 -641
- package/dist/bk-rum.global.js +9 -9
- package/dist/bk-rum.global.js.map +1 -1
- package/dist/core/action-activity.d.ts +28 -0
- package/dist/core/config.d.ts +113 -93
- package/dist/core/page-activity.d.ts +14 -0
- package/dist/core/plugin.d.ts +23 -6
- package/dist/core/processor.d.ts +25 -4
- package/dist/core/request-timing.d.ts +5 -0
- package/dist/core/runtime-context.d.ts +51 -3
- package/dist/core/sampling.d.ts +5 -1
- package/dist/core/sdk.d.ts +29 -10
- package/dist/core/url.d.ts +4 -1
- package/dist/index.d.ts +12 -14
- package/dist/index.js +2184 -1175
- package/dist/index.js.map +1 -1
- package/dist/plugins/action.d.ts +6 -2
- package/dist/plugins/activity.d.ts +6 -0
- package/dist/plugins/blank-screen.d.ts +17 -0
- package/dist/plugins/common.d.ts +11 -3
- package/dist/plugins/device.d.ts +2 -0
- package/dist/plugins/long-task.d.ts +3 -12
- package/dist/plugins/page-view.d.ts +1 -0
- package/dist/plugins/request-body.d.ts +14 -0
- package/dist/plugins/resource.d.ts +17 -1
- package/dist/plugins/session-state.d.ts +18 -0
- package/dist/plugins/session.d.ts +4 -4
- package/dist/plugins/web-vitals.d.ts +74 -0
- package/dist/schema/attributes.d.ts +31 -10
- package/dist/schema/span.d.ts +4 -12
- package/package.json +3 -7
- package/skills/bk-rum-otele/SKILL.md +39 -33
- package/skills/bk-rum-otele/evals/evals.json +3 -3
- package/skills/bk-rum-otele/references/api.md +247 -114
- package/skills/bk-rum-otele/references/architecture.md +141 -0
- package/skills/bk-rum-otele/references/capabilities.md +100 -0
- package/skills/bk-rum-otele/references/concepts.md +40 -111
- package/skills/bk-rum-otele/references/configuration.md +202 -254
- package/skills/bk-rum-otele/references/custom-plugin.md +22 -7
- package/skills/bk-rum-otele/references/data-model.md +17 -10
- package/skills/bk-rum-otele/references/framework-integration.md +25 -17
- package/skills/bk-rum-otele/references/getting-started.md +42 -86
- package/skills/bk-rum-otele/references/plugins.md +232 -138
- package/skills/bk-rum-otele/references/privacy.md +47 -34
- package/skills/bk-rum-otele/references/telemetry-reference.md +74 -45
- package/skills/bk-rum-otele/references/transport-sampling.md +79 -0
- package/skills/bk-rum-otele/references/troubleshooting.md +71 -37
- package/dist/plugins/http-body.d.ts +0 -3
- package/dist/plugins/route-timing.d.ts +0 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<!-- 本文件由 packages/open-telemetry/scripts/gen-skill-references.mjs 从 wikis 自动生成,请勿手改。 -->
|
|
2
|
+
|
|
3
|
+
# 能力矩阵
|
|
4
|
+
|
|
5
|
+
本页回答四个问题:SDK 能采什么、默认是否启用、依赖哪个浏览器能力、最终上报什么。精确名称与属性请继续查[遥测参考](./telemetry-reference.md)。
|
|
6
|
+
|
|
7
|
+
## 总览
|
|
8
|
+
|
|
9
|
+
| 能力 | 配置入口 | 默认 | 浏览器入口 | Trace | Metric | Log |
|
|
10
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
11
|
+
| Session | `session` | 必选基础能力 | `localStorage`、用户活动、页面可见性 | — | — | `session.start` / `session.rotate` |
|
|
12
|
+
| View | `tracking.view` | 自动模式 | Navigation Timing、History、hash、BFCache、DOM Mutation | `browser.view` | `browser.view.loading_time` | `browser.view` Snapshot |
|
|
13
|
+
| Fetch/XHR | `tracking.request` | 开 | `fetch`、`XMLHttpRequest`、Resource Timing | `browser.resource` | — | 可选 `browser.request.body` |
|
|
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` | 两个 Histogram | — |
|
|
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` | `browser.blank_screen.count` | — |
|
|
21
|
+
| 设备 | `tracking.device` | 开 | UA、UA-CH、Screen、Network Information | 作为公共属性 | — | 作为公共属性 |
|
|
22
|
+
| Long Task | `tracking.longTask` | 关 | Long Animation Frames / Long Tasks | `browser.long_task` | 三个聚合指标 | — |
|
|
23
|
+
| WebSocket | `tracking.websocket` | 关 | `WebSocket` Proxy | `websocket.connect` | 四个聚合指标 | error / close |
|
|
24
|
+
| CSP | `tracking.cspViolation` | 关 | `securitypolicyviolation` | `csp.violation` | — | — |
|
|
25
|
+
| 自定义插件 | `extensions.plugins` / `use()` | 无 | 由插件决定 | 支持 | 无稳定公共辅助 API | 推荐 `emitLog()` |
|
|
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 和 Body 采集共用同一生命周期。
|
|
36
|
+
- 把浏览器事件归一为 `span_type`、`result`、`error_type`、`duration_bucket`、`target_*` 等字段。
|
|
37
|
+
- 自动为 Span/Log 关联 `session.id`、`view.id`,为 Metric 保留低基数 `view.url_path_group`。
|
|
38
|
+
- 在 exporter 前执行采样、有效上下文、自上报请求和 `tracking.beforeSend` 过滤。
|
|
39
|
+
|
|
40
|
+
### SDK 不负责
|
|
41
|
+
|
|
42
|
+
- 不聚合 `session.duration`、影响用户数、地理信息、Trace 关键路径等后端指标。
|
|
43
|
+
- 不自动判断业务字段是否敏感,也不 hash `user.id`。
|
|
44
|
+
- 不默认采集 HTTP 请求/响应 Body。
|
|
45
|
+
- 不把唯一的 `session.id`、`view.id`、`action.id` 放入 Metric labels。
|
|
46
|
+
- 不保证浏览器未暴露的数据,例如缺少 `Timing-Allow-Origin` 的跨域资源网络阶段。
|
|
47
|
+
|
|
48
|
+
## 默认开启与关闭
|
|
49
|
+
|
|
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,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Session 与 View 是导出有效性边界,不提供关闭开关。`tracking.view` 只配置自动/手动模式、稳定耗时和路由分组。
|
|
70
|
+
|
|
71
|
+
## 浏览器降级行为
|
|
72
|
+
|
|
73
|
+
| 条件 | 行为 |
|
|
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,其余插件继续启动 |
|
|
82
|
+
|
|
83
|
+
## 成本与隐私提示
|
|
84
|
+
|
|
85
|
+
| 能力 | 主要成本/风险 | 建议 |
|
|
86
|
+
| --- | --- | --- |
|
|
87
|
+
| `session.sampleRate` | 决定三类信号总体数据量 | 按应用容量设置;排障临时设为 `1` |
|
|
88
|
+
| Metric 自定义维度 | 高基数会放大时序数量 | 只放应用、租户类别、路由模板等低基数字段 |
|
|
89
|
+
| Request Body | 可能包含凭证、个人数据,且增加网络体积 | 默认关闭;开启时限制类型/大小并强制脱敏 |
|
|
90
|
+
| Action 文本命名 | DOM 文本可能包含用户输入 | 保持 `nameCollection: 'explicit'`,关键元素使用 `data-bk-action-name` |
|
|
91
|
+
| Device 持久 ID | 支持跨 Session 关联 | 默认不持久化;需取得合规依据后再开启 |
|
|
92
|
+
| Long Task | 产生 Span 与脚本归因信息 | 仅性能分析场景开启,结合采样控制 |
|
|
93
|
+
| WebSocket | Proxy 全局构造器并统计消息字节 | 同页面单实例;不采集消息内容 |
|
|
94
|
+
|
|
95
|
+
## 下一步
|
|
96
|
+
|
|
97
|
+
- 配置每项能力:[配置参考](./configuration.md)
|
|
98
|
+
- 理解启动与上报链路:[架构与数据流](./architecture.md)
|
|
99
|
+
- 查看单个插件实现行为:[插件总览](./plugins.md)
|
|
100
|
+
- 查看精确遥测名称和属性:[遥测参考](./telemetry-reference.md)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
- Trace:用于描述一次有起止时间的行为,例如页面访问、接口请求、资源加载、用户点击、长任务。
|
|
12
12
|
- Metric:用于描述可聚合的数值,例如 Web Vitals、长任务数量、WebSocket 消息大小、空白屏结果。
|
|
13
|
-
- Log
|
|
13
|
+
- Log:用于描述离散事件或诊断信息,例如 Session 生命周期、View Snapshot、请求 Body 和 WebSocket 状态。
|
|
14
14
|
|
|
15
15
|
示例:手动创建一个业务 span。
|
|
16
16
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { BkOpenTelemetry } from '@blueking/open-telemetry';
|
|
19
19
|
|
|
20
20
|
const bkOT = new BkOpenTelemetry({
|
|
21
|
-
|
|
21
|
+
application: { name: 'checkout-web' },
|
|
22
22
|
transport: { endpoint: 'https://rum-collector.example.com' },
|
|
23
23
|
});
|
|
24
24
|
|
|
@@ -36,7 +36,7 @@ SDK 会维护运行时公共上下文,并自动挂到后续 span/log 上:
|
|
|
36
36
|
|
|
37
37
|
- `user.id`:由接入方提供,SDK 原样透传,不 hash、不脱敏、不改写。
|
|
38
38
|
- `session.id`:由 session 插件生成和轮换,用于关联同一次访问会话。
|
|
39
|
-
- `view.id` / `view.url` / `view.url_path_group`:由
|
|
39
|
+
- `view.id` / `view.name` / `view.url` / `view.url_path_group`:由 View 管理器维护,用于关联同一个页面或路由实例。
|
|
40
40
|
|
|
41
41
|
示例:登录后更新用户上下文。
|
|
42
42
|
|
|
@@ -46,34 +46,34 @@ bkOT.setUser({
|
|
|
46
46
|
});
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
示例:手动模式由业务路由系统创建 View。
|
|
50
50
|
|
|
51
51
|
```ts
|
|
52
|
-
bkOT.
|
|
53
|
-
|
|
52
|
+
// 前提:autoStart: false,且已经 await bkOT.start() 建立 Session。
|
|
53
|
+
bkOT.startView({
|
|
54
|
+
name: '商品详情',
|
|
54
55
|
url: window.location.href,
|
|
55
|
-
|
|
56
|
-
loadingType: 'route_change',
|
|
56
|
+
attributes: { 'biz.owner': 'product-team' },
|
|
57
57
|
});
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
##
|
|
60
|
+
## 内置采集与扩展
|
|
61
61
|
|
|
62
62
|
SDK 将能力分为两类:
|
|
63
63
|
|
|
64
|
-
1.
|
|
65
|
-
2. RUM
|
|
64
|
+
1. 内置采集:`tracking.request` 使用 SDK 自有的统一 Fetch/XHR 生命周期,负责 patch 浏览器 API、创建 `browser.resource` CLIENT Span、Trace Header 和请求 Performance Timing 匹配。
|
|
65
|
+
2. RUM 插件:View、Session、`resource`、`error`、`webVitals`、`blankScreen`、`device` 等,负责主动产生 RUM 归一数据。
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
用户交互统一由 SDK 的 `action` 插件采集。接入额外 instrumentation 时,应避免再注册覆盖 Fetch/XHR 或用户交互的探针,以免重复上报。
|
|
68
68
|
|
|
69
69
|
```ts
|
|
70
70
|
new BkOpenTelemetry({
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
plugins: {
|
|
71
|
+
application: { name: 'demo' },
|
|
72
|
+
transport: { endpoint: 'https://rum-collector.example.com' },
|
|
73
|
+
tracking: {
|
|
75
74
|
action: {
|
|
76
|
-
|
|
75
|
+
actionNameAttribute: 'data-bk-action-name',
|
|
76
|
+
maxDuration: 10000,
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
});
|
|
@@ -81,14 +81,15 @@ new BkOpenTelemetry({
|
|
|
81
81
|
|
|
82
82
|
## 采样
|
|
83
83
|
|
|
84
|
-
`
|
|
84
|
+
`session.sampleRate` 是会话级确定性采样。决定由 `application.name + session.id` 的稳定 hash 得出,同一 Session 的三类信号保持一致。插件仍会维护必要的浏览器生命周期,但未命中时创建或导出路径会丢弃数据,`reportAction()` 和 `reportCustomEvent()` 直接返回。
|
|
85
85
|
|
|
86
86
|
示例:生产环境按 10% 会话采样。
|
|
87
87
|
|
|
88
88
|
```ts
|
|
89
89
|
new BkOpenTelemetry({
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
application: { name: 'demo' },
|
|
91
|
+
session: {
|
|
92
|
+
sampleRate: 0.1,
|
|
92
93
|
},
|
|
93
94
|
transport: {
|
|
94
95
|
endpoint: 'https://rum-collector.example.com',
|
|
@@ -100,7 +101,7 @@ new BkOpenTelemetry({
|
|
|
100
101
|
|
|
101
102
|
SDK 会为 span 补充 RUM 归一字段,例如:
|
|
102
103
|
|
|
103
|
-
- `span_type`:`document`、`
|
|
104
|
+
- `span_type`:`document`、`resource`、`vital`、`error`、`longtask`、`action`、`route`、`custom`
|
|
104
105
|
- `result`:`success`、`warning`、`error`、`timeout`、`abort`
|
|
105
106
|
- `duration_bucket`:`<100ms`、`100~500ms`、`500ms~2s`、`>2s`
|
|
106
107
|
- `target_label`:跨类型的主标签,用于统一检索
|
|
@@ -122,106 +123,34 @@ const span = bkOT.startSpan('custom.cache_warmup', {
|
|
|
122
123
|
span.end();
|
|
123
124
|
```
|
|
124
125
|
|
|
125
|
-
#
|
|
126
|
-
|
|
127
|
-
`@blueking/open-telemetry` 把采集能力拆成两类:**官方 Instrumentation** 和 **RUM 插件(Plugin)**。两者在配置入口、数据来源、生命周期和采样行为上都不同,理解差异有助于按需裁剪采集能力。
|
|
128
|
-
|
|
129
|
-
## 一句话区分
|
|
126
|
+
# 内置采集与扩展
|
|
130
127
|
|
|
131
|
-
|
|
132
|
-
- **Plugin**:bk-ot 自研的能力单元,基于 runtime context 主动产生 RUM 归一数据,是「我们要采什么、怎么归一」的业务层。
|
|
133
|
-
|
|
134
|
-
## 配置入口
|
|
135
|
-
|
|
136
|
-
两类能力在配置上完全对称,分别挂在顶层的 `instrumentations` 和 `plugins` 下:
|
|
128
|
+
`tracking` 只配置 SDK 内置采集能力;`extensions` 只注册接入方提供的扩展实例。
|
|
137
129
|
|
|
138
130
|
```ts
|
|
139
131
|
new BkOpenTelemetry({
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
xhr: true,
|
|
145
|
-
userInteraction: true,
|
|
146
|
-
custom: [new MyCustomInstrumentation()],
|
|
147
|
-
},
|
|
148
|
-
// bk-ot 自研插件:开关 + 自定义插件
|
|
149
|
-
plugins: {
|
|
150
|
-
pageView: true,
|
|
132
|
+
application: { name: 'demo' },
|
|
133
|
+
transport: { endpoint: 'https://collector.example.com' },
|
|
134
|
+
tracking: {
|
|
135
|
+
request: true,
|
|
151
136
|
error: true,
|
|
152
|
-
|
|
153
|
-
custom: [myBizPlugin],
|
|
137
|
+
longTask: false,
|
|
154
138
|
},
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
## 内置能力清单
|
|
159
|
-
|
|
160
|
-
| 类型 | 内置项 |
|
|
161
|
-
| --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
162
|
-
| Instrumentation | `documentLoad`、`fetch`、`xhr`、`userInteraction` |
|
|
163
|
-
| Plugin | `pageView`、`resource`、`error`、`webVitals`、`blankScreen`、`device`、`session`、`action`、`httpBody`、`longTask`、`routeTiming`、`cspViolation`、`websocket` |
|
|
164
|
-
|
|
165
|
-
## 核心差异对比
|
|
166
|
-
|
|
167
|
-
| 维度 | Instrumentation | Plugin |
|
|
168
|
-
| ------------ | ------------------------------------------------ | --------------------------------------------------- |
|
|
169
|
-
| 来源 | OpenTelemetry 官方包 / 第三方 | bk-ot 自研 |
|
|
170
|
-
| 职责 | patch 原生 API、读取标准性能数据 | 基于 runtime context 主动产生 RUM 归一数据 |
|
|
171
|
-
| 配置位置 | `instrumentations: {}` | `plugins: {}` |
|
|
172
|
-
| 自定义扩展 | `instrumentations.custom` / `useInstrumentation()` | `plugins.custom` / `use()` / `createPlugin()` |
|
|
173
|
-
| 启动条件 | **SDK 启用(`enabled`)即装载** | 官方探针适配插件随 SDK 启用;产生 RUM 数据的插件**仅采样命中时启动** |
|
|
174
|
-
| 受采样影响 | 否 | 是(RUM 数据插件未命中采样时不启动) |
|
|
175
|
-
|
|
176
|
-
## 生命周期与采样
|
|
177
|
-
|
|
178
|
-
这是两者最容易混淆、也最关键的差异:
|
|
179
|
-
|
|
180
|
-
- **Instrumentation 不受采样影响**。只要 `enabled !== false`,官方探针与 `instrumentations.custom` 中的实例都会在 `start()` 时注册。它们 patch 的是底层 API,需要在采样判定之前就位。
|
|
181
|
-
|
|
182
|
-
> 注意:这里的"不受采样影响"指的是**是否装载/patch**。未命中采样的会话,trace sampler 的比例为 `0`,探针产生的 span 仍会在采样阶段被丢弃、不会上报。也就是说 patch 照做,但数据最终不落库。
|
|
183
|
-
- **RUM 插件受采样影响**。`sampling.rate` 是会话级 sticky 采样,未命中的会话不会启动主动产生数据的插件,`reportAction()`、`reportCustomEvent()` 也会丢弃。
|
|
184
|
-
|
|
185
|
-
> 说明:SDK 内部把官方 instrumentation 封装成一个核心适配插件(`official-instrumentations`),它与自研 RUM 插件走同一套插件生命周期,但归属于「SDK 启用即装载」的核心插件,不参与采样开关。
|
|
186
|
-
|
|
187
|
-
## 如何扩展
|
|
188
|
-
|
|
189
|
-
### 接入第三方 Instrumentation
|
|
190
|
-
|
|
191
|
-
两种等价写法,都必须在 `start()` 之前:
|
|
192
|
-
|
|
193
|
-
```ts
|
|
194
|
-
// 写法一:配置式
|
|
195
|
-
new BkOpenTelemetry({
|
|
196
|
-
autoStart: false,
|
|
197
|
-
instrumentations: {
|
|
198
|
-
custom: [new MyCustomInstrumentation()],
|
|
139
|
+
extensions: {
|
|
140
|
+
plugins: [myRumPlugin],
|
|
141
|
+
instrumentations: [myOtelInstrumentation],
|
|
199
142
|
},
|
|
200
143
|
});
|
|
201
|
-
|
|
202
|
-
// 写法二:链式(适合运行时动态追加)
|
|
203
|
-
bkOT.useInstrumentation(new MyCustomInstrumentation());
|
|
204
|
-
await bkOT.start();
|
|
205
144
|
```
|
|
206
145
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
import { createPlugin } from '@blueking/open-telemetry';
|
|
146
|
+
| 类型 | 配置位置 | 适用场景 |
|
|
147
|
+
| --- | --- | --- |
|
|
148
|
+
| 内置采集 | `tracking` | View、请求、资源、错误、Web Vitals、Action 等 |
|
|
149
|
+
| RUM 插件 | `extensions.plugins` / `use()` | 需要 Session/View、日志、指标和活动总线的浏览器语义 |
|
|
150
|
+
| OTel instrumentation | `extensions.instrumentations` / `useInstrumentation()` | 已有标准 instrumentation,直接使用 SDK 私有 provider |
|
|
213
151
|
|
|
214
|
-
|
|
215
|
-
name: 'biz-plugin',
|
|
216
|
-
init(context) {
|
|
217
|
-
const span = context.startSpan('custom.biz_ready');
|
|
218
|
-
span.end();
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
```
|
|
152
|
+
内置 Fetch/XHR 不再基于官方 instrumentation 叠加适配,而是由单一请求生命周期实现,避免重复 patch、重复活动计数及私有 `_addHeaders/_patchSend` 依赖。
|
|
222
153
|
|
|
223
|
-
|
|
154
|
+
当前扩展 instrumentation 的稳定能力边界是 Trace:Filtering Span Processor 会在 Span 创建时补充有效 RUM 上下文。Metric exporter 要求 SDK 内部采样标记,而包未公开对应 helper,因此第三方 instrumentation 产生的 Metric 默认会被过滤,不应作为已支持的扩展能力。
|
|
224
155
|
|
|
225
|
-
|
|
226
|
-
- 想产生带 RUM 归一字段(`span_type`、`result`、`target_label` 等)的业务事件、需要访问运行时上下文 → 用 **Plugin**。
|
|
227
|
-
- 想让能力跟随采样开关、只对命中会话生效 → 必须做成 **Plugin**(RUM 数据类)。
|
|
156
|
+
扩展必须在 `start()` 前注册;动态 Consent 重新授权时,插件可能再次执行 `init()`,所以插件的 `shutdown()` 应完整释放副作用。
|