温馨提示×

linux nodejs日志如何监控

小樊
36
2026-09-02 12:52:35
栏目: 编程语言

在 Linux 下监控 Node.js 日志,通常可以从日志采集、实时查看、集中化监控、告警几个层面来做。下面按常见场景给你一个实用指南。


一、最基础:实时查看日志

1. tail -f

如果 Node.js 直接输出到文件:

tail -f /var/log/node/app.log

只看错误:

tail -f /var/log/node/app.log | grep ERROR

2. pm2 logs(如果用 PM2)

pm2 logs
pm2 logs appname
pm2 logs --err   # 只看错误日志

二、Node.js 自身日志规范(很重要)

推荐做法

  • 不要用 console.log 到处打
  • 使用日志库:
    • winston
    • pino(性能最好)
    • bunyan

示例(pino):

const pino = require('pino')
const logger = pino({ level: 'info' })

logger.info({ user: 1 }, 'user login')
logger.error(err, 'db error')

输出到文件:

node app.js >> /var/log/node/app.log 2>&1

三、系统级日志监控(不依赖代码)

1. journald(systemd)

如果你用 systemd 启动 Node.js:

journalctl -u node-app.service -f

配置示例:

[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=journal
StandardError=journal

查看错误:

journalctl -u node-app.service -p err

四、日志集中化(生产环境推荐)

方案 1:ELK / EFK

  • Filebeat 采集 Node.js 日志
  • Elasticsearch 存储
  • Kibana 可视化

适合:

  • 多服务
  • 微服务
  • 需要检索和图表

方案 2:Loki + Grafana(轻量)

  • Node.js → 文件日志
  • Promtail 采集
  • Loki 存储
  • Grafana 看板 + 告警

非常适合 Kubernetes / 容器。


方案 3:Graylog

企业常用,开箱即用。


五、异常监控(不只是日志)

1. Sentry(强烈推荐)

  • 捕获 Node.js 异常
  • 自动记录 stack trace
  • 支持 source map
const Sentry = require('@sentry/node')
Sentry.init({ dsn: 'xxx' })

2. Prometheus + Grafana

  • 监控:
    • 请求数
    • 错误率
    • 响应时间
  • 不直接看日志,但能发现异常

六、自动告警示例

简单 shell 告警

tail -f app.log | grep --line-buffered ERROR | while read line
do
  echo "$line" | mail -s "Node ERROR" admin@x.com
done

Grafana / Sentry

  • 错误率 > 1%
  • 5xx 增加
  • 日志中频繁出现 UnhandledPromiseRejection

七、生产环境最佳实践总结

✅ 使用 PM2 或 systemd
✅ 日志分级(info / warn / error)
✅ 日志结构化(JSON)
✅ 集中存储(Loki / ELK)
✅ 接入 Sentry
✅ 设置告警,而不是“人肉看日志”


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

  • 开发环境还是生产环境
  • 是否用 Docker / K8s
  • 当前怎么启的 Node.js(pm2 / systemd / 裸跑)

我可以直接给你一套可复制的配置方案

0