Ubuntu 环境下常用的 Node.js 日志监控工具与方案
一 应用内日志库
- Winston:多传输(Console/File/HTTP)、多级别、可结构化;适合在应用内落地按级别输出与多目的地落盘,便于后续检索与聚合。示例:同时输出到控制台、错误日志与合并日志。
- Pino:以高性能著称,默认JSON 输出,适合高并发场景;常与 pino-pretty 在开发环境做可读化展示。
- Bunyan:默认 JSON、结构化强,配套 CLI 便于阅读与过滤。
- 选型建议:追求性能优先选 Pino;需要复杂传输与灵活策略选 Winston;偏好结构化与 CLI 生态可选 Bunyan。
二 进程与系统层工具
- PM2:Node.js 生产级进程管理,提供日志聚合、日志轮换、流式查看等能力;常用命令:
pm2 start app.js、pm2 logs myapi。
- journalctl:systemd 日志查询工具;实时查看服务日志:
sudo journalctl -u your-service-name -f,便于排查服务级问题。
- tail / watch:快速本地排查,
tail -f /path/to/app.log 实时跟踪;watch -n 5 cat /path/to/app.log 定期检查新增内容。
- rsyslog / logrotate / logwatch:系统级日志管道、按日/按大小日志轮换与周期报告,适合长期运维与合规归档。
三 集中式日志平台
- ELK Stack(Elasticsearch + Logstash + Kibana):覆盖采集-处理-存储-检索-可视化全链路;可将 Winston/Pino 日志通过 Logstash/HTTP 送入 Elasticsearch,在 Kibana 做复杂查询与仪表盘。
- Graylog:集中式日志管理,支持多输入、解析与告警,适合替代或补充 ELK 的团队与场景。
- 适用场景:多服务/多实例、需要统一检索、可视化与告警的中大型系统。
四 指标与可视化监控
- Prometheus + Grafana:采集 HTTP 指标(如请求时延、错误率、内存/CPU),在 Grafana 构建业务与性能仪表盘;Node.js 侧使用 prom-client 暴露指标端点。
- 适用场景:需要时序指标与可视化告警的团队;与日志平台互补,用于性能与健康度观测。
五 选型与落地建议
- 规模与复杂度:单服务/小团队优先 Winston/Pino + PM2/journalctl;多服务/多环境引入 ELK/Graylog 做集中化。
- 性能与开销:高并发优先 Pino;日志量大时务必启用异步写入与日志轮换,避免磁盘与 I/O 成为瓶颈。
- 结构化与可观测性:统一使用JSON 日志,包含时间戳、级别、服务名、请求ID、堆栈等关键字段,便于检索与链路追踪。
- 告警与可视化:日志平台负责错误/异常检索与报表,Prometheus + Grafana 负责指标与阈值告警,两者组合覆盖大多数运维需求。