温馨提示×

如何分析nodejs linux日志

小樊
35
2026-09-08 13:48:29
栏目: 编程语言

分析 Node.js 在 Linux 上的日志,通常可以分为日志来源定位 → 收集方式 → 分析手段 → 问题排查思路四个层面。下面给你一个比较系统和实用的指南。


一、明确 Node.js 日志的来源

1. 应用自身日志

常见方式:

  • console.log / console.error
  • 日志库:
    • winston
    • pino
    • bunyan
    • log4js

一般输出位置:

  • 标准输出(stdout / stderr)
  • 文件(如 logs/app.log
  • 远程(ELK、Loki、Sentry)

2. 系统 / 进程日志

  • Linux 系统日志:
    • journalctl -u your-node-service
    • /var/log/syslog
    • /var/log/messages
  • PM2 日志:
    • ~/.pm2/logs/
    • pm2 logs

3. 崩溃 & 异常日志

  • Node.js 未捕获异常:
    • uncaughtException
    • unhandledRejection
  • Core dump / OOM:
    • dmesg | grep -i kill
    • /var/log/kern.log

二、常见日志分析方式(命令行)

1️⃣ 实时查看日志

tail -f app.log
pm2 logs
journalctl -u node-app -f

2️⃣ 按关键字过滤

grep -i "error" app.log
grep "ECONNRESET" app.log

3️⃣ 统计错误数量

grep -c "Error" app.log

4️⃣ 时间范围分析

sed -n '/2026-01-21 10:00/,/2026-01-21 11:00/p' app.log

5️⃣ 高频错误 Top N

grep "Error" app.log | sort | uniq -c | sort -nr | head

三、结构化日志分析(推荐)

使用 JSON 日志(pino / winston)

{
  "level": "error",
  "time": "2026-01-21T10:00:00Z",
  "msg": "DB timeout",
  "pid": 1234
}

分析方式:

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

四、性能 & 异常问题排查思路

1. CPU 高

top -p <pid>
perf top -p <pid>

配合日志:

  • 是否有死循环
  • 是否有大量同步计算

2. 内存泄漏

  • 日志中是否有:
    • heap out of memory
  • 工具:
    node --inspect
    
    或用 heapdump

3. 请求异常

重点看:

  • ETIMEDOUT
  • ECONNRESET
  • ENOTFOUND
  • HTTP 5xx / 4xx 日志

五、集中式日志方案(生产推荐)

  • ELK:Elasticsearch + Logstash + Kibana
  • Loki + Grafana
  • Sentry(错误监控)
  • Datadog / Aliyun SLS

六、一个简单分析模板

# 查看今天错误
grep "$(date +%Y-%m-%d)" app.log | grep -i error

# 查看崩溃
grep -i "uncaught\|unhandled" app.log

# 查看慢请求
grep "slow request" app.log | awk '{print $NF}' | sort -n

如果你愿意,可以:

  • 贴一段 真实 Node.js 日志
  • 或告诉我你用的是 PM2 / Docker / K8s
  • 或你想分析的是 性能 / 报错 / 崩溃

我可以直接帮你做具体日志分析。

0