温馨提示×

nodejs日志ubuntu如何分析

小樊
37
2026-09-03 11:09:00
栏目: 编程语言

在 Ubuntu 上分析 Node.js 日志,通常分为日志来源确认 → 收集方式 → 分析工具 → 实战排查几个步骤。下面给你一套实用指南。


一、Node.js 日志一般来自哪里?

1. 应用自身日志

  • console.log / console.error
  • 日志库(推荐):
    • winston
    • pino(性能最好)
    • bunyan

示例(pino):

const pino = require('pino')
const logger = pino({ level: 'info' })
logger.info({ user: 1 }, 'user login')

2. 进程管理日志(最常见)

PM2

pm2 logs
pm2 logs app-name
pm2 logs --lines 100

日志文件位置:

~/.pm2/logs/

systemd(生产推荐)

如果你用 systemd 启动 Node:

journalctl -u your-node-service
journalctl -u your-node-service -f
journalctl -u your-node-service --since "10 min ago"

3. Nginx / 反向代理日志

/var/log/nginx/access.log
/var/log/nginx/error.log

4. 系统日志

/var/log/syslog
dmesg

二、Ubuntu 下常用日志分析命令

1. 实时查看

tail -f app.log

2. 过滤错误

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

3. 统计错误次数

grep "Error" app.log | wc -l

4. 按时间范围

awk '$1 >= "2026-01-21 10:00" && $1 <= "2026-01-21 11:00"' app.log

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

如果是 JSON 日志(如 pino):

cat app.log | jq 'select(.level == 50)'

按用户统计错误:

cat app.log | jq -r '.user' | sort | uniq -c

四、系统级工具(Ubuntu 自带)

1. journalctl(systemd)

journalctl -u node-app -p err
journalctl -u node-app --since today

2. logrotate(防止日志爆炸)

示例 /etc/logrotate.d/node-app

/var/log/node/*.log {
  daily
  rotate 14
  compress
  missingok
  notifempty
}

五、可视化 & 高级分析(生产环境)

工具 用途
ELK 日志搜索、告警
Grafana + Loki 轻量日志系统
Datadog SaaS 监控
Sentry 错误追踪(推荐)

六、Node.js 常见问题日志排查套路

内存泄漏

node --inspect

配合:

pm2 monit

崩溃无日志

确保:

process.on('uncaughtException', e => {
  logger.error(e)
})

请求慢

  • 看 access log 响应时间
  • pino-http

七、推荐的生产实践

✅ 用 systemd 启动
✅ 用 pino + JSON 日志
✅ 日志输出到 stdout
✅ 用 journald / Loki 收集
✅ 不上报敏感信息


如果你愿意,可以告诉我:

  • 你用的是 PM2 / systemd / Docker
  • 日志是 文本还是 JSON
  • 想解决的具体问题(崩溃 / 慢 / 内存)

我可以直接帮你写分析命令或配置模板

0