debian

Debian JS日志如何合规

小樊
35
2025-12-08 11:16:58
栏目: 编程语言

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等要求

0
看了该问题的人还看了