首页/新闻资讯/正文详情

在 Nest.js 中接入 highlight.io:错误监控、日志采集与分布式追踪完整实战指南

发布时间:2026/9/26 20:51:47 来源:云帆数科 栏目:资讯中心
在 Nest.js 中接入 highlight.io:错误监控、日志采集与分布式追踪完整实战指南
可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载本篇技术指南基于 highlight.io 开源仓库中的 Nest.js 快速开始文档docs-content/getting-started/4_server/2_js/nestjs.md及其配套 QuickStart 内容展开。highlight.io 是一款开源的全栈可观测性平台统一提供错误监控Error Monitoring、会话回放Session Replay、日志Logging与分布式追踪Distributed Tracing。本文聚焦其服务端 JavaScript SDK 在 Nest.js 场景下的接入读完本文你将掌握如何安装highlight-run/nestSDK、初始化配置参数的含义、如何通过全局拦截器捕获后端异常、如何手动上报错误、如何用自定义 Logger 采集日志以及整个接入链路在源码层面的工作原理。接入前置条件在开始接入 Nest.js 之前需要先在 highlight.io 平台创建一个项目并获取你的Project ID形如YOUR_PROJECT_ID该 ID 是所有初始化配置的核心参数。仓库中提供了完整的快速开始目录结构服务端 JS 各框架的接入说明位于 docs-content/getting-started/4_server/2_jsNest.js 的 QuickStart 内容定义在 highlight.io/components/QuickstartContent/server/js/nestjs.tsx。同时仓库在 highlight.io/middleware.ts 中维护了文档路由的兼容重定向旧路径getting-started/backend-sdk/js/nestjs与getting-started/backend-logging/js/nestjs都会统一指向/docs/getting-started/server/js/nestjs因此无论从哪个入口进入看到的都是同一份 Nest.js 接入指南。安装 Highlight SDKNest.js 场景下需要安装的是 Node.js 相关的highlight-run/nest包。仓库中的jsGetSnippet辅助函数定义于 highlight.io/components/QuickstartContent/server/js/shared-snippets-monitoring.tsx会在页面上为每个 SDK slug 生成安装命令npm install --save highlight-run/nest该包是 highlight.io 为 Nest.js 框架提供的官方集成包其实现位于仓库 sdk/highlight-nest/src/index.ts内部依赖highlight-run/node作为底层 SDK 引擎。初始化 highlight.io 并注册全局拦截器安装完成后在应用的启动入口通常是main.ts中初始化 SDK并注册HighlightInterceptor全局拦截器。这是 QuickStart 中给出的完整代码import { NestFactory } from nestjs/core; import { AppModule } from ./app.module; import { HighlightInterceptor, H } from highlight-run/nest; const env { projectID: YOUR_PROJECT_ID, serviceName: my-nestjs-app, serviceVersion: git-sha, environment: production, debug: false, }; async function bootstrap() { H.init(env); const app await NestFactory.create(AppModule); app.useGlobalInterceptors(new HighlightInterceptor(env)); await app.listen(3000); } bootstrap();H.init(env)负责初始化底层 Node SDKapp.useGlobalInterceptors(new HighlightInterceptor(env))则把拦截器注册为全局中间件使所有 HTTP 请求都经过错误采集链路。需要注意HighlightInterceptor构造时如果检测到 SDK 尚未初始化会自动调用H.init(env)见 sdk/highlight-nest/src/index.ts因此即使忘记手动调用H.init拦截器也会兜底完成初始化。env 配置参数说明QuickStart 中的env对象是 SDK 的标准配置项各字段含义如下参数示例值含义projectIDYOUR_PROJECT_ID必填。highlight.io 项目 ID决定数据上报到哪个项目空间serviceNamemy-nestjs-app服务名称用于在平台上区分不同服务建议与部署单元一致serviceVersiongit-sha服务版本标识实践中可填入 Git commit SHA 或发布版本号便于定位回归environmentproduction运行环境如production、development用于环境维度过滤debugfalse是否开启 SDK 调试日志排查接入问题时置为true可观察上报细节错误捕获原理HighlightInterceptor 做了什么从源码看HighlightInterceptor实现了 NestJS 的NestInterceptor接口sdk/highlight-nest/src/index.ts其工作流程可以拆解为三步开启请求 Span在intercept方法中取出 HTTP 上下文调用NodeH.startWithHeaders(...)以${request.method} ${request.url}为名开启一个追踪 Span并把http.method、http.url写入 Span 属性同时通过api.context.bind把 OpenTelemetry 上下文绑定到后续处理器上——这正是分布式追踪得以串联请求的关键一步。捕获异常对next.handle()返回的 Observable 管道挂载catchError一旦下游处理器抛出错误就调用NodeH.consumeError(err, ...)把异常连同当前请求 Span 上报到 highlight.io然后原样throwError重新抛出不会吞掉业务异常Nest 自身的异常处理机制不受影响。结束 Span在finalize回调中调用requestSpan.end()无论请求成功还是失败Span 都会被正确关闭。因此 QuickStart 中注册的这个拦截器同时承担了错误监控与自动追踪两件事这也是其标题Use theHighlightErrorFiltermiddleware to capture backend errors的实质含义。手动上报错误拦截器只能覆盖经过 Nest 路由管道的异常。如果需要在拦截器覆盖范围之外例如定时任务、队列消费、消息处理器上报错误QuickStart 提供了手动上报方式const parsed H.parseHeaders(request.headers) H.consumeError(error, parsed?.secureSessionId, parsed?.requestId)H.parseHeaders会从请求头中解析出 highlight.io 的会话标识secureSessionId与请求标识requestId从而把后端错误关联到对应的前端会话与请求H.consumeError则负责实际写入错误事件。这样即使错误发生在拦截器之外也能保持与用户会话的上下文关联。验证错误上报是否生效接入完成后需要验证 SDK 是否真的在报告错误。QuickStart 给出了一段可以直接放入 Nest.jsAppService的验证代码import { Injectable } from nestjs/common Injectable() export class AppService { getHello(): string { console.log(hello, world!) console.warn(whoa there! , Math.random()) if (Math.random() 0.2) { // error will be caught by the HighlightErrorFilter throw new Error(a random error occurred! ${Math.random()}) } return Hello World! } }该服务以 20% 的概率抛出一个随机错误同时打印一条console.log与一条console.warn。访问对应的 API 处理器后可以前往 highlight.io 控制台的错误列表页确认错误是否出现控制台日志则会由下面的日志采集机制自动上报。记录后端日志HighlightLogger日志是服务端可观测性的另一块拼图。Nest.js 的日志接入同样复用同一份初始化代码只需注意日志场景下拦截器会额外承担日志转发职责。对应的日志 QuickStart 内容定义在 highlight.io/components/QuickstartContent/logging/js/nestjs.tsx其核心说明是使用HighlightLogger中间件把后端日志记录到 highlight.io。从源码看HighlightLogger继承自 NestJS 内置的ConsoleLogger并重写了五个日志方法sdk/highlight-nest/src/index.ts重写方法对应上报级别loginfoerrorerrorwarnwarndebugdebugverbosetrace每个方法都在调用父类输出控制台日志的同时通过NodeH.log(message, level)把日志转发到 highlight.io并做了异常兜底上报失败只输出_debug提示不影响应用正常运行。这意味着应用内使用Logger、console.log等途径产生的日志都会自动被采集无需逐个埋点。HighlightLogger还实现了OnApplicationShutdown在应用关闭时调用NodeH.flush()确保内存中的日志与错误在进程退出前被完整冲刷。分布式追踪与前端会话自动串联QuickStart 的entries中包含了verifyTraces验证步骤配合HighlightInterceptor在第 1 步开启的请求 Span后端每个 HTTP 请求都会成为一条可追踪的链路。由于H.parseHeaders可以从入站请求头还原前端会话与请求 ID前后端数据能够在追踪视图中自动关联——即前端会话回放、后端错误、日志与追踪可以围绕同一个用户请求完整串联这正是 highlight.io 全栈监控 的核心体验。关于追踪的上报与验证细节仓库还提供了独立的追踪快速开始模板见 highlight.io/components/QuickstartContent/shared-snippets-tracing.tsx。进阶使用 HighlightModule 以模块化方式接入除了手动初始化与注册全局拦截器SDK 还提供了 Nest 模块化的接入方式。HighlightModulesdk/highlight-nest/src/index.ts暴露了两个静态方法HighlightModule.forRoot(options)同步注册内部初始化 Node SDK并把HighlightLogger与HighlightInterceptor同时注册为 provider 并导出HighlightModule.forRootAsync(options)异步变体同样完成初始化与 provider 注册。两种方式都内置了幂等判断if (!NodeH.isInitialized())不会重复初始化 SDK。在AppModule的imports中引入HighlightModule.forRoot(env)即可在依赖注入体系中直接使用HighlightLogger与HighlightInterceptor更适合大型 Nest.js 工程的模块化管理。结语一次接入三面覆盖从 highlight.io/components/QuickstartContent/server/js/nestjs.tsx 可以看出Nest.js 快速开始共包含 6 个步骤前端安装、SDK 安装、注册拦截器、手动错误上报、错误验证、日志验证最终同时覆盖 Errors、Logs、Traces 三个产品能力。接入的核心就是三件事npm install highlight-run/nest安装 SDK用H.init(env)配置项目 ID 与服务元信息注册HighlightInterceptor全局拦截器错误 追踪并借助HighlightLogger或继承ConsoleLogger的日志机制自动采集日志。所有能力都有对应的源码实现可查sdk/highlight-nest/src/index.ts接入过程中若遇到问题可先将debug置为true观察 SDK 内部上报日志再结合控制台数据逐项排查。赞分享可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载相关推荐highlight.io 接入 Python FastAPI错误监控、日志采集与分布式追踪完整指南highlight.io 接入 Python FastAPI错误监控、日志采集与分布式追踪完整指南 本篇指南围绕 highlight.io 官方为 Pytho可观测性后端highlight.io Java SDK 后端接入指南错误监控、日志采集与分布式追踪实战highlight.io Java SDK 后端接入指南错误监控、日志采集与分布式追踪实战 本文围绕 highlight.io开源全栈可观测平台的 Jav可观测性后端在 Node.js 服务端接入 highlight.io错误监控、日志与分布式追踪完整指南在 Node.js 服务端接入 highlight.io错误监控、日志与分布式追踪完整指南 本指南以 highlight.io 官方文档 Node.js Qu可观测性后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

从GitHub克隆代码到本地:Git Clone避坑指南与参数详解
从GitHub克隆代码到本地:Git Clone避坑指南与参数详解

很多刚接触Git的朋友,第一次从GitHub上clone代码到本地,往往会在命令行敲下git clone后对着一个闪烁的光标干等,然后收到一堆看不太懂的英文报错,最后要么去搜索引擎翻“github打不开怎么办”,要么干脆把窗口关掉。这篇… · 2026/9/26 20:51:41

Spring Cloud Gateway限流熔断实战:外卖霸王餐突发流量下的网关优化
Spring Cloud Gateway限流熔断实战:外卖霸王餐突发流量下的网关优化

做过外卖霸王餐活动的后台同学应该都经历过那种感觉——活动页面上写着“每天10:00开抢”,作为后端负责人,你从9:58开始心里就打鼓。流量对网关来说从来不像压测报告里那样均匀增长,而是到点的一瞬间像水闸打开一样灌进来,网关Acc… · 2026/9/26 20:51:41

WiNEX平台化落地实战:从HIS迁移到CDR数据中心的踩坑指南
WiNEX平台化落地实战:从HIS迁移到CDR数据中心的踩坑指南

简介:这份PDF资料系统介绍卫宁健康新一代医疗数字化转型平台WiNEX,面向医院信息科人员、医疗IT产品经理及关注智慧医疗的开发者,聚焦解决医疗机构在流程再造、信息共享、系统集成与数据标准化等方面的共性痛点。资源为单文件PDF,共… · 2026/9/26 20:51:41

VirtualBox报错VERR_NEM_NOT_AVAILABLE原因与修复
VirtualBox报错VERR_NEM_NOT_AVAILABLE原因与修复

1. 这个报错到底在说什么?——不是VirtualBox坏了,是你的电脑“没准备好”你双击启动一个VirtualBox虚拟机,屏幕弹出红色警告框:“不能为虚拟电脑打开一个新任务。Not in a hypervisor partition (HVP0) (VERR_NEM_NOT_AVAILABLE)… · 2026/9/26 21:36:06

AI智能体L1-L5安全分级框架:从权限控制到审计落地的实战指南
AI智能体L1-L5安全分级框架:从权限控制到审计落地的实战指南

过去一个月我收到最多的私信是同一个问题:你们团队的Agent,安全到底怎么做的?问的人里有做大模型应用的、做RPA的、也有做运维自动化的,处境几乎一样——Demo跑得飞快,一上生产就提心吊胆。正好这段时间AI安全方向讨论… · 2026/9/26 21:36:06

PHP安全过滤库输入过滤最佳实例探究
PHP安全过滤库输入过滤最佳实例探究

正文PHP安全过滤器库可以帮助我们防止常见的安全漏洞,如跨站点脚本攻击(XSS)、SQL注入、文件上传漏洞等。这些漏洞可能导致用户数据泄露、篡改或恶意使用,影响用户隐私和公司声誉。安全过滤库提供了方便快捷的功能,可用… · 2026/9/26 21:36:06

Day 0 部署:昇腾 910B 上 DeepSeek-V4 的 GPUStack 与 vLLM 配置指南及压测表现
Day 0 部署:昇腾 910B 上 DeepSeek-V4 的 GPUStack 与 vLLM 配置指南及压测表现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 21:36:06

Java变量深度解析:从定义、作用域到final的底层原理与面试陷阱
Java变量深度解析:从定义、作用域到final的底层原理与面试陷阱

记不清多少次面试了,候选人在自我介绍环节讲得天花乱坠,分布式、微服务、高并发张口就来,结果我随手写了一个int a 1; int b a; a 2;然后问他b现在等于几,他都要愣神两秒。这不是段子,是我这些年面试Java开发真实遇… · 2026/9/26 21:35:59

AI生成视频到三维高斯重建:minimaxH3绕拍数据采集实战
AI生成视频到三维高斯重建:minimaxH3绕拍数据采集实战

1. 先把核心矛盾说透:没有实物,多视角数据从哪来1.1 三维高斯重建不是"有几张图就能跑"三维高斯泼溅(3D Gaussian Splatting,3DGS)这个概念,论文读起来很轻巧——"几十张照片,几… · 2026/9/26 21:35:59

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码