Debian Node.js日志清理的最佳实践
导读:1. 使用系统级工具logrotate(推荐) logrotate是Debian系统原生支持的日志管理工具,可自动处理Node.js日志的轮转、压缩、删除及权限管理,无需修改应用代码。 安装logrotate:若未安装,通过sudo ap...
1. 使用系统级工具logrotate(推荐)
logrotate是Debian系统原生支持的日志管理工具,可自动处理Node.js日志的轮转、压缩、删除及权限管理,无需修改应用代码。
- 安装logrotate:若未安装,通过
sudo apt-get install logrotate命令安装。 - 创建配置文件:在
/etc/logrotate.d/目录下新建nodejs文件(如/etc/logrotate.d/nodejs),添加以下配置(根据实际路径调整):/var/log/nodejs/*.log { daily # 每天轮转(可改为weekly/monthly) rotate 7 # 保留最近7个日志文件 compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如第8个文件才压缩第1个,避免压缩当天日志) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 create 0640 root adm # 创建新日志文件,权限0640,属主root,属组adm } - 测试与生效:用
sudo logrotate -d /etc/logrotate.d/nodejs测试配置语法(dry run),无误后用sudo logrotate -f /etc/logrotate.d/nodejs强制立即执行。
2. 通过Node.js日志库内置轮转功能
若应用使用winston、bunyan等日志库,可通过插件实现应用层日志轮转,适合需要更细粒度控制的场景。
- winston+DailyRotateFile插件:安装依赖
npm install winston winston-daily-rotate-file,配置示例如下:const winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new DailyRotateFile({ filename: '/var/log/nodejs/app-%DATE%.log', // 日志文件名(含日期) datePattern: 'YYYY-MM-DD', // 日期格式 zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个日志文件最大20MB maxFiles: '14d' // 保留14天日志 } ) ] } ); - bunyan插件:使用
bunyan-rotating-file-stream,配置方式类似,支持按大小或时间轮转。
3. 定时任务辅助清理
通过cron定时运行脚本,定期删除过期日志(适合简单场景或补充logrotate)。
- 编写清理脚本:创建
/usr/local/bin/cleanNodeLogs.sh,内容如下:#!/bin/bash LOG_DIR="/var/log/nodejs" DAYS_TO_KEEP=7 # 保留7天日志 find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f { } \; find "$LOG_DIR" -type f -name "*.log.gz" -mtime +$DAYS_TO_KEEP -exec rm -f { } \; - 添加执行权限:
sudo chmod +x /usr/local/bin/cleanNodeLogs.sh。 - 配置cron任务:运行
crontab -e,添加以下行(每天凌晨2点执行):
日志会记录到0 2 * * * /usr/local/bin/cleanNodeLogs.sh > > /var/log/log-cleanup.log 2> & 1/var/log/log-cleanup.log中。
4. 日志库与系统工具结合
优先使用日志库(如winston)的内置轮转处理应用层日志,再通过logrotate管理库生成的日志文件(如/var/log/nodejs/*.log),实现双重保障。例如:winston配置maxFiles: '14d'保留14天,logrotate配置rotate 7保留7天,确保日志不会无限增长。
5. 监控与告警
设置监控机制,及时发现日志异常增长:
- 工具选择:使用Prometheus+Grafana监控日志文件大小,或用
cron定期检查日志目录大小(如du -sh /var/log/nodejs),超过阈值时发送邮件/短信告警。 - 示例监控脚本:创建
/usr/local/bin/checkLogSize.sh:添加cron任务(每小时执行):#!/bin/bash LOG_DIR="/var/log/nodejs" MAX_SIZE=$((10 * 1024 * 1024)) # 10MB(根据磁盘空间调整) CURRENT_SIZE=$(du -s "$LOG_DIR" | awk '{ print $1} ') if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then echo "Node.js日志目录大小超过阈值:${ CURRENT_SIZE} KB > ${ MAX_SIZE} KB" | mail -s "Node.js日志告警" admin@example.com fi0 * * * * /usr/local/bin/checkLogSize.sh。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian Node.js日志清理的最佳实践
本文地址: https://pptw.com/jishu/735889.html
