温馨提示×

Linux下如何分析Nodejs日志

小樊
45
2026-08-02 14:28:16
栏目: 编程语言

在 Linux 下分析 Node.js 日志,通常取决于日志来源、格式和你的分析目的。下面按“常见场景 → 工具 → 实战示例”给你一个系统性的指南。


一、Node.js 日志常见来源

  1. 应用自身日志
    • console.log / console.error
    • 日志库(winston、pino、bunyan、log4js)
  2. 进程管理日志
    • PM2 日志
    • systemd / docker 日志
  3. Web 服务器日志
    • Nginx / Apache 反向代理日志
  4. 系统级日志
    • /var/log/syslog
    • journalctl

二、最常用分析工具(Linux)

1️⃣ 基础文本分析(必备)

cat / less / tail

# 实时查看日志
tail -f app.log

# 查看最后 500 行
tail -n 500 app.log

grep(最常用)

# 查找错误
grep -i error app.log

# 查找某个接口
grep "/api/login" app.log

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

awk(字段分析)

# 统计每分钟请求数
awk '{print $1, $2}' app.log | sort | uniq -c

sed(日志清洗)

# 删除包含 DEBUG 的日志
sed -i '/DEBUG/d' app.log

2️⃣ JSON 日志分析(Node.js 常见)

如果你用的是 pino / winston json 格式

# 格式化 JSON
cat app.log | jq .
# 查找 level 为 error 的日志
cat app.log | jq 'select(.level == 50)'
# 统计错误类型
cat app.log | jq -r '.err.message' | sort | uniq -c

建议:生产环境强烈推荐 JSON 日志


3️⃣ 按时间分析

查看某时间段日志

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

按分钟统计请求

awk '{print substr($0,1,16)}' app.log | sort | uniq -c

4️⃣ PM2 日志分析

pm2 logs
pm2 logs app --lines 200
pm2 logs app --err

合并分析:

pm2 logs --json | jq .

5️⃣ systemd / journalctl

如果 Node.js 是 systemd 服务:

journalctl -u node-app.service -f
journalctl --since "2026-01-20 10:00" --until "11:00"

三、常见分析场景示例

✅ 1. 找 Node.js 崩溃原因

grep -i "uncaughtException\|SIGTERM\|ENOMEM" app.log

✅ 2. 接口慢请求分析

grep "duration" app.log | awk '{if ($5 > 1000) print}'

✅ 3. 统计接口访问量

grep "/api" app.log | awk '{print $7}' | sort | uniq -c | sort -nr

✅ 4. 错误 Top N

grep "Error" app.log | awk '{print $0}' | sort | uniq -c | sort -nr | head -10

四、进阶方案(生产推荐)

✅ ELK / EFK

  • Elasticsearch + Logstash + Kibana
  • 或 Fluent Bit + Elasticsearch

适合:

  • 多服务
  • 高并发
  • 需要可视化

✅ Loki + Grafana

  • 轻量
  • 非常适合 Kubernetes / Docker

✅ 日志最佳实践(非常重要)

✅ 统一格式(JSON)
✅ 包含字段:

{
  "time": "2026-01-20T10:00:00Z",
  "level": "error",
  "pid": 1234,
  "reqId": "abc",
  "msg": "DB connection failed"
}

✅ 区分 stdout / stderr
✅ 不要只依赖 console.log


五、快速诊断流程(推荐)

1. tail -f app.log
2. grep -i error
3. 看是否有 OOM / uncaughtException
4. 按时间段定位
5. 用 jq 分析 JSON 日志

如果你愿意,可以:

  • 贴一段 真实 Node.js 日志
  • 或说明你用的是 PM2 / Docker / systemd
  • 或想分析 性能 / 报错 / 接口问题

我可以直接帮你写针对性的分析命令

0