后端录音器启动器
下载后端记录器捆绑脚本并执行. 后端记录器在Node.js应用中拦截到HTTP请求/响应,使用OpenTeleometry,输出范围为Meticulous.
设置
npm install @alwaysmeticulous/backend-recorder-launcher
备选案文1:使用 instrumentation.js (建议)
创建或更新您的 instrumentation.js (或 instrumentation.ts) 位于项目根上的文件 :
const {
initBackendRecorder,
} = require("@alwaysmeticulous/backend-recorder-launcher");
initBackendRecorder({
recordingToken: process.env.METICULOUS_RECORDING_TOKEN,
});
然后开始你的应用 --require 标记, 因此记录器是在应用程序代码前加载的 :
node --require ./instrumentation.js app.js
如果您正在使用 Next.js, 请加入仪器钩 instrumentation.ts数字 :
export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs") {
const { initBackendRecorder } =
await import("@alwaysmeticulous/backend-recorder-launcher");
await initBackendRecorder({
recordingToken: process.env.METICULOUS_RECORDING_TOKEN,
});
}
}
备选案文2:自动点名(零码)
使用 auto-init 初始化记录器作为副作用的入口。 不需要更改代码——只需添加 --require 旗帜 :
node --require @alwaysmeticulous/backend-recorder-launcher/auto-init app.js
自动点读自环境变量的配置.
配置
initBackendRecorder 接受可选选项 BackendRecorderConfig 对象 :
| 选项 | 类型 | 说明 |
|---|---|---|
enabled | boolean | 启用/ 禁用记录器( 默认 ): true(中文(简体) ) |
meticulousProjectName | string | 冰毒项目的名称 |
recordingToken | string | 用于认证上传的托肯 |
exportMode | "local" | "s3" | 导出跨度( 默认值 : "local"(中文(简体) ) |
localOutputDir | string | 本地出口目录 |
flushIntervalMs | number | 冲出( 毫秒) 频率 |
spanRedactionHooks | ((value: string) => string)[] | 上传前转换可编辑跨字符串的记录时间钩 |
编辑已记录的后端数据
使用 spanRedactionHooks 在保存或上传完成的跨度之前替换敏感值.
每个钩子接收每个可编辑的字符串,必须返回一个字符串. 钩子按顺序跑
提供.
await initBackendRecorder({
recordingToken: process.env.METICULOUS_RECORDING_TOKEN,
spanRedactionHooks: [
(value) =>
value.replace(/api_key=[A-Za-z0-9_-]+/g, "api_key=[REDACTED_API_KEY]"),
],
});
钩子覆盖横跨名称,错误/状态消息,以及所有横跨属性值,包括字符串 内部数组或对象和 JSON 在字符串中捕获。 他们不改变属性名称, 痕量/宽度/父母身份、时间戳、跨度类型、客户端技术路径或前端会话身份.
虎克只在录音时运行. 如果钩子扔出或还回了非弦, 金属会放弃 而不是在没有编辑的情况下保存间隔。 替换后端生成的请求数据 也可以修改重放匹配键; 使用稳定的替换并验证相应的输入 将在重播时具有相同的值。 此程序选项适用于节点.js记录器和 cloudflare工人侧车不可用.
伟大的关闭
initBackendRecorder 返回 a BackendRecorderHandle 带有 stopRecording() 方法。 在您的进程退出前拨打它以冲出任何待定的跨度 :
const handle = await initBackendRecorder({
/* ... */
});
process.on("SIGTERM", async () => {
await handle?.stopRecording();
process.exit(0);
});