温馨提示×

如何分析Nodejs运行日志

小樊
46
2026-07-18 19:47:04
栏目: 编程语言

分析 Node.js 运行日志,核心目标是快速定位问题、评估系统健康、发现性能瓶颈。下面从「日志来源 → 分析维度 → 工具方法 → 实战示例」系统讲一下。


一、Node.js 日志常见来源

1. 应用层日志

  • console.log / console.error
  • 日志库输出(推荐)
    • winston
    • pino(高性能)
    • bunyan

2. 运行环境日志

  • Node.js 崩溃日志
  • 未捕获异常
  • 未处理的 Promise rejection

3. 服务层日志

  • PM2 日志
  • Docker 容器日志
  • Nginx / 网关日志

二、日志分析的核心维度

1. 错误分析(最重要)

关注点:

  • ERROR / FATAL
  • stack trace
  • 错误发生时间
  • 请求上下文(requestId、userId)

示例:

{
  "level": "error",
  "message": "Database connection failed",
  "stack": "Error: connect ECONNREFUSED...",
  "timestamp": "2026-01-21T10:00:00Z"
}

常见错误类型:

  • ECONNREFUSED(服务未启动)
  • ETIMEDOUT(网络/数据库慢)
  • Cannot read property xxx of undefined(代码 bug)
  • PayloadTooLargeError(请求体过大)

2. 性能分析

重点看:

  • 请求耗时
  • 事件循环延迟
  • 内存使用趋势

请求耗时

{
  "method": "GET",
  "url": "/api/user",
  "duration": 1200,
  "status": 200
}

判断标准:

  • < 200ms:正常
  • 1s:需要优化

  • 5s:高风险

事件循环

  • 使用 blocked / clinic
  • 日志中频繁 GC 或 CPU 100% 是警告信号

3. 并发 & 流量分析

关注:

  • QPS(每秒请求数)
  • 并发错误
  • 限流、超时日志

示例:

Too many requests
Request timeout after 3000ms

4. 稳定性分析

重点:

  • 崩溃次数
  • 重启频率
  • 内存泄漏迹象

危险信号:

  • 内存持续增长不回落
  • 频繁 heap out of memory
  • PM2 自动重启

三、日志分析工具

1. 本地分析

基础命令

# 查看错误日志
grep ERROR app.log

# 统计错误数量
grep -c ERROR app.log

# 查看最近 100 行
tail -n 100 app.log

结构化日志(JSON)

jq 'select(.level=="error")' app.log

2. 日志平台(强烈推荐)

工具 适用场景
ELK(Elasticsearch + Logstash + Kibana) 企业级
Grafana + Loki 轻量
Datadog / New Relic 商业
Sentry 错误追踪

3. Node.js 专项工具

  • clinic.js(性能分析神器)
    clinic doctor -- node app.js
    
  • 0x(火焰图)
  • node --inspect(实时调试)

四、Node.js 日志最佳实践(分析友好)

1. 使用结构化日志(JSON)

logger.info({
  event: 'user_login',
  userId: 123,
  duration: 45
})

2. 必须包含上下文

  • requestId
  • userId
  • traceId

3. 分层日志级别

  • debug:开发
  • info:正常流程
  • warn:可恢复异常
  • error:必须处理

五、实战分析流程(示例)

场景:接口突然变慢

步骤:

  1. 查日志中 duration > 1000
  2. 判断是否集中在某些接口
  3. 查看是否有 DB / 第三方 API 超时
  4. 检查 CPU / 内存是否异常
  5. 对比上线时间,确认是否由发布引起

六、常见误区

❌ 只打 console.log
❌ 日志中无上下文
❌ 把日志当数据库用
❌ 错误或 warn 被忽略


七、总结一句话

Node.js 日志分析 = 错误定位 + 性能评估 + 稳定性监控

如果你愿意,可以:

  • 贴一段真实日志,我帮你分析
  • 告诉我你用 PM2 / Docker / 云服务器 哪一种
  • 或说明你是 排查 bug / 性能优化 / 线上事故

我可以给你更针对性的方案。

0