@lark-apaas/observable 1.0.1-alpha.9 → 1.0.2-alpha.2
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 +97 -0
- package/dist/index.cjs +9199 -266
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -18
- package/dist/index.d.ts +24 -18
- package/dist/index.js +9200 -254
- package/dist/index.js.map +1 -1
- package/package.json +5 -8
package/README.md
CHANGED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# @lark-apaas/observable (Observable Server SDK)
|
|
2
|
+
|
|
3
|
+
面向服务端的日志可观测 SDK,基于 OpenTelemetry Logs,提供结构化日志导出能力,并内置请求上下文透传与环境标识,便于在网关或日志采集侧车中统一解析、聚合与检索。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
- 自定义日志导出器 `CustomExporter`,实现了 OTel `LogRecordExporter` 接口(src/core/exporter.ts:28),以 OTLP-like 的结构将日志输出到标准输出。
|
|
7
|
+
- 自动注入通用属性:
|
|
8
|
+
- `uuid`:请求/日志链路 ID(src/core/exporter.ts:41-44)
|
|
9
|
+
- `app_env`:环境标识(Dev/Prod,依据 `NODE_ENV`)(src/core/exporter.ts:40-44)
|
|
10
|
+
- `user_id`、`tenant_id`、`app_id`、`method`、`path`:由 `ContextProvider` 提供的请求上下文(src/core/exporter.ts:46-57)
|
|
11
|
+
- 属性安全转换:所有属性值统一转为字符串,保证 JSON 可序列化(src/core/exporter.ts:19-26)。
|
|
12
|
+
- 时间精度:将 `HrTime` 转换为纳秒数用于时间戳字段(src/utils/hrTimeToNanoNumber.ts:6-18)。
|
|
13
|
+
- 输出前缀/后缀:通过强制前后缀包裹日志行,方便采集器按行切割(src/core/exporter.ts:30-31, 87-89)。
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
该包在工作区内使用 Yarn 管理。
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 在 monorepo 根目录
|
|
20
|
+
yarn install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
外部项目使用:
|
|
24
|
+
```bash
|
|
25
|
+
yarn add @lark-apaas/observable
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
环境要求:
|
|
29
|
+
- Node.js >= 18
|
|
30
|
+
- peerDependencies:`@nestjs/common`、`@nestjs/core`(^10.4.20)
|
|
31
|
+
|
|
32
|
+
## 快速开始(概念示例)
|
|
33
|
+
本包提供的 `CustomExporter` 可直接接入 OpenTelemetry Logs 管道。以下示例展示了如何在应用启动阶段注册日志导出:
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
37
|
+
// 从本包导入 CustomExporter 与 ContextProvider 的实现(根据你的导出入口而定)
|
|
38
|
+
// import { CustomExporter, MyContextProvider } from '@lark-apaas/observable';
|
|
39
|
+
|
|
40
|
+
const provider = new LoggerProvider();
|
|
41
|
+
const contextProvider = /* 你的 ContextProvider 实例 */;
|
|
42
|
+
const exporter = new CustomExporter(contextProvider);
|
|
43
|
+
|
|
44
|
+
provider.addLogRecordProcessor(new BatchLogRecordProcessor(exporter));
|
|
45
|
+
const logger = provider.getLogger('app');
|
|
46
|
+
|
|
47
|
+
// 记录一条结构化日志
|
|
48
|
+
logger.emit({
|
|
49
|
+
body: 'hello observable',
|
|
50
|
+
attributes: { level: 'INFO', module: 'bootstrap' },
|
|
51
|
+
});
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
在 NestJS 项目中,可在根模块的 `onModuleInit` 或专用日志模块中进行以上注册。`ContextProvider` 需在你的请求处理中维护用户/租户等上下文并可被注入。
|
|
55
|
+
|
|
56
|
+
## 日志输出格式
|
|
57
|
+
每条日志以一行 JSON 输出到 stdout,并被前后缀包裹:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
force-log-prefix{ "resource": { "attributes": {} }, "logRecords": [{
|
|
61
|
+
"timeUnixNano": 173..., "observedTimeUnixNano": 173...,
|
|
62
|
+
"severityNumber": 9, "severityText": "INFO",
|
|
63
|
+
"body": "hello observable",
|
|
64
|
+
"attributes": {
|
|
65
|
+
"uuid": "...",
|
|
66
|
+
"app_env": "Dev",
|
|
67
|
+
"user_id": "...",
|
|
68
|
+
"tenant_id": "...",
|
|
69
|
+
"app_id": "...",
|
|
70
|
+
"method": "GET",
|
|
71
|
+
"path": "/api/ping",
|
|
72
|
+
"level": "INFO",
|
|
73
|
+
"module": "bootstrap"
|
|
74
|
+
},
|
|
75
|
+
"traceId": "...",
|
|
76
|
+
"spanId": "..."
|
|
77
|
+
}] }force-log-suffix
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
采集侧可按前缀 `force-log-prefix` 与后缀 `force-log-suffix` 截取完整 JSON,再进行解析与入库。
|
|
81
|
+
|
|
82
|
+
## 注意事项
|
|
83
|
+
- 时间精度:`hrTimeToNanosNumber` 将 `HrTime` 转为 `number`,在超过 `2^53` 时可能发生精度损失(src/utils/hrTimeToNanoNumber.ts:4-18)。如需绝对精度,建议在采集器中支持 `BigInt` 或字符串时间戳。
|
|
84
|
+
- 资源属性:当前 `resource.attributes` 为空占位(src/core/exporter.ts:70-73),如需补充服务名、版本等,可在初始化时合并 `sdk.resource` 信息。
|
|
85
|
+
- 输出介质:默认写入 stdout
|
|
86
|
+
|
|
87
|
+
## 开发与测试
|
|
88
|
+
在本仓库中:
|
|
89
|
+
```bash
|
|
90
|
+
yarn build
|
|
91
|
+
yarn dev
|
|
92
|
+
yarn typecheck
|
|
93
|
+
yarn test
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 许可证
|
|
97
|
+
MIT
|