温馨提示×

Linux服务器上Node.js应用如何监控

小樊
53
2025-11-14 19:50:17
栏目: 云计算

Linux 服务器上 Node.js 应用监控实践

一 监控分层与总体思路

  • 进程与可用性:确保进程存活、自动重启、快速定位异常退出与重启原因。
  • 应用指标:请求量、延迟、错误率、状态码分布、数据库/外部依赖耗时、内存与事件循环等。
  • 系统资源:CPU、内存、磁盘 I/O、网络、负载、容器/主机层面的资源瓶颈。
  • 日志与追踪:结构化日志、集中检索、错误聚合、分布式追踪与性能剖析。
  • 可视化与告警:统一看板、阈值/异常告警、变更前后对比与容量水位。

二 快速上手 PM2 与 systemd

  • PM2 快速监控

    • 安装与启动:npm install -g pm2pm2 start app.js --name my-app
    • 常用命令:pm2 listpm2 monit(实时资源)、pm2 logs my-apppm2 describe
    • 高可用与自启动:pm2 startuppm2 save
    • 适用场景:快速上线的 Node.js 进程守护、日志聚合、基础资源监控与自动重启。
  • systemd 托管与日志

    • 创建服务文件 /etc/systemd/system/my-app.service
      [Unit]
      Description=Node.js Application
      After=network.target
      
      [Service]
      ExecStart=/usr/bin/node /path/to/app.js
      WorkingDirectory=/path/to
      User=your-user
      Group=your-group
      Environment=NODE_ENV=production
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
      
    • 常用命令:sudo systemctl start my-appsudo systemctl status my-appsudo journalctl -u my-app -f
    • 适用场景:系统级托管、与操作系统日志与权限体系集成、稳定可靠的生产运行。

三 应用指标与 APM 接入

  • Prometheus + Grafana(开源可自托管)
    • 在应用中使用 prom-client 暴露指标,如 HTTP 请求时延直方图:
      const promClient = require('prom-client');
      const httpRequestDurationMs = new promClient.Histogram({
        name: 'http_request_duration_ms',
        help: 'Duration of HTTP requests in ms',
        labelNames: ['method', 'route', 'code'],
        buckets: [0.1, 5, 15, 50, 100, 200, 300, 400, 500]
      });
      app.use((req,res,next)=>{
        const start = Date.now();
        res.on('finish', ()=>{
          httpRequestDurationMs.labels(req.method, req.route, res.statusCode)
            .observe(Date.now()-start);
        });
        next();
      });
      
    • Prometheus 抓取应用指标(示例 job 名为 nodejs),Grafana 配置 Prometheus 数据源并导入 Node.js 仪表盘。
  • 商业 APM
    • New Relic:安装 newrelic 并在 newrelic.js 中配置 licenseKeyapp_name,引入后自动采集事务、错误与慢查询。
    • Datadog:安装 dd-trace 并在入口初始化,采集分布式追踪、性能剖析与指标。
  • 内置与诊断
    • 使用 process.cpuUsage()process.memoryUsage() 输出基础指标;内存泄漏可用 heapdump 生成快照并用 Chrome DevTools 分析。

四 系统级监控与网络诊断

  • 资源与性能工具
    • top/htop:进程级 CPU、内存占用;nmon/atop:CPU、内存、磁盘 I/O 等综合面板;vmstat/iostat/free/df:系统层面资源与 I/O 观测。
  • 网络与依赖
    • Nethogs:按进程查看带宽占用;iftop:网卡实时流量与端口信息;sar(来自 sysstat):历史与实时系统统计(如 sar -u 1sar -r 1)。
  • 反向代理与观测
    • 使用 Nginx 作为反向代理时,可结合其访问日志与状态码进行观测与限流;必要时在 Nginx 层做健康检查与熔断。

五 日志集中与告警

  • 结构化日志
    • 使用 winstonmorgan 输出 JSON 日志,便于检索与聚合;将日志写入文件并通过采集器送入集中系统。
  • 集中式日志平台
    • ELK Stack(Elasticsearch + Logstash + Kibana):Logstash 采集文件日志写入 ES,Kibana 构建检索与可视化看板。
  • 可用性与状态页
    • Uptime Kuma:自托管状态监控与多通道告警(如 Telegram/Discord/Slack),适合对 HTTP/端口/关键依赖做存活探测与 SLA 观测。
  • 告警建议
    • 关键告警项:进程异常退出/频繁重启、HTTP 5xx 比例突增、P95/P99 延迟异常、内存使用持续逼近容器/主机上限、磁盘空间不足、依赖服务不可用。

0