温馨提示×

Node.js CentOS日志如何分析

小樊
37
2025-11-19 20:47:53
栏目: 编程语言

Node.js 在 CentOS 的日志分析与排障指南

一 日志来源与采集

  • 系统层日志:使用 journalctl 查看由 systemd 托管的应用日志,例如:journalctl -u your-nodejs-service -f(实时跟踪)、journalctl -u your-nodejs-service --since “2025-11-19 00:00:00”。
  • 应用层日志:将 console.log/console.error 输出重定向到文件,如:node app.js > logs/app.log 2>&1 &;或用 Winston/Bunyan 输出结构化日志(JSON),便于检索与聚合。
  • 访问日志:Express 应用建议接入 morgan 记录 HTTP 请求,与业务日志分离,便于分析流量与错误来源。
  • 日志轮转:避免磁盘被撑满,使用 logrotate 配置按日轮转、压缩与保留天数;Node 侧也可用 winston-daily-rotate-file 做按日切分。

二 快速定位常见错误

  • 端口被占用:日志出现 EADDRINUSE,说明端口已被占用。处理:更换端口或结束占用进程(如 ss -tlnp | grep 端口号 后 kill)。
  • 权限不足:出现 EACCES,检查日志目录与文件的属主与权限,确保运行用户可写;必要时调整目录权限或以正确用户运行。
  • 连接被拒绝:出现 ECONNREFUSED,确认目标服务是否启动、网络与防火墙策略是否允许访问。
  • 文件不存在:出现 ENOENT,核对配置或代码中路径是否正确、依赖资源是否已部署。
  • 请求超时:出现 ERR_TIMEOUT,评估下游服务性能或适当增加超时阈值并优化链路。
  • HTTP/2 协议错误:出现 ERR_HTTP2_PROTOCOL_ERROR,核对客户端/服务端 HTTP/2 配置与兼容性。

三 性能与负载分析

  • 系统负载与资源:用 uptime 查看平均负载;用 top 观察 CPU/内存占用与进程状态;安装 sysstat 后用 sar 回溯历史资源使用(如 sar -u 1 60)。
  • 应用性能观测:使用 pm2 monit / pm2 list 查看进程与关键指标;借助 node --inspectChrome DevTools Performance 做 CPU/内存剖析;对疑似内存泄漏,生成 heapdump 分析对象增长。
  • 日志侧性能线索:在结构化日志中输出 响应时间、状态码、route、userId 等字段,用聚合查询定位慢请求与异常比例(如 5xx 突增、P95/P99 上升)。

四 高效检索与可视化

  • 命令行快速检索:
    • 实时查看错误:tail -f logs/app.log | grep -i error
    • 统计 Top URL:awk ‘{print $7}’ access.log | sort | uniq -c | sort -nr | head
    • 统计状态码分布:awk ‘{print $9}’ access.log | sort | uniq -c | sort -nr
  • 集中化方案:部署 ELK Stack(Elasticsearch + Logstash + Kibana)Fluentd/Graylog,将 Node.js 日志统一采集、解析与可视化,便于跨实例与跨时间范围分析。

五 日志规范与运维建议

  • 结构化与级别:统一使用 JSON 格式,合理设置 ERROR/WARN/INFO/DEBUG 级别,避免生产环境过量 DEBUG 日志。
  • 异步与安全:采用异步写日志降低阻塞;对 敏感信息(如密码、令牌)进行脱敏。
  • 轮转与保留:生产环境建议按日轮转、压缩与保留近 7–30 天;结合监控告警避免磁盘告警。
  • 权限与目录:确保日志目录存在且属主正确,应用以最小权限用户运行,避免因权限问题导致日志丢失。
  • 监控联动:结合 Prometheus + Grafana 对日志中的关键指标(如 5xx、P95、错误率)设置阈值告警,实现主动发现。

0