整体思路很简单:要把日志做成一个结构化、可检索、可告警的闭环体系,才能真正服务于生产环境的稳定性。在Node.js这一端,选合适的日志库输出统一格式,配合logrotate或按日切分控制磁盘占用;系统侧用rsyslog或journalctl统一采集;分析侧交给ELK或Graylog做聚合和可视化;可观测性层面,用Prometheus搭配Grafana完成指标与链路追踪。这样一套下来,其实就是“日志驱动”的发现、定位、修复、验证机制。
一、日志采集与结构化
日志库的选择上,行业里比较成熟的是 Winston、Pino、Bunyan 或者 Log4js。它们都能输出结构化的 JSON 格式,并且会带上 timestamp、level、service、trace_id 这些关键字段。生产环境里,一般用 info、warn、error 这三个级别就够了,排查问题的时候再临时调到 debug。通过环境变量来控制日志级别,这样就不用改代码了,随时可以切换。
还要区分清楚访问日志和业务日志。HTTP 层可以用 morgan 记录请求信息,业务逻辑和异常用 Winston 或 Pino 记录,千万不要用 console.log 直接往磁盘写。
举个 Winston 的例子,用环境变量控制日志级别:
安装:
npm i winston
配置:
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
运行时:
LOG_LEVEL=debug node app.js
如果需要把应用日志和系统日志统一管理,可以对接 syslog。安装
npm i winston-syslog,然后配置一个 Syslog 传输端:
new winston.transports.Syslog({ host: 'localhost', facility: 'local0', tag: 'my-node-app' })
二、日志轮转与保留策略
应用侧可以用 winston-daily-rotate-file 这类工具按日或按大小切分日志,避免单文件过大,方便后续检索和归档。
系统侧更推荐用 logrotate 来管理。在
/etc/logrotate.d/nodejs 里配置一下:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
这样就能按天轮转,保留最近 7 天,旧的自动压缩,新文件权限也设置好了。
三、检索分析与可视化
在本地或者
服务器上,命令行直接查也挺方便的。比如查错误数量:
grep "ERROR" logs/combined.log | wc -l
查某个时间段的内容:
awk '/2025-12-04 10:00:00/,/2025-12-04 11:00:00/' logs/combined.log
如果日志量大了,还是得上集中化分析平台。ELK Stack 是比较经典的方案:Filebeat 或 Logstash 负责采集,Grok 做解析,Elasticsearch 存储,Kibana 做可视化(访问
http://your_ip:5601 就能看到)。Graylog 也是一个不错的选择,集中接收、索引、存储和分析海量日志。
系统日志统一查看可以用
journalctl:
journalctl -u rsyslog
journalctl -u my-node-app
配合 grep 和 awk 就能做过滤和统计。
四、稳定性改进闭环与告警
几个关键指标要盯住,并且和日志关联起来:
- 错误密度:单位时间内的 ERROR 数量,比如 5 分钟窗口内异常突增,就要触发告警。
- HTTP 质量:4xx 和 5xx 的比例,还有 P95 和 P99 的延迟,这些数据可以在日志或 APM 中输出,持续劣化就需要预警。
- 异常处理:未捕获的异常要记录堆栈、请求上下文和 trace_id,方便串联前后端链路。
告警方面,可以在 Kibana 或 Graylog 里直接配置阈值和通知(邮件、企业微信、钉钉、Slack 都行)。如果用了 Prometheus + Grafana,可以建立面板,把日志派生出的指标(比如错误计数)做成图表,再通过 Alertmanager 设置规则。这样就形成了“日志发现 → 指标告警 → 定位修复”的闭环。
最后,从日志洞察中持续优化。比如减少 I/O 操作和慢查询、引入 Redis 做缓存、优化异步并发、完善错误处理与中间件,以及为关键路径增加上下文日志。这些优化点,往往都是日志分析发现的。
本文转载于:https://www.yisu.com/ask/51130907.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。