日志库是日志审计的基础,需根据需求选择功能匹配的工具。常见选项包括:
结构化日志(如JSON格式)便于后续过滤、分析和可视化,需确保日志包含关键审计信息:
user_id: req.user?.id);action: 'login'/'delete_user')、操作对象(如resource: 'user_profile');timestamp: new Date().toISOString());method: req.method)、URL(url: req.url)、IP地址(ip: req.ip)。const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [new winston.transports.File({ filename: 'audit.log' })]
});
// 在路由中记录用户操作
app.get('/user/profile', (req, res) => {
logger.info('User accessed profile', {
user_id: req.user.id,
action: 'view_profile',
timestamp: new Date().toISOString(),
ip: req.ip
});
res.send('Profile page');
});
结构化日志可通过工具(如ELK)快速提取关键字段,提升审计效率。
为避免日志文件过大占用磁盘空间,需使用logrotate工具进行自动轮转:
sudo apt-get install logrotate;/etc/logrotate.d/nodejs,内容如下:/var/log/nodejs/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 7 # 保留7天日志
compress # 压缩旧日志(节省空间)
notifempty # 空日志不轮转
create 0640 root adm # 新日志文件权限
}
此配置可自动管理日志文件,确保日志存储容量可控。
Debian系统提供两种常用日志查看方式:
# 查看指定服务的实时日志
journalctl -u node-app -f
# 查看特定时间段的日志(如昨天)
journalctl -u node-app --since "yesterday"
/var/log目录(如/var/log/node-app.log),可使用tail、grep等命令:# 实时查看日志尾部
tail -f /var/log/node-app.log
# 筛选错误日志
grep 'ERROR' /var/log/node-app.log
这些工具可快速获取日志内容,辅助日常审计。
对于分布式系统或多节点应用,需使用日志聚合工具集中管理日志,并实现可视化与告警:
/etc/filebeat/filebeat.yml):filebeat.inputs:
- type: log
paths:
- /var/log/nodejs/*.log
output.elasticsearch:
hosts: ["localhost:9200"]
日志聚合后可快速定位异常(如大量404请求、频繁的数据库错误),提升审计效率。
0640),避免未授权访问;通过以上步骤,可在Debian系统下实现对Node.js日志的有效审计,满足安全合规与运维管理需求。