Debian JS 日志记录最佳实践
小樊
40
2025-12-10 10:59:55
Debian 上 Node.js 日志最佳实践
一 基础选型与结构化
- 使用高性能、可扩展的日志库:优先选择 Pino、Winston、Bunyan;HTTP 服务可搭配 morgan 记录请求日志。生产环境建议默认级别为 info,调试阶段用 debug。
- 统一使用结构化日志(如 JSON),便于检索、分析与聚合;开发环境可接入 pino-pretty 提升可读性。
- 示例(Pino + 开发美化):
const pino = require(‘pino’);
const logger = pino({ level: ‘info’ }, pino.transport({ target: ‘pino-pretty’, options: { colorize: true } }));
logger.info({ reqId: ‘abc-123’ }, ‘user login’);
- 示例(Winston 多传输):
const winston = require(‘winston’);
const { createLogger, format, transports } = winston;
const logger = createLogger({
level: ‘info’,
format: format.combine(format.timestamp(), format.json()),
transports: [
new transports.File({ filename: ‘error.log’, level: ‘error’ }),
new transports.File({ filename: ‘combined.log’ }),
new transports.Console({ format: format.simple() })
]
});
- 建议为每条日志附带稳定的上下文字段:如 service、env、version、trace_id/req_id、instance_id,便于端到端追踪与多服务关联。
二 输出目标与系统日志集成
- 多目标输出:同时输出到 控制台(便于容器/本地调试)与 文件(便于落盘与归档),错误与业务日志分文件管理。
- 接入系统日志:将应用日志发送至 rsyslog/syslog-ng,统一纳管、转发与审计。示例(rsyslog 规则):
:msg, contains, “node-app” /var/log/node-app.log
& stop
完成后重启服务:sudo systemctl restart rsyslog。
- 容器与进程管理:使用 PM2 时,可安装 pm2-logrotate 插件进行按时间/大小的日志轮转与压缩,减少运维成本。
- 性能要点:尽量采用异步/批量写入,减少 I/O 阻塞;必要时开启日志缓冲,降低磁盘写入频率。
三 轮转 保留 与 权限
- 使用 logrotate 管理文件轮转、压缩与清理,示例配置 /etc/logrotate.d/myapp:
/path/to/your/logs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
- 若应用以 systemd 运行,可配置 journald 持久化与集中管理,并通过 journalctl -u your-service 查询;日志目录与权限遵循最小权限原则(如仅允许 root/adm 访问)。
- 避免单文件无限增长与历史日志占满磁盘;结合保留策略(如保留 7–90 天)与压缩归档,便于审计与回溯。
四 集中式日志与可观测性
- 集中式收集与检索:将日志发送至 ELK Stack(Elasticsearch, Logstash, Kibana)、Graylog 或 Fluentd,统一索引、搜索、可视化与告警。
- Fluentd 示例(转发至 ES): @type forward port 24224 bind 0.0.0.0
@type elasticsearch host localhost port 9200 logstash_format true flush_interval 10s
- 指标与告警:结合 Prometheus + Grafana 对错误率、延迟、吞吐等建立面板与阈值告警,实现“日志 + 指标”的一体化可观测性。
五 安全 性能 与 落地清单
- 安全合规:严禁记录 密码、密钥、令牌、信用卡 等敏感信息;必要时对日志进行脱敏或加密,并限制文件访问权限(如 0640 root adm)。
- 性能优化:优先 异步/缓冲 写入;生产采用 JSON 并精简字段;必要时将日志目录置于 SSD 提升 I/O 性能;定期巡检写入延迟与磁盘占用。
- 运维与质量:建立 日志规范(级别、字段、采样)、审计与回溯 流程,并通过 代码审查/测试 确保日志行为稳定可靠。
- 落地清单(建议执行):
- 选定 Pino/Winston + 结构化 JSON;2) 区分 error/combined 输出;3) 配置 logrotate 或 pm2-logrotate;4) 接入 rsyslog 或集中式方案;5) 建立 Kibana/Grafana 面板与告警;6) 执行 脱敏 与 权限 检查;7) 定期 容量规划 与 性能回顾。