CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 运行时进阶/课时/APM 与生产监控
RawBlame
课时目录12 节

Node.js 运行时进阶

  1. 01运行时进阶概览
  2. 02定时器与 nextTick
  3. 03回调与错误栈
  4. 04子进程
  5. 05Worker Threads
  6. 06Cluster 与多进程
  7. 07垃圾回收
  8. 08调试 Node
  9. 09APM 与生产监控
  10. 10CLI 工具链
  11. 11global 与内置模块
  12. 12综合练习

APM 与生产监控

using-apm;衔接 observability。

25 分钟

APM 与生产监控

开发期用 nrt-debug;上线后需要 metrics、tracing、错误聚合——APM(Application Performance Monitoring)把 延迟、吞吐、GC、未捕获异常 持续可视化,衔接 broader observability 路线。

学习目标

  • 说清 metrics / logs / traces 三支柱在 Node 中的落点
  • 了解 OpenTelemetry 与常见 SaaS(Datadog、New Relic 等)集成方式
  • 避免在高 QPS 路径上同步打满日志

三支柱速览

支柱Node 典型实现回答的问题
Metricsprom-client、OTel MeterQPS、P99、heap、event loop lag
Logspino、winston → stdout/ELK某次请求发生了什么
TracesOpenTelemetry + Jaeger/Tempo慢在哪一段、跨服务链路

Golden signals:延迟、流量、错误、饱和度(CPU、event loop delay)。

Event Loop 延迟

主线程被 nrt-worker 未 offload 的 CPU 堵住时,所有请求一起慢——监控 eventLoopUtilization / perf_hooks.monitorEventLoopDelay:

import { monitorEventLoopDelay } from "node:perf_hooks";

const h = monitorEventLoopDelay({ resolution: 10 });
h.enable();

setInterval(() => {
  console.log({
    p50: h.percentile(50) / 1e6,
    p99: h.percentile(99) / 1e6,
  });
  h.reset();
}, 10_000);

P99 持续 > 50–100ms 值得查同步代码或 GC(nrt-gc)。

OpenTelemetry 入门(概念)

// 伪代码:实际需 @opentelemetry/sdk-node 等包
import { trace } from "@opentelemetry/api";

const span = trace.getTracer("app").startSpan("handleRequest");
try {
  await doWork();
} finally {
  span.end();
}

自动 instrumentation 可钩住 http、fs——注意 采样率(生产常 1–10%),避免 trace 存储爆炸。

与 Java Micrometer / Spring Actuator 类似:统一 export 到 Prometheus/Grafana 是常见自建方案。

错误与 process 事件

process.on("uncaughtException", (err) => {
  // 上报 APM 后:记录、告警;是否 exit 视策略而定
  console.error(err);
});

process.on("unhandledRejection", (reason) => {
  console.error("unhandledRejection", reason);
});

最佳实践:unhandledRejection 在 Node 未来版本可能直接退出——业务层 await 链务必 .catch(nrt-callbacks)。

日志与 PII

  • 结构化 JSON 日志便于检索;不要把密码、token 打进 message。
  • 高 QPS 避免 同步 console.log 洪水——用 pino 等异步 logger,或采样 debug。

练习

  • 为 Express 加 /metrics 返回自研 memoryUsage + 简单请求计数
  • 用 monitorEventLoopDelay 在故意 CPU 阻塞前后对比 P99
  • 列出你会上报的 5 个 alert 条件(错误率、heap、loop lag 等)

小结

Metrics 看趋势,Traces 定位慢路径,Logs 补上下文。 下一课 CLI 工具链——commander、chalk、nodemon 的运行时视角。

加载本节练习…
← 上一课调试 Node下一课 →CLI 工具链