温馨提示×

如何在Ubuntu上监控Node.js日志流量

小樊
35
2025-12-09 23:59:37
栏目: 编程语言

在 Ubuntu 上监控 Node.js 日志流量

一 目标与总体思路

  • 明确“日志流量”的度量口径:常见为请求量(QPS)响应时间分布错误率状态码分布来源 IP/接口路径等。
  • 日志采集与结构化:让 Node.js 输出结构化日志(JSON),便于后续统计与可视化。
  • 实时查看与告警:本地用命令行工具快速排查,集中式方案做长期存储、聚合、仪表盘与阈值告警。

二 本地实时查看与快速排查

  • 直接跟踪日志文件:
    • 实时查看:tail -f /var/log/myapp.log
    • 多文件与高亮:sudo apt-get install multitail;multitail app.log
    • 定时刷新:watch -n 1 ‘cat app.log
  • 使用进程管理器的日志功能(如用 PM2 启动):
    • 实时日志:pm2 logs
    • 指定应用:pm2 logs <app_name>
    • JSON 格式:pm2 logs --json
  • 若应用由 systemd 托管,可用 journalctl 查看服务日志:journalctl -u your-service.service

三 结构化日志与采集配置

  • 在 Node.js 中输出结构化日志(示例用 Winston,也可选 pino/morgan):
    • 安装:npm install winston
    • 配置要点:level 设为 info,format 用 winston.format.json(),按级别拆分文件(如 error/combined)。
  • 将日志送入集中系统(二选一或并用):
    • 直连 Logstash/TCP:使用 winston-logstash 将日志以 JSON Lines 发到 Logstash TCP 5000 端口,再由 Logstash 写入 Elasticsearch
    • 文件采集:Logstash/Fluentd 以 tail 方式读取日志文件,解析后写入 Elasticsearch,在 Kibana 做可视化与告警。

四 集中式日志平台与关键指标

  • 方案选型与部署要点:
    • ELK Stack(Elasticsearch + Logstash + Kibana):Logstash 负责采集与解析(如 grok 解析时间戳/级别/消息),ES 存储,Kibana 建立索引模式与仪表盘。
    • Fluentd:轻量采集,支持直接写入 Elasticsearch 或转发至 Loki/Graylog。
    • 远程 Syslog:通过 rsyslog/syslog-ng 将日志发往远程日志服务器(UDP/TCP 514),便于统一汇聚与审计。
  • 在 Kibana/Grafana 中关注的典型面板与指标:
    • QPS/每分钟请求数响应时间 P50/P95/P99HTTP 状态码分布错误率Top URL/来源 IP每分钟错误数日志级别分布

五 命令行流量分析速查表

  • 统计每分钟请求数(假设日志含 ISO8601 时间戳与请求行):
    • grep -oP ‘\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}’ app.log | sort | uniq -c
  • 统计响应时间 P95(假设字段为 responseTimeMs 的 JSON 日志):
    • awk -F’“responseTimeMs”:’ ‘{print $2}’ app.log | cut -d’,’ -f1 | sort -n | awk ‘{a[NR]=$1} END{print “P95:”,a[int(NR*0.95)]}’
  • 统计 5xx 错误数:
    • grep -c ‘“statusCode”:5[0-9]{2}’ app.log
  • 统计 Top 10 URL(假设字段为 url):
    • awk -F’“url”:“’ ‘{print $2}’ app.log | cut -d’”’ -f1 | sort | uniq -c | sort -nr | head
  • 按分钟统计各状态码数量(假设字段为 timestampstatusCode):
    • awk -F’“timestamp”:“’ '{t=$2; gsub(/T.*/,”“,t); a[t”,“$0]++} END{for(i in a){split(i,b,”,"); print b[1],b[2]}}’ app.log | sort | uniq -c

以上路径可覆盖从“本地快速排查”到“集中化长期观测”的完整链路:先在 Node.js 侧输出结构化日志,再用 tail/multitail/PM2 实时查看,随后通过 Logstash/Fluentd 汇聚到 Elasticsearch,最终在 Kibana 配置指标面板与阈值告警,实现“日志即流量”的可观测性。

0