@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.
- package/README.md +258 -70
- package/dist/bk-rum.global.js +2 -2
- package/dist/bk-rum.global.js.map +1 -1
- package/dist/core/config.d.ts +10 -10
- package/dist/core/runtime-context.d.ts +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +608 -662
- package/dist/index.js.map +1 -1
- package/dist/plugins/blank-screen.d.ts +1 -1
- package/dist/plugins/common.d.ts +2 -2
- package/dist/plugins/device.d.ts +2 -2
- package/dist/plugins/resource.d.ts +1 -0
- package/dist/plugins/web-vitals.d.ts +1 -3
- package/dist/schema/attributes.d.ts +6 -7
- package/dist/schema/span.d.ts +24 -15
- package/package.json +1 -1
- package/skills/bk-rum-otele/SKILL.md +31 -30
- package/skills/bk-rum-otele/references/actions.md +166 -0
- package/skills/bk-rum-otele/references/api.md +248 -215
- package/skills/bk-rum-otele/references/architecture.md +139 -37
- package/skills/bk-rum-otele/references/blank-screen.md +190 -0
- package/skills/bk-rum-otele/references/capabilities.md +175 -83
- package/skills/bk-rum-otele/references/configuration.md +226 -151
- package/skills/bk-rum-otele/references/data-model.md +157 -24
- package/skills/bk-rum-otele/references/errors-security.md +168 -0
- package/skills/bk-rum-otele/references/extensions.md +237 -0
- package/skills/bk-rum-otele/references/framework-integration.md +318 -75
- package/skills/bk-rum-otele/references/getting-started.md +186 -70
- package/skills/bk-rum-otele/references/network.md +258 -0
- package/skills/bk-rum-otele/references/performance.md +198 -0
- package/skills/bk-rum-otele/references/privacy.md +236 -67
- package/skills/bk-rum-otele/references/production.md +266 -0
- package/skills/bk-rum-otele/references/session-context.md +185 -0
- package/skills/bk-rum-otele/references/telemetry-reference.md +500 -51
- package/skills/bk-rum-otele/references/transport-sampling.md +321 -32
- package/skills/bk-rum-otele/references/troubleshooting.md +341 -151
- package/skills/bk-rum-otele/references/views-routing.md +211 -0
- package/skills/bk-rum-otele/references/concepts.md +0 -60
- package/skills/bk-rum-otele/references/custom-plugin.md +0 -170
- package/skills/bk-rum-otele/references/plugins-basic.md +0 -135
- package/skills/bk-rum-otele/references/plugins-error-security.md +0 -86
- package/skills/bk-rum-otele/references/plugins-experience.md +0 -124
- package/skills/bk-rum-otele/references/plugins-network.md +0 -32
- package/skills/bk-rum-otele/references/plugins.md +0 -62
|
@@ -2,338 +2,371 @@
|
|
|
2
2
|
|
|
3
3
|
# API 参考
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
本文只描述 `src/index.ts` 当前公开导出的 API。日常接入优先使用 `BkOpenTelemetry` 的生命周期、上下文和手动上报方法;运行时底层方法主要服务自定义插件。
|
|
6
6
|
|
|
7
7
|
## 创建实例
|
|
8
8
|
|
|
9
9
|
```ts
|
|
10
|
-
import { BkOpenTelemetry
|
|
10
|
+
import { BkOpenTelemetry } from '@blueking/open-telemetry';
|
|
11
11
|
|
|
12
|
-
const
|
|
13
|
-
application: { name: '
|
|
14
|
-
transport: { endpoint: 'https://rum
|
|
15
|
-
};
|
|
12
|
+
const rum = new BkOpenTelemetry({
|
|
13
|
+
application: { name: 'order-center' },
|
|
14
|
+
transport: { endpoint: 'https://rum.example.com' },
|
|
15
|
+
});
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
构造函数会同步完成:
|
|
19
|
+
|
|
20
|
+
1. 校验并解析配置;
|
|
21
|
+
2. 创建 Resource、`WebTracerProvider`、Session sampler、过滤处理器和 exporter;
|
|
22
|
+
3. 获得 instrumentation name 为 `bk-rum` 的 Tracer;
|
|
23
|
+
4. 如果 `autoStart !== false`,异步调用 `start()`。
|
|
24
|
+
|
|
25
|
+
构造函数不会创建 MeterProvider 或 LoggerProvider。`autoStart` 的异步失败只会在控制台输出 `[bk-ot] auto start failed` 警告;如果业务必须感知启动结果,应设置 `autoStart: false` 并显式 `await rum.start()`。
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
CDN bundle 的默认导出会挂到:
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
window.BkOpenTelemetry
|
|
18
31
|
```
|
|
19
32
|
|
|
20
|
-
|
|
33
|
+
## 生命周期 API
|
|
21
34
|
|
|
22
|
-
|
|
35
|
+
### `start(): Promise<void>`
|
|
23
36
|
|
|
24
|
-
|
|
37
|
+
安装内置/自定义插件、全局 OTel context/propagator,并启用 extensions 中的 instrumentation。
|
|
25
38
|
|
|
26
39
|
```ts
|
|
27
|
-
const
|
|
28
|
-
application: { name: '
|
|
40
|
+
const rum = new BkOpenTelemetry({
|
|
41
|
+
application: { name: 'order-center' },
|
|
42
|
+
transport: { endpoint: 'https://rum.example.com' },
|
|
29
43
|
autoStart: false,
|
|
30
|
-
transport: { endpoint: 'https://rum-collector.example.com' },
|
|
31
44
|
});
|
|
32
45
|
|
|
33
|
-
|
|
34
|
-
await bkOT.start();
|
|
46
|
+
await rum.start();
|
|
35
47
|
```
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
行为:
|
|
50
|
+
|
|
51
|
+
- 已启动或正在启动时重复调用会直接返回;
|
|
52
|
+
- `enabled: false` 时把实例标记为已启动,但不安装采集;
|
|
53
|
+
- Consent 为 `not-granted` 时不安装采集,之后可授权启动;
|
|
54
|
+
- 单个插件初始化失败不会阻断其余插件,`debug: true` 时打印警告;
|
|
55
|
+
- 整体启动异常会清理已安装内容并恢复到可再次启动的 idle 状态;
|
|
56
|
+
- `shutdown()` 后再次调用会抛错,必须创建新实例。
|
|
38
57
|
|
|
39
|
-
### flush()
|
|
58
|
+
### `flush(): Promise<void>`
|
|
59
|
+
|
|
60
|
+
并行调用已启动插件的 `flush()`,然后 `forceFlush()` Trace Provider。
|
|
40
61
|
|
|
41
62
|
```ts
|
|
42
|
-
await
|
|
63
|
+
await rum.flush();
|
|
43
64
|
```
|
|
44
65
|
|
|
45
|
-
|
|
66
|
+
适用于测试、关键跳转前尽力发送和联调。它不是服务端持久化确认,也无法突破浏览器退出时的网络限制。
|
|
67
|
+
|
|
68
|
+
### `shutdown(): Promise<void>`
|
|
46
69
|
|
|
47
|
-
|
|
70
|
+
按插件启动顺序的逆序执行 shutdown,关闭 instrumentations,flush Provider,移除页面生命周期监听并销毁 Provider。
|
|
48
71
|
|
|
49
72
|
```ts
|
|
50
|
-
await
|
|
73
|
+
await rum.shutdown();
|
|
51
74
|
```
|
|
52
75
|
|
|
53
|
-
|
|
76
|
+
重复调用安全。关闭后实例不可重启,也不应继续上报。
|
|
54
77
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
### setTrackingConsent(consent)
|
|
78
|
+
### `setTrackingConsent(consent): Promise<void>`
|
|
58
79
|
|
|
59
80
|
```ts
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
privacy: { trackingConsent: 'not-granted' },
|
|
63
|
-
transport: { endpoint: 'https://rum-collector.example.com' },
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
await bkOT.setTrackingConsent('granted');
|
|
67
|
-
await bkOT.setTrackingConsent('not-granted');
|
|
81
|
+
await rum.setTrackingConsent('granted');
|
|
82
|
+
await rum.setTrackingConsent('not-granted');
|
|
68
83
|
```
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
85
|
+
参数类型:`'granted' | 'not-granted'`。
|
|
86
|
+
|
|
87
|
+
- 实例已启动后授权:安装插件并开始新/共享 Session;
|
|
88
|
+
- 实例已启动后撤销:关闭插件/instrumentation、清理运行时 Session 关联并 flush;
|
|
89
|
+
- 实例尚未启动时:只更新配置中的授权状态,等待 `start()`;
|
|
90
|
+
- 重复设置相同值不执行操作。
|
|
74
91
|
|
|
75
|
-
|
|
92
|
+
Consent 只控制 SDK 采集生命周期,不负责展示弹窗、记录法律依据或删除已被 Collector 接收的数据。
|
|
76
93
|
|
|
77
|
-
##
|
|
94
|
+
## 用户与 View API
|
|
78
95
|
|
|
79
|
-
### setUser(user)
|
|
96
|
+
### `setUser(user): void`
|
|
80
97
|
|
|
81
98
|
```ts
|
|
82
|
-
|
|
83
|
-
|
|
99
|
+
rum.setUser({ id: 'user-001' });
|
|
100
|
+
rum.setUser({ id: undefined }); // 清除 user.id
|
|
84
101
|
```
|
|
85
102
|
|
|
86
|
-
|
|
103
|
+
`BkOTUserContext` 当前只有可选 `id`。更新影响后续创建的 Span,不回写已结束 Span。SDK 对 ID 原样透传,不 hash、不脱敏。
|
|
87
104
|
|
|
88
|
-
### startView(options?)
|
|
89
|
-
|
|
90
|
-
结束当前 View 并创建新 View,`view.id` 始终由 SDK 生成。
|
|
105
|
+
### `startView(options?): void`
|
|
91
106
|
|
|
92
107
|
```ts
|
|
93
|
-
|
|
94
|
-
application: { name: 'manual-view-demo' },
|
|
95
|
-
autoStart: false,
|
|
96
|
-
tracking: { view: { tracking: 'manual' } },
|
|
97
|
-
transport: { endpoint: 'https://rum-collector.example.com' },
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
await bkOT.start();
|
|
101
|
-
bkOT.startView({
|
|
108
|
+
rum.startView({
|
|
102
109
|
name: '订单详情',
|
|
103
110
|
url: location.href,
|
|
104
|
-
attributes: { 'biz.
|
|
111
|
+
attributes: { 'biz.page_kind': 'detail' },
|
|
105
112
|
});
|
|
106
113
|
```
|
|
107
114
|
|
|
108
|
-
`BkOTStartViewOptions
|
|
115
|
+
`BkOTStartViewOptions`:
|
|
116
|
+
|
|
117
|
+
| 字段 | 类型 | 说明 |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| `name` | `string` | View 展示名;缺省时使用低基数 path group |
|
|
120
|
+
| `url` | `string` | View URL;缺省时使用当前 `location.href` |
|
|
121
|
+
| `attributes` | `Attributes` | 该 View 生命周期内附加到后续 Span 的自定义属性 |
|
|
109
122
|
|
|
110
|
-
|
|
123
|
+
只有当前 Session 命中采样时才派发命令。推荐 `tracking.view.tracking: 'manual'` 时使用。View 自定义属性不能覆盖 SDK 保护的 RUM 语义字段和采样字段;在新 View 开始时旧 View 属性会被清除。
|
|
111
124
|
|
|
112
125
|
```ts
|
|
113
|
-
|
|
126
|
+
const rum = new BkOpenTelemetry({
|
|
127
|
+
application: { name: 'manual-view-app' },
|
|
128
|
+
transport: { endpoint: 'https://rum.example.com' },
|
|
129
|
+
autoStart: false,
|
|
130
|
+
tracking: { view: { tracking: 'manual' } },
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
await rum.start();
|
|
134
|
+
rum.startView({ name: '订单详情' });
|
|
114
135
|
```
|
|
115
136
|
|
|
116
|
-
|
|
137
|
+
### `setViewName(name): void`
|
|
117
138
|
|
|
118
|
-
|
|
139
|
+
更新当前 View 名称并产生 View update 生命周期 Span:
|
|
119
140
|
|
|
120
141
|
```ts
|
|
121
|
-
|
|
122
|
-
bkOT.setViewLoadingTime();
|
|
142
|
+
rum.setViewName('订单详情');
|
|
123
143
|
```
|
|
124
144
|
|
|
125
|
-
|
|
145
|
+
没有采样 Session 时调用被忽略。
|
|
126
146
|
|
|
127
|
-
|
|
147
|
+
### `setViewLoadingTime(): void`
|
|
128
148
|
|
|
129
|
-
|
|
149
|
+
以调用时刻减 View 开始时刻作为手动 `view.loading_time`,并产生 View update:
|
|
130
150
|
|
|
131
151
|
```ts
|
|
132
|
-
|
|
133
|
-
name: '保存',
|
|
134
|
-
attributes: { 'biz.form': 'alarm-strategy' },
|
|
135
|
-
});
|
|
152
|
+
requestAnimationFrame(() => rum.setViewLoadingTime());
|
|
136
153
|
```
|
|
137
154
|
|
|
138
|
-
|
|
155
|
+
适用于业务明确知道页面“可用”时刻的场景。它不接受数值参数,时间点就是调用当下;没有采样 Session 时被忽略。
|
|
139
156
|
|
|
140
|
-
|
|
157
|
+
## 手动事件 API
|
|
141
158
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
attributes: { 'biz.strategy_id': '10001' },
|
|
146
|
-
});
|
|
159
|
+
两个手动 API 都不维护启动前队列。默认构造函数触发的 autoStart 是异步的;构造后立即同步调用可能发生在 View 插件建立上下文之前。需要可靠接收首个业务事件时,设置 `autoStart: false`,先 `await start()`;manual View 再调用 `startView()`,最后才调用手动事件 API。
|
|
160
|
+
|
|
161
|
+
### `reportAction(payload): void`
|
|
147
162
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
163
|
+
```ts
|
|
164
|
+
rum.reportAction({
|
|
165
|
+
name: '立即购买',
|
|
166
|
+
attributes: {
|
|
167
|
+
'biz.product_type': 'subscription',
|
|
168
|
+
},
|
|
151
169
|
});
|
|
152
170
|
```
|
|
153
171
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
两类方法均受 Session 采样控制;未采样时直接返回。`debug: true` 仅对被丢弃的 Custom Event 输出 warning。
|
|
157
|
-
|
|
158
|
-
## 自定义信号
|
|
159
|
-
|
|
160
|
-
### startSpan(name, attributes?, options?)
|
|
172
|
+
参数:
|
|
161
173
|
|
|
162
174
|
```ts
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
{ startTime: startedAt, contextTime: startedAt },
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
span.end();
|
|
175
|
+
interface BkOTActionEventPayload {
|
|
176
|
+
name: string;
|
|
177
|
+
attributes?: Attributes;
|
|
178
|
+
}
|
|
171
179
|
```
|
|
172
180
|
|
|
173
|
-
|
|
181
|
+
立即创建并结束 `action.custom` Span,写入新的 `action.id`、`action.type=custom`、`span_type=action` 和 `outcome.type=success`。事件标识和时间直接使用 OTLP Span ID 与开始时间。它不是一个持续的自动 Action 窗口,不会等待或关联调用之后的请求。
|
|
174
182
|
|
|
175
|
-
|
|
176
|
-
| --- | --- |
|
|
177
|
-
| `startTime` | OpenTelemetry `TimeInput`;常用 epoch ms |
|
|
178
|
-
| `contextTime` | 用该 epoch ms 从历史快照解析 Session/View/Action;数字型 `startTime` 默认同时作为该值 |
|
|
179
|
-
| `kind` | OpenTelemetry `SpanKind`,默认 `INTERNAL` |
|
|
180
|
-
|
|
181
|
-
只有已采样且同时带有效 `session.id`、`view.id` 的 Span 会导出。
|
|
182
|
-
|
|
183
|
-
### tracer
|
|
184
|
-
|
|
185
|
-
实例公开 SDK 私有 Provider 对应的 OpenTelemetry `Tracer`。SDK 不创建或公开 `Meter`、`Logger`,自定义 RUM 事件使用 `startSpan()`。
|
|
183
|
+
未命中 Session 采样时静默丢弃。
|
|
186
184
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
### use(plugin)
|
|
185
|
+
### `reportCustomEvent(payload): void`
|
|
190
186
|
|
|
191
187
|
```ts
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
)
|
|
188
|
+
rum.reportCustomEvent({
|
|
189
|
+
name: 'order.checkout',
|
|
190
|
+
attributes: { 'biz.payment_method': 'card' },
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
rum.reportCustomEvent({
|
|
194
|
+
name: 'order.checkout_failed',
|
|
195
|
+
error: new Error('payment rejected'),
|
|
196
|
+
});
|
|
200
197
|
```
|
|
201
198
|
|
|
202
|
-
|
|
199
|
+
参数:
|
|
203
200
|
|
|
204
201
|
```ts
|
|
205
|
-
|
|
202
|
+
interface BkOTCustomEventPayload {
|
|
203
|
+
name: string;
|
|
204
|
+
attributes?: Attributes;
|
|
205
|
+
error?: Error;
|
|
206
|
+
}
|
|
206
207
|
```
|
|
207
208
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
额外 instrumentation 的稳定扩展边界是 Trace;SDK 不注册 Metric Provider。
|
|
209
|
+
产出 Span 名为 `custom.<name>`,同时写 `rum.custom.name=<name>` 和 `span_type=custom`。有 `error` 时记录 exception Event,将 `outcome.type` 和 Span Status 设为 error;没有 error 时 `outcome.type=success`。
|
|
211
210
|
|
|
212
|
-
|
|
211
|
+
`name` 会进入 Span name 和字段,必须使用非空的有限枚举,不要拼订单号、URL、用户输入等高基数内容。运行时没有非空校验:空字符串会生成 `custom.` Span 和空的 `rum.custom.name`,不会仅因 name 为空抛错或自动丢弃,但这类数据没有可用语义。未采样时静默丢弃;`debug: true` 会额外打印 dropped warning。
|
|
213
212
|
|
|
214
|
-
|
|
215
|
-
| --- | --- |
|
|
216
|
-
| `config` | `resolveConfig()` 解析后的 `ResolvedBkOTConfig` |
|
|
217
|
-
| `applyRedact(attributes)` | 执行 `privacy.redactAttributes` |
|
|
218
|
-
| `getRuntimeAttributes()` | 当前公共属性快照 |
|
|
219
|
-
| `getRuntimeAttributesAt(timestamp)` | 指定 epoch ms 的历史公共属性快照 |
|
|
220
|
-
| `setRuntimeAttributes(attributes, changedAt?)` | 写入公共属性;高级扩展 API,谨慎避免覆盖 SDK 字段 |
|
|
221
|
-
| `isSampled()` | 当前 Session 是否命中采样 |
|
|
222
|
-
| `isSessionActive()` | 是否存在有效 Session |
|
|
223
|
-
| `isViewActive()` | 是否存在有效 View |
|
|
224
|
-
| `onSessionLifecycle(listener)` | 订阅 Session renewed/expired,返回取消函数 |
|
|
225
|
-
| `notifySessionLifecycle(event)` | 向运行时分发生命周期事件;主要供高级插件使用 |
|
|
213
|
+
## 扩展注册 API
|
|
226
214
|
|
|
227
|
-
|
|
215
|
+
### `use(plugin): BkOpenTelemetry`
|
|
228
216
|
|
|
229
|
-
`
|
|
217
|
+
链式注册 `BkOTPlugin`:
|
|
230
218
|
|
|
231
219
|
```ts
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
enabled: config => config.enabled,
|
|
237
|
-
init(context) {},
|
|
238
|
-
flush() {},
|
|
239
|
-
shutdown() {},
|
|
220
|
+
const rum = new BkOpenTelemetry({
|
|
221
|
+
application: { name: 'demo' },
|
|
222
|
+
transport: { endpoint: 'https://rum.example.com' },
|
|
223
|
+
autoStart: false,
|
|
240
224
|
});
|
|
241
|
-
```
|
|
242
225
|
|
|
243
|
-
|
|
226
|
+
rum.use(myPlugin).use(otherPlugin);
|
|
227
|
+
await rum.start();
|
|
228
|
+
```
|
|
244
229
|
|
|
245
|
-
|
|
230
|
+
只能在第一次 `start()` 前调用;否则抛错。也可以通过 `extensions.plugins` 在构造配置中注册。
|
|
246
231
|
|
|
247
|
-
###
|
|
232
|
+
### `useInstrumentation(instrumentation): BkOpenTelemetry`
|
|
248
233
|
|
|
249
|
-
|
|
234
|
+
把标准 OTel instrumentation 绑定到 SDK 私有 WebTracerProvider:
|
|
250
235
|
|
|
251
236
|
```ts
|
|
252
|
-
|
|
237
|
+
rum.useInstrumentation(instrumentation);
|
|
253
238
|
```
|
|
254
239
|
|
|
255
|
-
|
|
240
|
+
同样只能在第一次 `start()` 前调用。如果 `enabled: false`,该方法不会加入配置。Instrumentation 创建的 Span 仍必须具有有效的 Session/View/采样运行时上下文,才会通过 SDK 的过滤处理器。
|
|
256
241
|
|
|
257
|
-
|
|
242
|
+
## 自定义插件运行时 API
|
|
258
243
|
|
|
259
|
-
|
|
244
|
+
以下方法在实例上公开,但主要面向 `BkOTPlugin.init(context)`:
|
|
260
245
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
246
|
+
| API | 作用 |
|
|
247
|
+
| --- | --- |
|
|
248
|
+
| `startSpan(name, attributes?, options?)` | 按 Session 采样和历史时间上下文创建 Span |
|
|
249
|
+
| `getRuntimeAttributes()` | 复制当前 Session/View/User/Device/Action 属性 |
|
|
250
|
+
| `getRuntimeAttributesAt(timestamp)` | 按 epoch ms 回查该时刻的关联上下文 |
|
|
251
|
+
| `setRuntimeAttributes(attributes, changedAt?)` | 修改后续公共运行时属性 |
|
|
252
|
+
| `applyRedact(attributes)` | 调用配置的 `redactAttributes` |
|
|
253
|
+
| `isSampled()` | 当前 Session 是否命中采样 |
|
|
254
|
+
| `isSessionActive()` / `isViewActive()` | 是否存在有效关联 ID |
|
|
255
|
+
| `onSessionLifecycle(listener)` | 监听 renewed/expired,返回取消函数 |
|
|
256
|
+
| `notifySessionLifecycle(event)` | 发布 Session 生命周期事件,一般仅 Session 扩展使用 |
|
|
257
|
+
| `tracer` | SDK 私有 OTel Tracer |
|
|
258
|
+
| `config` | 已解析的 `ResolvedBkOTConfig` |
|
|
272
259
|
|
|
273
|
-
|
|
260
|
+
`BkOpenTelemetry` 类实现上还公开了 `registerInstrumentations()`,但 `BkOTInstance` 接口有意不把它作为普通实例契约;自定义扩展应通过 Plugin Context 的同名方法调用,常规接入应使用启动前的 `useInstrumentation()`。
|
|
274
261
|
|
|
275
|
-
|
|
262
|
+
### `startSpan()`
|
|
276
263
|
|
|
277
264
|
```ts
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
265
|
+
const span = context.startSpan(
|
|
266
|
+
'custom.operation',
|
|
267
|
+
{ 'biz.operation': 'calculate' },
|
|
268
|
+
{
|
|
269
|
+
startTime: occurredAt,
|
|
270
|
+
contextTime: occurredAt,
|
|
271
|
+
kind: SpanKind.INTERNAL,
|
|
272
|
+
},
|
|
273
|
+
);
|
|
284
274
|
|
|
285
|
-
|
|
275
|
+
span.end(endedAt);
|
|
286
276
|
```
|
|
287
277
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
## 内置插件工厂
|
|
278
|
+
`BkOTStartSpanOptions`:
|
|
291
279
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
| 工厂 | 选项类型 |
|
|
280
|
+
| 字段 | 说明 |
|
|
295
281
|
| --- | --- |
|
|
296
|
-
| `
|
|
297
|
-
| `
|
|
298
|
-
| `
|
|
299
|
-
| `createResourcePlugin` | 直接传 `boolean`,控制是否为静态资源创建 Span;默认 `true` |
|
|
300
|
-
| `createErrorPlugin` | 无 |
|
|
301
|
-
| `createWebVitalsPlugin` | 无 |
|
|
302
|
-
| `createBlankScreenPlugin` | `BkOTBlankScreenPluginOptions` |
|
|
303
|
-
| `createActionPlugin` | `BkOTActionPluginOptions` |
|
|
304
|
-
| `createLongTaskPlugin` | `BkOTLongTaskPluginOptions` |
|
|
305
|
-
| `createWebSocketPlugin` | 无 |
|
|
306
|
-
| `createCspViolationPlugin` | 无 |
|
|
282
|
+
| `startTime` | OTel `TimeInput`;浏览器场景常用 epoch milliseconds |
|
|
283
|
+
| `contextTime` | 用哪个 epoch ms 回查 Session/View/Action;缺省时复用数字型 `startTime` |
|
|
284
|
+
| `kind` | SpanKind,默认 `INTERNAL` |
|
|
307
285
|
|
|
308
|
-
`
|
|
286
|
+
运行时属性先合并,显式 `attributes` 后合并,因此显式同名字段优先;整体再经过 `redactAttributes`。未采样时返回 OTel non-recording Span,调用方仍可安全 `end()`。
|
|
309
287
|
|
|
310
|
-
|
|
288
|
+
延迟到达的 PerformanceEntry 应同时设置真实 `startTime` 和 `contextTime`,避免把旧事件错误关联到新的 View。
|
|
311
289
|
|
|
312
|
-
`
|
|
290
|
+
### `setRuntimeAttributes()` 的边界
|
|
313
291
|
|
|
314
|
-
|
|
315
|
-
- `PluginManager`。
|
|
316
|
-
- `FilteringSpanProcessor`。
|
|
317
|
-
- `EXCLUDED_ACTIVITY_MUTATIONS_ATTRIBUTE`,用于标记不应延长 View Loading/Action 的 DOM 子树。
|
|
318
|
-
- 配置输入、解析结果、Transport、Hook、请求上下文等 TypeScript 类型。
|
|
292
|
+
它是扩展底层能力,不是常规业务标签 API。传入 `session.id` 会触发采样决定重算;错误修改 `view.*` 或 `action.id` 会破坏关联历史。普通业务字段更适合通过 context Hook、View attributes 或事件 payload 添加。
|
|
319
293
|
|
|
320
|
-
|
|
294
|
+
## 配置解析函数
|
|
295
|
+
|
|
296
|
+
```ts
|
|
297
|
+
import { resolveConfig } from '@blueking/open-telemetry';
|
|
298
|
+
```
|
|
321
299
|
|
|
322
|
-
`
|
|
300
|
+
`resolveConfig(options)` 校验必填项、补默认值、构造最终 `/v1/rum` URL、合并鉴权头,并生成 Resource attributes。它主要用于测试和高级集成,不会启动 SDK。
|
|
323
301
|
|
|
324
|
-
##
|
|
302
|
+
## 根入口的运行时导出
|
|
325
303
|
|
|
326
|
-
|
|
304
|
+
以下值可以从 `@blueking/open-telemetry` 在运行时 import:
|
|
327
305
|
|
|
328
|
-
|
|
|
306
|
+
| 导出 | 用途 |
|
|
329
307
|
| --- | --- |
|
|
330
|
-
|
|
|
331
|
-
|
|
|
332
|
-
|
|
|
333
|
-
|
|
|
334
|
-
|
|
|
335
|
-
|
|
|
336
|
-
|
|
|
337
|
-
|
|
|
338
|
-
|
|
339
|
-
|
|
308
|
+
| `BkOpenTelemetry` | SDK 主类 |
|
|
309
|
+
| `resolveConfig` | 解析并校验 `BkOTOptions`,不启动 SDK |
|
|
310
|
+
| `createPlugin` | 保留传入 Plugin 对象及其类型推断 |
|
|
311
|
+
| `FilteringSpanProcessor` | SDK 的 RUM 上下文与导出过滤 Processor |
|
|
312
|
+
| `RumRuntimeContext` | User/Session/View/Action 运行时快照和历史关联实现 |
|
|
313
|
+
| `createActionPlugin` | 内置自动 Action 插件工厂 |
|
|
314
|
+
| `createBlankScreenPlugin` | 内置白屏插件工厂 |
|
|
315
|
+
| `createCommonInstrumentationsPlugin` | 内置 Fetch/XHR 插件工厂;名称保留,但当前不是标准 instrumentation 集合 |
|
|
316
|
+
| `createCspViolationPlugin` | 内置 CSP 插件工厂 |
|
|
317
|
+
| `createDevicePlugin` | 内置 Device 运行时插件工厂 |
|
|
318
|
+
| `createErrorPlugin` | 内置 Error 插件工厂 |
|
|
319
|
+
| `createLongTaskPlugin` | 内置 Long Task 插件工厂 |
|
|
320
|
+
| `createResourcePlugin` | 内置 Resource Timing 插件工厂 |
|
|
321
|
+
| `createSessionPlugin` | 内置 Session 插件工厂 |
|
|
322
|
+
| `createWebVitalsPlugin` | 内置 Web Vitals 插件工厂 |
|
|
323
|
+
| `createWebSocketPlugin` | 内置 WebSocket 插件工厂 |
|
|
324
|
+
| `EXCLUDED_ACTIVITY_MUTATIONS_ATTRIBUTE` | 值为 `data-bk-excluded-activity-mutations`,标记不延长页面活动的 DOM 子树 |
|
|
325
|
+
| `RUM_ATTRIBUTES` | SDK 公共字段 key 常量表 |
|
|
326
|
+
| `RUM_SPAN_TYPE` | RUM Span 大类常量表 |
|
|
327
|
+
| `RUM_SPAN_OUTCOME` | success/warning/error/timeout/abort 常量表 |
|
|
328
|
+
| `buildRumSpanAttributes` | 根据 spanType/outcome/outcomeReason 生成分类属性 |
|
|
329
|
+
|
|
330
|
+
内置插件工厂适合 SDK 定制或组合插件。普通接入使用 `tracking` 开关即可;不要把同一个内置工厂再放进 `extensions.plugins`,否则可能重复监听和上报。
|
|
331
|
+
|
|
332
|
+
## 根入口的 TypeScript 类型导出
|
|
333
|
+
|
|
334
|
+
配置:
|
|
335
|
+
|
|
336
|
+
- `BkOTOptions`
|
|
337
|
+
- `BkOTApplicationConfig`
|
|
338
|
+
- `BkOTTransportConfig`、`BkOTBatchConfig`
|
|
339
|
+
- `BkOTTrackingConfig`、`BkOTViewConfig`、`BkOTRequestConfig`
|
|
340
|
+
- `BkOTPrivacyConfig`、`BkOTTrackingConsent`
|
|
341
|
+
- `BkOTContextConfig`、`BkOTAttributesConfig`
|
|
342
|
+
- `BkOTExtensionsConfig`
|
|
343
|
+
- `BkOTUrlMatcher`、`BkOTAttributeValue`
|
|
344
|
+
- `BkOTBeforeSendEvent`、`BkOTRequestEvent`、`BkOTRequestContext`、`BkOTRequestOutcome`
|
|
345
|
+
- `BkOTActionEventPayload`、`BkOTCustomEventPayload`
|
|
346
|
+
- `ResolvedApplicationConfig`、`ResolvedBkOTConfig`、`ResolvedConfigHooks`、`ResolvedTransportConfig`、`ResolvedViewConfig`
|
|
347
|
+
|
|
348
|
+
实例与运行时:
|
|
349
|
+
|
|
350
|
+
- `BkOTInstance`
|
|
351
|
+
- `BkOTUserContext`
|
|
352
|
+
- `BkOTStartViewOptions`、`BkOTViewContext`
|
|
353
|
+
- `BkOTSessionLifecycleEvent`
|
|
354
|
+
- `BkOTPlugin`、`BkOTRuntimeContext`
|
|
355
|
+
- `PluginManager`:当前是 type-only 导出,不能从根入口 `new PluginManager()`
|
|
356
|
+
|
|
357
|
+
插件参数:
|
|
358
|
+
|
|
359
|
+
- `BkOTActionPluginOptions`
|
|
360
|
+
- `BkOTBlankScreenPluginOptions`
|
|
361
|
+
- `BkOTDevicePluginOptions`
|
|
362
|
+
- `BkOTLongTaskPluginOptions`
|
|
363
|
+
- `BkOTSessionConfig`
|
|
364
|
+
|
|
365
|
+
模型:
|
|
366
|
+
|
|
367
|
+
- `RumAttributeKey`
|
|
368
|
+
- `RumSpanClassification`
|
|
369
|
+
- `RumSpanOutcome`
|
|
370
|
+
- `RumSpanType`
|
|
371
|
+
|
|
372
|
+
`BkOTStartSpanOptions` 当前用于方法签名,但没有从 package 根入口单独导出;调用方通常由 `context.startSpan()` 的参数类型自动推导。
|