Debian上Node.js日志合规实施指南
一 合规框架与总体要求
二 落地实施清单
三 关键配置示例
// npm i winston
const winston = require('winston');
const { combine, timestamp, json } = winston.format;
const logger = winston.createLogger({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
format: combine(timestamp(), json()),
transports: [
new winston.transports.File({ filename: '/var/log/nodejs/error.log', level: 'error' }),
new winston.transports.File({ filename: '/var/log/nodejs/combined.log' })
],
exceptionHandlers: [new winston.transports.File({ filename: '/var/log/nodejs/exceptions.log' })],
rejectionHandlers: [new winston.transports.File({ filename: '/var/log/nodejs/rejections.log' })]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({ format: winston.format.simple() }));
}
// 示例:记录关键业务事件
logger.info('user login', {
userId: 'u123', ip: '203.0.113.5', action: 'login', statusCode: 200, traceId: 'abc-123'
});
/var/log/nodejs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 nodejs adm
postrotate
systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
// npm i winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
logger.add(transport);
{
"apps": [
{
"name": "my-app",
"script": "app.js",
"error_file": "/var/log/nodejs/err.log",
"out_file": "/var/log/nodejs/out.log"
}
]
}
# filebeat.yml 片段
filebeat.inputs:
- type: filestream
paths:
- /var/log/nodejs/*.log
output.logstash:
hosts: ["logstash:5044"]
# logstash.conf 片段
input { beats { port => 5044 } }
filter { json { source => "message" } }
output { elasticsearch { hosts => ["elasticsearch:9200"] index => "nodejs-%{+YYYY.MM.dd}" } }
四 权限与合规要点
五 快速检查清单
| 检查项 | 关键要求 | 推荐做法 |
|---|---|---|
| 日志内容 | 关键业务、错误、安全事件 | 统一字段:timestamp、level、pid、msg、action、statusCode、userId、ip、traceId |
| 日志格式 | 结构化、可解析 | 统一用JSON;开发/调试可用simple控制台输出 |
| 本地轮转 | 防磁盘占满 | logrotate按日轮转、保留7天、压缩;或应用内按日/按大小轮转 |
| 集中式平台 | 检索、可视化、告警 | ELK/Graylog收集与展示,配置阈值告警 |
| 权限与加密 | 防越权与泄露 | 文件0640 nodejs:adm;传输启用TLS;敏感字段脱敏 |
| 保留与备份 | 满足法规与业务 | 明确保留周期与备份策略;过期自动清理与归档 |
| 审计与改进 | 持续合规 | 定期审计日志策略与内容,适配GDPR/HIPAA等要求 |