Ubuntu 环境下 JavaScript 日志分析实用技巧
一 定位与收集日志
- 明确日志来源:前端 JS 优先用浏览器开发者工具 Console/Network;Node.js 服务看应用日志与服务管理器日志;系统层面看 journalctl 与 /var/log。
- 常见路径与命令一览:
| 来源 |
典型位置或命令 |
用途 |
| 前端 JS |
浏览器开发者工具 Console/Network |
运行时错误、网络请求状态 |
| Node.js 应用日志 |
应用目录日志文件、journalctl -u your-service |
业务日志、未捕获异常 |
| PM2 管理 |
pm2 logs your-app、pm2 monit |
多实例日志、资源监控 |
| 系统日志 |
/var/log/syslog、journalctl -f |
服务启动、崩溃、内核消息 |
| Web 服务器 |
/var/log/nginx/error.log、/var/log/apache2/error.log |
反向代理/静态资源错误 |
| 认证与安全 |
/var/log/auth.log |
登录失败、可疑访问 |
- 安装常用解析工具:sudo apt-get install jq(JSON 解析)。
二 命令行快速筛选与统计
- 实时与回溯:tail -f app.log;journalctl -u your-service --since “10 minutes ago”。
- 关键词与级别:grep -i “error” app.log;pm2 logs your-app --lines 50 | grep WARN。
- 字段提取与统计:
- 提取 JSON 字段:jq ‘.error’ app.log;按时间窗口统计错误数:jq -r ‘select(.level==“error”) | .ts’ app.log | sort | uniq -c。
- 文本列处理:awk ‘{print $1,$2}’ app.log;按日期计数:awk ‘/Jun 17/ {count++} END {print count}’ /var/log/syslog。
- 多文件与压缩:zgrep “timeout” app.log.1.gz app.log。
三 结构化日志与 Node.js 专项
- 使用结构化日志库:如 winston/bunyan,输出 JSON,便于 jq 检索与聚合。
- 常见 Node.js 警告与处置:
- DeprecationWarning:替换过时 API(如 Buffer() → Buffer.alloc()),升级 Node 与依赖。
- UnhandledPromiseRejectionWarning:为 Promise 加 .catch() 或 try/catch,并监听 process.on(‘unhandledRejection’)。
- MaxListenersExceededWarning:避免重复添加监听器,必要时 emitter.setMaxListeners()。
- 内存不足:FATAL ERROR: heap out of memory,短期可通过 node --max-old-space-size=4096 提升上限,长期需排查泄漏(如 clinic.js)。
四 安全分析与告警
- 关键词检索:grep -i “error|failed|unauthorized|attack” /var/log/syslog;结合应用日志定位来源 IP、UA、URL。
- 认证安全:分析 /var/log/auth.log 的 Failed password、invalid user 等,识别暴力破解。
- 持续监控与报表:部署 Logwatch/ELK Stack/Graylog,对错误率、4xx/5xx、登录失败做可视化与阈值告警。
五 可视化与长期治理
- 集中化方案:搭建 ELK(Elasticsearch/Logstash/Kibana)或 Graylog,统一采集、索引、搜索与仪表盘。
- 日志生命周期:配置 logrotate 做按日/按大小轮转、压缩与保留,避免磁盘被占满。
- 排错流程建议:先界定问题 → 查系统/服务/应用日志 → 校验时间戳与上下文 → 复现与修复 → 回归验证与持续监控;对含敏感信息的日志做脱敏与最小化保留。