Ubuntu 上 Node.js 日志与其他工具的集成指南
一 本地与进程管理集成
- 使用 PM2 统一托管与采集日志:启动应用后通过 pm2 logs 实时查看,配合 pm2 logrotate 按大小或时间切分,避免单文件过大;适合多实例与服务化部署。
- 快速命令示例:
- 启动与命名:pm2 start app.js --name my-api
- 实时查看:pm2 logs my-api;过滤关键字:pm2 logs | grep error
- 轮转配置:启用 pm2 logrotate 并设置保留策略
- 开发期可用 nodemon 监听变更并重启,便于控制台即时输出与调试。
二 结构化日志与系统日志集成
- 在代码层使用 Winston / Bunyan / Pino 输出结构化日志(如 JSON),便于检索与聚合;示例(Winston):
- 安装:npm install winston
- 配置:
- const winston = require(‘winston’);
- const logger = winston.createLogger({ level: ‘info’, format: winston.format.json(), transports: [new winston.transports.File({ filename: ‘error.log’, level: ‘error’ }), new winston.transports.File({ filename: ‘combined.log’ }), new winston.transports.Console()] });
- 将日志写入 rsyslog/syslog-ng(便于与系统日志统一管理与远程转发):
- 安装传输插件:npm install winston syslog-transport
- 配置 Syslog 传输并使用 journalctl -u my-node-app -f 检索服务日志。
三 集中式日志平台与远程转发
- 方案选型与对比:
- ELK(Elasticsearch + Logstash + Kibana):采集、解析、检索与可视化能力强,适合复杂查询与深度分析。
- EFK(Elasticsearch + Fluentd + Kibana):采集更轻量,云原生友好。
- Syslog 远程:通过 rsyslog/syslog-ng 将日志以 UDP/TCP 发送到集中日志主机,利于合规审计与统一落盘。
- 快速上手示例:
- ELK/Logstash 采集文件:
- input { file { path => “/var/log/myapp/*.log” start_position => “beginning” } }
- output { elasticsearch { hosts => [“localhost:9200”] index => “nodejs-logs-%{+YYYY.MM.dd}” } }
- EFK/Fluentd 采集文件:
-
@type tail path /var/log/myapp/*.log pos_file /var/log/td-agent/nodejs.log.pos tag nodejs.log @type none
- @type elasticsearch host localhost port 9200 logstash_format true flush_interval 10s
- Syslog 远程转发:在 /etc/rsyslog.conf 添加 “. @<remote_ip>:514”(UDP),或使用 syslog-ng 定义 destination 与 log 路径。
四 错误追踪与性能监控联动
- 错误追踪与日志联动:使用 Sentry 捕获未处理异常与 unhandledRejection,并与 Winston 结合,将 error 级别日志上报至 Sentry,形成“日志 + 堆栈 + 上下文”的闭环。
- 安装:npm install @sentry/node
- 初始化:Sentry.init({ dsn: ‘YOUR_SENTRY_DSN’, environment: process.env.NODE_ENV || ‘development’, release: ‘YOUR_RELEASE_VERSION’ });
- 全局异常:监听 uncaughtException / unhandledRejection 并上报;必要时自定义 Winston Transport 将错误日志同步到 Sentry。
- 性能监控与指标:使用 prom-client 暴露 /metrics,配合 Prometheus + Grafana 构建请求耗时、吞吐等仪表盘,实现指标与日志的互补观测。
- 示例:创建 Histogram 记录 http_request_duration_ms,并在 /metrics 端点返回指标数据。
五 生产落地与运维要点
- 统一日志格式:在应用侧输出结构化 JSON,包含 timestamp、level、service、trace_id 等关键字段,提升检索与聚合效率。
- 日志轮转与保留:使用 PM2 logrotate 或 logrotate 按日/按大小切分并设置保留天数,防止磁盘被占满。
- 安全与合规:集中式平台启用 认证/授权 与 TLS;远程 Syslog 优先 TCP/TLS 并限制来源网段。
- 告警与可视化:在 Kibana 配置基于关键字的告警;结合 Grafana 面板展示 P95/P99 延迟、错误率与吞吐趋势。