阅读量:2
Debian JS日志自动化处理方案
一 架构与总体思路
- 在应用侧使用结构化日志库(如 Winston、Bunyan、Log4js)输出 JSON 或带时间戳的日志,便于后续解析与检索。
- 在主机侧用 logrotate 做按日/按大小切分、压缩与保留,避免日志无限增长。
- 用 rsyslog/syslog-ng 或 Fluentd/Logstash 做采集与转发,集中到 Elasticsearch + Kibana 或 Graylog 做检索、可视化与告警。
- 用 cron 定时运行分析/清理脚本,形成闭环(如错误摘要、指标统计、旧文件清理)。
二 应用侧结构化与本地轮转
- 结构化日志示例(Node.js + Winston):
// logger.js
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, errors, json } = format;
const logger = createLogger({
level: 'info',
format: combine(timestamp(), errors({ stack: true }), json()),
transports: [
new transports.File({ filename: 'logs/app.log', maxsize: 10*1024*1024, maxFiles: 7 }), // 10MB/文件,保留7个
new transports.File({ filename: 'logs/error.log', level: 'error', maxsize: 10*1024*1024, maxFiles: 30 })
],
exceptionHandlers: [new transports.File({ filename: 'logs/exceptions.log' })],
rejectionHandlers: [new transports.File({ filename: 'logs/rejections.log' })]
});
module.exports = logger;
- 使用 PM2 管理进程与日志文件分离:
sudo npm i -g pm2
pm2 start app.js -o out.log -e err.log --name myapp
pm2 logs myapp
- 直接在 Node 中用日志库做按大小轮转(如 winston 的 maxsize/maxFiles),与系统级 logrotate 可叠加使用。
三 系统级轮转与清理
- 使用 logrotate 管理 Node 应用日志(/etc/logrotate.d/nodejs):
/path/to/nodejs/logs/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0644 node node
sharedscripts
postrotate
systemctl reload myapp >/dev/null 2>&1 || true
endscript
}
- 调试与强制执行:
sudo logrotate -d /etc/logrotate.d/nodejs # 语法检查
sudo logrotate -f /etc/logrotate.d/nodejs # 强制执行一次
- 如需清理系统 journal 日志(与业务日志分开管理):
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M
- 不建议直接 rm 正在写入的日志文件;优先用 logrotate 的 copytruncate 或 postrotate 通知应用重开文件句柄。
四 集中式采集与分析
- 方案A(轻量):rsyslog 采集并转发到文件或远程
- 配置 /etc/rsyslog.d/50-nodejs.conf:
:programname, isequal, "nodejs" /var/log/nodejs/app.log
& stop
- 重启服务:
sudo systemctl restart rsyslog - 方案B(通用):Fluentd tail 解析 JSON 并输出到 stdout/ES
<source>
@type tail
path /path/to/nodejs/logs/app.log
pos_file /var/log/fluentd-nodejs.log.pos
tag nodejs
<parse>
@type json
parse>
source>
<match nodejs>
@type stdout
match>
- 方案C(功能全):ELK(Logstash 输入 file → Elasticsearch → Kibana 可视化)
- Logstash 示例:
input { file { path => "/path/to/nodejs/logs/app.log" start_position => "beginning" } }
filter { }
output { elasticsearch { hosts => ["localhost:9200"] index => "js-logs-%{+YYYY.MM.dd}" } }
- 可视化与告警:在 Kibana 建立索引模式与仪表板;或在 Graylog 配置流与告警规则。
五 定时分析与告警脚本
- 简单错误摘要脚本(Node.js):
// analyze.js
const fs = require('fs');
const path = require('path');
const file = path.join(__dirname, 'logs', 'app.log');
const out = path.join(__dirname, 'reports', `err-summary-${Date.now()}.txt`);
fs.readFile(file, 'utf8', (err, data) => {
if (err) return console.error('Read error:', err);
const errs = data.split('\n').filter(l => l && l.includes('"level":"error"'));
const summary = [`[${new Date().toISOString()}] 错误数: ${errs.length}`];
if (errs.length) summary.push(...errs.slice(0, 50));
fs.mkdirSync(path.dirname(out), { recursive: true });
fs.writeFileSync(out, summary.join('\n'));
// 可扩展:集成邮件/企业微信/钉钉 Webhook 推送
});
- 定时任务(cron)示例:
# 每天 02:00 分析,00:00 清理7天前报告
0 2 * * * /usr/bin/node /opt/scripts/analyze.js >> /var/log/log-analyze.log 2>&1
0 0 * * * find /opt/scripts/reports -type f -mtime +7 -delete
- 如需邮件日报,可使用 logwatch 生成并邮件发送分析报告(适合系统/服务日志的日终汇总)。
以上就是关于“Debian JS日志如何自动化处理”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm