温馨提示×

Ubuntu JS日志分析工具有哪些推荐

小樊
39
2025-11-22 06:40:24
栏目: 编程语言

Ubuntu 环境下常用的 Node.js 日志分析工具与方案

一 命令行与系统工具

  • 实时查看与追踪
    • 使用 tail -f 实时跟踪日志文件新增内容,例如:tail -f app.log
    • 使用 journalctl 查看由 systemd 托管的服务日志,例如:journalctl -u your-node-service -f
  • 文本检索与处理
    • 使用 grep 按关键词筛选,例如:grep "ERROR" app.log
    • 使用 awk 提取字段,例如:awk '{print $1, $2}' app.log
    • 使用 sed 做文本替换或提取
  • JSON 日志解析
    • 使用 jq 解析与查询结构化日志,例如:jq '.error' app.log;安装:sudo apt-get install jq
  • 适用场景
    • 轻量、即席排查与快速定位问题,无需额外部署

二 Node.js 日志库与输出规范

  • 常用日志库
    • Winston:多级别、多传输(Console/File/HTTP 等)、支持结构化日志
    • Pino:高性能、低开销、可配合流处理
    • Morgan:HTTP 请求日志中间件,适合记录接口访问
    • log4js:灵活的级别与布局配置
  • 输出建议
    • 统一使用结构化格式(如 JSON),便于检索与聚合
    • 规范字段:timestamplevelmessagerequestIduserIderror.stack
    • 合理设置日志级别:debug/info/warn/error/fatal
  • 快速示例(Winston)
    • 安装:npm install winston
    • 配置:
      const winston = require('winston');
      const logger = winston.createLogger({
        level: 'info',
        format: winston.format.json(),
        transports: [
          new winston.transports.Console(),
          new winston.transports.File({ filename: 'error.log', level: 'error' }),
          new winston.transports.File({ filename: 'combined.log' })
        ]
      });
      logger.info('Server started', { port: 3000 });
      logger.error('DB connection failed', { err: err.message });
      
  • 适用场景
    • 在应用侧规范化日志,提升后续分析与检索效率

三 集中式日志平台

  • ELK Stack(Elasticsearch + Logstash + Kibana)
    • 能力:日志采集、处理、存储、检索与可视化;适合复杂查询与大规模环境
    • 接入:在 Node.js 中使用 Winston 等将日志发送至 Elasticsearch,通过 Kibana 构建可视化面板
  • Graylog
    • 能力:集中式日志管理、检索与告警,部署相对简洁
  • PM2 内置日志管理
    • 能力:进程守护、日志聚合与日志轮换;常用命令:pm2 start app.jspm2 logs myapi
  • 适用场景
    • 多服务、多实例的生产环境;需要统一检索、可视化与告警

四 监控与可视化指标

  • Prometheus + Grafana
    • 采集应用指标(如请求时延、活跃请求、内存使用等),在 Grafana 中构建仪表盘
    • Node.js 侧可使用 prom-client 暴露指标端点,结合 PM2 或容器编排进行采集
  • 适用场景
    • 结合日志进行可观测性建设,关注趋势、阈值与告警

五 选型建议与快速上手

  • 规模与复杂度
    • 单机或少量服务:优先用 Winston/Pino + tail/grep/jq 做本地分析
    • 多服务/多环境:引入 ELKGraylog 做集中式管理
  • 日志形态
    • 非结构化文本:先用 grep/awk/sed 处理;结构化 JSON:优先 jq 与 Kibana 检索
  • 快速排查命令清单
    • 实时看错误:tail -f app.log | grep --line-buffered ERROR
    • JSON 错误字段:jq 'select(.level=="error") | .error' app.log
    • systemd 服务日志:journalctl -u your-node-service -f
  • 实践要点
    • 统一日志格式与级别;为请求生成 requestId 串联链路
    • 配置日志轮转与保留策略,避免磁盘占满
    • 敏感信息脱敏后再写入日志与集中平台

0