温馨提示×

Ubuntu中Node.js日志如何分析

小樊
62
2025-09-16 04:47:19
栏目: 编程语言

一、日志采集与存储

  • 使用专业日志库:推荐Winston、Pino等库,支持结构化日志输出,如JSON格式,便于分析。
    // Winston示例:记录JSON格式日志到文件
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({ filename: 'app.log' })
      ]
    });
    logger.info('请求处理完成', { method: 'GET', path: '/api' });
    
  • 配置日志轮替:用logrotate工具避免日志文件过大,设置按天归档、压缩等策略。
    # /etc/logrotate.d/nodejs配置示例
    /var/log/nodejs/*.log {
      daily
      rotate 7
      compress
      missingok
    }
    

二、基础分析工具

  • 命令行工具
    • tail -f app.log:实时查看最新日志。
    • grep 'error' app.log:搜索错误关键字。
    • awk '{print $1}' app.log | sort | uniq -c:统计日志级别分布。
  • 图形化工具
    • GoAccess:实时分析Web日志,支持Nginx/Apache格式。
    • Logwatch:生成每日/每周日志报告,包含错误统计。

三、高级分析方案

  • ELK Stack(推荐)
    • 组件作用
      • Logstash:采集日志并解析(如提取时间戳、日志级别)。
      • Elasticsearch:存储日志数据,支持快速检索。
      • Kibana:可视化分析,可创建仪表盘展示错误趋势、请求量等指标。
    • 配置示例
      1. 安装ELK组件:sudo apt-get install elasticsearch logstash kibana
      2. 配置Logstash解析Node.js日志(示例匹配时间戳和日志级别):
        # /etc/logstash/conf.d/nodejs.conf
        filter {
          grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
          }
        }
        output { elasticsearch { hosts => ["localhost:9200"] } }
        
  • 集中式日志管理
    • 使用Loki+Grafana:轻量级方案,适合微服务架构,支持日志聚合与可视化。

四、常见问题分析

  • 错误定位:通过日志中的stack trace(堆栈跟踪)快速找到代码异常位置。
  • 性能监控:记录请求耗时、数据库查询时间等指标,识别慢查询或高负载模块。
  • 异常趋势:通过Kibana统计错误类型占比,发现高频故障点(如数据库连接失败)。

五、最佳实践

  • 结构化日志:统一日志格式,包含timestamplevelmessagemetadata(如请求ID)。
  • 敏感信息过滤:避免在日志中记录密码、密钥等敏感数据。
  • 自动化告警:结合Prometheus+Alertmanager,对错误率超过阈值的情况发送通知。

工具推荐总结

  • 轻量级分析:GoAccess、Logwatch。
  • 企业级方案:ELK Stack、Loki+Grafana。
  • 开发调试:直接使用console.log+tail -f快速定位问题。

0