Debian上可用的Node.js日志分析工具与方案
一 常用工具分类与定位
- 命令行工具:适合快速排查与统计,覆盖查看、过滤、统计、切分等场景。
- 进程管理工具:如PM2,提供统一实时日志流与内置轮转。
- 系统日志:基于systemd/journalctl集中查看服务日志。
- 日志库:在应用侧输出结构化日志(JSON),便于后续解析与检索。
- 集中式平台:ELK(Elasticsearch + Logstash + Kibana)、Graylog,用于海量日志的采集、索引、搜索与可视化。
- Web访问日志分析:GoAccess,对Nginx/Apache访问日志做实时与离线分析。
二 命令行快速分析
- 实时与检索
- 实时跟踪:tail -f /path/to/app.log
- 关键字过滤:grep “ERROR” /path/to/app.log
- 时间范围过滤:grep “2025-09-27” /path/to/app.log
- 字段提取与统计
- 提取前两列并计数:awk ‘{print $1, $2}’ app.log | sort | uniq -c
- 统计错误总数:awk ‘/ERROR/ {count++} END {print “Total errors:”, count}’ app.log
- 系统服务日志
- 查看服务日志:sudo journalctl -u your-nodejs-service
- 小技巧
- 组合管道:grep “ERROR” app.log | awk ‘{print $4}’ | sort | uniq -c | sort -nr | head 可统计错误最多的模块/接口。
三 结构化日志与进程管理
- 结构化日志库
- Winston / Bunyan / Pino / Log4js:优先输出JSON,便于按level、timestamp、service、trace_id等字段检索与聚合。
- 示例(Winston,JSON 输出):
- const winston = require(‘winston’);
- const logger = winston.createLogger({
level: ‘info’,
format: winston.format.json(),
transports: [new winston.transports.File({ filename: ‘/var/log/nodeapp.log’ })]
});
- logger.info(‘User login’, { userId: 123, ip: ‘1.2.3.4’ });
- PM2 日志
- 实时查看:pm2 logs 或 pm2 logs <app_name>
- 日志轮转:启用 pm2-logrotate 插件,自动按日/大小压缩与清理。
四 集中式日志平台与可视化
- ELK Stack
- Elasticsearch 存储与索引、Logstash 采集与解析(如时间戳、日志级别)、Kibana 构建仪表盘与告警。
- 典型流程:Node.js 输出 JSON 日志 → Logstash 读取并解析 → ES 索引 → Kibana 查询/可视化/告警。
- Graylog
- 集中式日志管理,支持多源采集、索引、搜索与告警,适合替代或补充 ELK。
- GoAccess
- 面向 Nginx/Apache 访问日志,终端/浏览器可视化,展示访问量、响应时间、状态码分布等指标。
五 日志轮转与运维实践
- Logrotate 配置示例(/etc/logrotate.d/nodejs)
- /var/log/nodeapp.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
- 测试与应用:logrotate -d /etc/logrotate.conf(语法检查),logrotate -f /etc/logrotate.conf(强制执行)。
- 最佳实践
- 在应用侧使用结构化日志(JSON)并规范日志级别。
- 配置合理的轮转与保留策略,避免磁盘被占满。
- 多实例/多服务场景优先集中式聚合(如 ELK/Graylog),便于统一检索与告警。