Debian 上实现 JS 日志自动化管理
一 架构与总体思路
二 应用侧日志切分与保留
示例(winston,按大小滚动):
// logger.js
const winston = require('winston');
const { createLogger, format, transports } = winston;
const { combine, timestamp, printf } = format;
const myFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
});
const logger = createLogger({
level: 'info',
format: combine(timestamp(), myFormat),
transports: [
new transports.File({
filename: '/var/log/yourapp/app.log',
maxsize: 2_000_000, // 2MB
maxFiles: 7
})
]
});
module.exports = logger;
三 系统侧自动化轮转与清理
示例(/etc/logrotate.d/yourapp):
/var/log/yourapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 youruser yourgroup
copytruncate
}
调试与执行:
sudo logrotate -d /etc/logrotate.d/yourapp # 干跑调试
sudo logrotate -f /etc/logrotate.d/yourapp # 强制执行一次
四 集中化收集与自动化分析告警
示例(fluentd 采集到 stdout,便于调试):
<source>
@type tail
path /var/log/yourapp/app.log
pos_file /var/log/fluentd-yourapp.log.pos
tag nodejs
<parse>
@type json
</parse>
</source>
<match nodejs>
@type stdout
</match>
示例(cron 定时分析 ERROR):
0 2 * * * /usr/bin/node /opt/scripts/logAnalyzer.js >> /var/log/logAnalyzer.log 2>&1
五 日常运维命令与快速排障