Debian Node.js 日志分析工具与实操指南
一 工具选型与场景
- 本地快速排查:优先使用 tail、grep、awk、sort、uniq 等命令行工具,适合实时查看、关键字过滤、字段提取与统计。若服务由 systemd 托管,使用 journalctl -u your-service 统一查看 stdout/stderr 与内核消息。
- 结构化与高性能日志:在应用侧采用 Winston、Pino、Bunyan、Log4js 等日志库,输出 JSON 或分级日志,便于后续自动化分析与检索。
- 集中式与可视化:小规模可用 ELK Stack(Elasticsearch + Logstash + Kibana) 或 Graylog;更轻量的替代是 Grafana Loki + Promtail,适合云原生与成本敏感场景。
- 运维配套:使用 logrotate 做日志轮转与压缩,避免磁盘被撑满。
二 本地命令行分析常用命令
- 实时查看与过滤
- 实时跟踪:tail -f /var/log/nodejs/app.log
- 关键字过滤:grep -i “error|exception” /var/log/nodejs/app.log
- 字段提取与统计
- 提取第1与第7字段并统计 Top N:awk ‘{print $1,$7}’ app.log | sort | uniq -c | sort -nr | head
- 按数值字段排序:sort -k 3,3n access.log
- 按时间窗口查看(假设日志含 ISO8601 时间)
- 今天:journalctl -u nodeapp --since today
- 最近 10 分钟:journalctl -u nodeapp --since “10 min ago”
- 多文件合并分析
- 合并并按时间排序:*cat .log | sort -k1,1 | less(需保证每行首列为可排序的时间戳)
三 应用侧结构化日志与日志轮转
- 使用 Winston 输出 JSON 到文件(便于后续检索与聚合)
- 安装:npm i winston
- 示例:
- const winston = require(‘winston’);
- const logger = winston.createLogger({
level: ‘info’,
format: winston.format.json(),
transports: [new winston.transports.File({ filename: ‘/var/log/nodejs/app.log’ })]
});
- logger.info(‘user login’, { uid: 42, ip: ‘203.0.113.10’ });
- 使用 Pino/Bunyan 获取高性能与 JSON 默认输出,适合高并发服务。
- 日志轮转配置示例(/etc/logrotate.d/nodeapp)
- /var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 nodeapp nodeapp
postrotate
systemctl reload nodeapp >/dev/null 2>&1 || true
endscript
}
四 集中式日志与可视化
- ELK 方案
- Filebeat 采集日志 → Logstash 解析与丰富 → Elasticsearch 存储与检索 → Kibana 可视化与仪表盘。
- 轻量替代
- Promtail 采集 → Grafana Loki 存储与查询 → Grafana 展示,部署与运维成本更低。
- systemd 场景
- 直接用 journalctl -u your-nodejs-service 查看与过滤,必要时配合 Filebeat 将 journal 日志发往集中式后端。
五 性能与错误定位的实用分析范式
- 错误与异常定位
- 先查 ERROR/WARN:grep -E “ERROR|WARN” app.log | tail -n 200
- 追踪堆栈与上下文:结合 时间戳、trace_id/request_id 在集中式平台做关联查询。
- 请求量与来源分析
- Top IP:awk ‘{print $1}’ access.log | sort | uniq -c | sort -nr | head
- Top URL:awk ‘{print $7}’ access.log | sort | uniq -c | sort -nr | head
- 性能瓶颈线索
- 若日志中记录了 响应时间/内存/CPU,可用:
- 响应时间 Top N:awk ‘{print $NF}’ access.log | sort -nr | head
- 内存峰值:awk ‘/Memory Usage:/ {print $3}’ app.log | sort -nr | head -n 10
- 多维聚合与可视化
- 在 Kibana/Loki 中按 service、level、route、status、ip、region 等维度聚合,构建错误趋势、P95/P99 延迟、每分钟请求数等面板。