您的位置:首页 >如何自动化Debian JS日志分析
发布于2026-04-26 阅读(0)
扫一扫,手机访问

动手之前,先把基础打牢。这第一步,决定了后续分析的效率和准确性。
/var/log/your-js-app.log,或者通过journalctl -u 来查看。前端请求和资源加载的日志,则多半躺在/var/log/nginx/目录下。至于系统层面的全局信息,/var/log/syslog是必查之地。记住,先统一日志格式——无论是JSON还是Common Log Format——这一步能省去后续无数解析的麻烦。jq。logrotate来管理生命周期是标准操作。对于Node.js应用,建议按天轮转,并保留最近7到30天的日志,在存储成本和排查需求之间取得平衡。如果你面对的是单机环境,日志量不算海量,核心需求是快速出日报和触发告警,那么自己写脚本是最直接、最可控的方案。
// analyze.js
const fs = require('fs');
const path = require('path');
const readline = require('readline');
const logFile = process.argv[2] || '/var/log/your-js-app.log';
const since = process.argv[3]; // 可选 ISO8601 时间,如 2025-12-14T00:00:00Z
const errorThreshold = parseInt(process.env.ERROR_THRESHOLD || '10', 10);
const rl = readline.createInterface({
input: fs.createReadStream(logFile),
crlfDelay: Infinity
});
const counts = { error: 0, warn: 0, info: 0 };
const topErrors = new Map();
let lines = 0;
rl.on('line', (line) => {
lines++;
let rec;
try { rec = JSON.parse(line); } catch (e) { return; }
// 时间过滤
if (since && rec.time && new Date(rec.time) < new Date(since)) return;
const level = String(rec.level || 'info').toLowerCase();
if (counts[level] !== undefined) counts[level]++;
if (level === 'error' && rec.msg) {
const k = rec.msg.split(/\s+/, 5).join(' '); // 简单聚类
topErrors.set(k, (topErrors.get(k) || 0) + 1);
}
});
rl.on('close', () => {
console.log(new Date().toISOString(), 'Processed lines:', lines);
console.log('Counts:', counts);
console.log('Top errors:');
[...topErrors.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, 10)
.forEach(([msg, n]) => console.log(`${n}\t${msg}`));
if (counts.error >= errorThreshold) {
console.error('ALERT: error count', counts.error, '>= threshold', errorThreshold);
// TODO: 发送告警(如 curl 到 webhook、邮件等)
}
});
# 安装依赖
sudo apt update && sudo apt install -y nodejs npm
sudo npm i -D chalk
# 每日 02:00 分析昨天的日志
0 2 * * * /usr/bin/node /opt/scripts/analyze.js /var/log/your-js-app.log \
"$(date -d 'yesterday 00:00:00' -Iseconds)" >> /var/log/js-analysis.log 2>&1
当你的服务扩展到多个实例,或者需要跨服务关联分析、进行复杂的搜索和可视化时,就该请出重型武器——ELK Stack(Elasticsearch, Logstash, Kibana)了。
# 导入 Elastic GPG 并添加 APT 源(示例为 7.x,按需调整)
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update
sudo apt-get install -y elasticsearch logstash kibana
sudo systemctl enable --now elasticsearch logstash kibana
input {
file {
path => "/var/log/your-js-app.log"
start_position => "beginning"
sincedb_path => "/var/lib/logstash/sincedb-js"
codec => "json"
}
}
filter {
# 若日志为 Common Log Format,可用 grok 解析
# grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
date {
match => [ "time", "ISO8601", "yyyy-MM-dd HH:mm:ss.SSS" ]
target => "@timestamp"
}
mutate {
remove_field => [ "host", "path" ]
# 视情况保留
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "js-logs-%{+YYYY.MM.dd}"
}
}
http://:5601 ,在 Management → Index Patterns 创建 js-logs-* 索引模式。之后,就可以在 Discover 页面自由搜索,在 Visualize 里构建错误趋势图、TOP URL统计、响应时间分布等图表,并最终在 Dashboard 中组装成完整的监控大屏。自动化分析不能只管“分析”,不管“后勤”。日志文件本身的管理,以及日志内容与系统资源的关联,同样关键。
/var/log/your-js-app.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0644 node node
sharedscripts
postrotate
systemctl reload your-js-app.service >/dev/null 2>&1 || true
endscript
}
journalctl -u 查看服务状态,翻阅 /var/log/syslog 寻找系统级异常,同时用 top、htop、vmstat、iostat 等工具看看CPU、内存、磁盘I/O是否到了极限。这才是完整的故障定位思路。搭建好分析平台只是开始,让它真正驱动运维行动,并不断进化,才是最终目的。
trace_id或request_id,实现完整的请求链路追踪。此外,要定期回顾告警规则和阈值,避免产生“告警疲劳”——太多无效告警反而会让真正重要的警报被忽略。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9