首页主机资讯如何通过Ubuntu Node.js日志监控性能

如何通过Ubuntu Node.js日志监控性能

时间2026-01-19 21:25:03发布访客分类主机资讯浏览320
导读:Ubuntu 下用日志做 Node.js 性能监控的实操方案 一 日志采集与结构化 使用结构化日志库输出 JSON,便于检索与聚合。示例(winston):const winston = require('winston' ; const...

Ubuntu 下用日志做 Node.js 性能监控的实操方案

一 日志采集与结构化

  • 使用结构化日志库输出 JSON,便于检索与聚合。示例(winston):
    const winston = require('winston');
    
    const logger = winston.createLogger({
    
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({
     filename: 'error.log', level: 'error' }
    ),
        new winston.transports.File({
     filename: 'combined.log' }
    )
      ]
    }
        );
        
    // 在请求入口记录关键指标
    const start = process.hrtime.bigint();
        
    // ... 处理请求
    const diffMs = Number(process.hrtime.bigint() - start) / 1e6;
    
    logger.info('http_request', {
    
      method: 'GET', url: '/api', status: 200,
      duration_ms: diffMs,
      memory_rss_mb: Math.round(process.memoryUsage().rss / 1024 / 1024)
    }
        );
    
    
  • 使用 morgan 记录 HTTP 访问日志,配合 winston/pino 输出到文件;生产环境控制日志级别,避免过多输出影响性能。
  • 日志轮转与保留:使用 logrotate 管理日志体积,示例配置 /etc/logrotate.d/nodejs
    /var/log/nodejs/*.log {
    
      daily
      rotate 7
      missingok
      notifempty
      compress
      delaycompress
      sharedscripts
    }
    
    
  • 建议统一时间格式(如 ISO8601)、包含 trace_id/request_id、服务名与实例标识,便于跨服务追踪与聚合。

二 在日志中埋点与输出关键指标

  • 请求级指标:记录 method、url、status、duration_ms、content_length、user_agent、ip、trace_id;在中间件或框架钩子中统一埋点。
  • 资源与运行时指标:定期采样 process.memoryUsage()、process.cpuUsage()、event loop lag、GC 统计(node --trace-gc),输出为结构化字段,如:
    logger.info('runtime_metrics', {
    
      memory_rss_mb, heap_used_mb: mu.heapUsed/1024/1024,
      heap_total_mb: mu.heapTotal/1024/1024,
      cpu_user_ms: cu.user/1000, cpu_sys_ms: cu.system/1000,
      event_loop_lag_ms: lag
    }
        );
        
    
  • 错误与慢请求:对 5xx/4xxduration_ms > 阈值 单独打点(如 level: warn/error),并附带堆栈与请求上下文,便于定位瓶颈与异常链路。

三 日志解析与趋势分析

  • 命令行快速洞察:
    • 统计错误数:grep "ERROR" combined.log | wc -l
    • 提取某时段:awk '/2025-04-01 00:00:00/,/2025-04-01 23:59:59/' combined.log
    • Top URL 与 P95 延迟(假设日志含 duration_ms 字段):
      # Top URL
      awk '$7 ~ /http_request/ {
      print $9}
      ' combined.log | sort | uniq -c | sort -nr | head
      # 近似 P95(ms)
      awk '$7 ~ /http_request/ {
      print $11}
      ' combined.log | sort -n | awk 'BEGIN{
      c=0}
       {
      a[c++]=$1}
       END{
      print a[int(c*0.95)]}
          '
      
  • 集中化与可视化:
    • ELK Stack(Elasticsearch + Logstash + Kibana):Logstash 使用 Grok 解析 JSON 或自定义模式,ES 存储,Kibana 构建指标面板与告警。
    • Grafana Loki + Promtail:轻量聚合,适合容器与多实例场景。
    • Graylog:集中式日志管理,支持规则引擎与告警。

四 可视化与告警

  • Kibana/Grafana 仪表盘建议包含:
    • 业务:请求速率(req/s)错误率(%)、P50/P95/P99 延迟、吞吐(KB/s)
    • 实例:RSS、HeapUsed、CPU%、Event Loop Lag
    • 日志:ERROR/WARN 趋势、Top URL/Status/UA
  • 阈值告警示例:
    • 错误率 > 1%(5 分钟窗口)
    • P95 延迟 > 1000 ms
    • 5xx 计数 > N/分钟
    • RSS 连续 3 次采样增长 > 20%
  • KibanaGrafana 中配置告警规则与通知渠道(邮件、Webhook、企业微信/钉钉机器人)。

五 快速落地与进阶

  • 快速落地清单:
    • 接入 winston/pino + morgan,输出 JSON
    • 埋点 http_request、runtime_metrics、error/slow
    • 配置 logrotate 与磁盘告警;
    • 部署 Filebeat/Logstash → ES → Kibana/Grafana Loki
    • 建立基础面板与阈值告警。
  • 进阶与排障:
    • 使用 PM2pm2 start app.js --name my-apppm2 monitpm2 logs my-app,获得进程级 CPU/内存 与日志聚合;
    • 深度分析:node --inspect(配合 Chrome DevTools)、node --prof(生成 V8 性能日志,用 node --prof-process 分析);
    • 系统层监控:htop、iostat、vmstat、sar(来自 sysstat)排查 I/O、CPU、内存压力,与日志指标交叉验证。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何通过Ubuntu Node.js日志监控性能
本文地址: https://pptw.com/jishu/786235.html
如何通过Ubuntu Node.js日志排查问题 Node.js在Ubuntu上的日志记录机制是什么

游客 回复需填写必要信息