监控思路与分层
- 建议从三层入手:
- 应用层:进程存活、重启次数、内存/CPU、HTTP 延迟与吞吐、未捕获异常;
- 系统层:CPU、内存、磁盘 I/O、网络、负载;
- 可视化与告警:指标存储与展示、阈值告警、可用性探测。
- 在 CentOS 上,常用的组合是:PM2/systemd 负责进程与应用监控,Prometheus + Grafana 负责指标可视化与告警,日志与 APM 负责错误与调用链追踪。
快速上手 PM2 与应用内监控
- 安装与启动
- 安装:sudo npm install -g pm2
- 启动:pm2 start app.js --name “my-app”
- 常用:pm2 list(查看状态)、pm2 monit(资源监控)、pm2 logs my-app(日志)、pm2 startup(开机自启)、pm2 save(持久化进程列表)
- 常用阈值与自恢复
- 内存超限重启:pm2 set pm2memoryrestart 100M
- 最大重启次数:pm2 set pm2maxrestarts 5
- 重启延迟:pm2 set pm2restartdelay 1000(单位毫秒)
- 应用内健康与指标
- 快速健康检查:使用 express-status-monitor 暴露 /status 页面查看实时指标与状态。
- 自定义指标:使用 prom-client 暴露 HTTP 请求时延直方图 等指标,供 Prometheus 抓取。
- 日志最佳实践:使用 winston 输出结构化日志,便于检索与聚合。
系统级监控与日志
- 进程与资源
- top/htop:实时查看进程 CPU、内存占用;htop 界面更友好,支持按键筛选。
- glances:跨平台监控工具,集中展示 CPU、内存、磁盘、网络 等。
- nmon / atop:更细粒度的系统性能监控与历史回看。
- vmstat / iostat / free / sar / df:CPU、内存、I/O、文件系统空间等核心指标。
- Nethogs / iftop:按进程统计网络流量、按网卡查看实时带宽。
- systemd 服务与日志
- 示例服务文件关键项:
- ExecStart=/usr/bin/node /path/to/app.js,WorkingDirectory=/path/to/app,User=your-user,Environment=NODE_ENV=production,Restart=always
- 常用命令:systemctl daemon-reload、systemctl start my-app、systemctl status my-app、journalctl -u my-app -f(实时查看服务日志)
Prometheus Grafana 与 APM 集成
- Prometheus + Grafana
- 部署 Prometheus 采集应用与系统指标,部署 Grafana 做可视化与告警面板。
- Node.js 侧通过 prom-client 暴露指标(如 http_request_duration_ms 直方图),Prometheus 配置抓取目标后,在 Grafana 中构建 QPS、P95/P99 延迟、错误率、内存 RSS 等面板。
- APM 与错误追踪
- 商业与 SaaS:New Relic、Datadog 提供 事务追踪、错误分析、依赖地图 等深度能力。
- 开源方案:App Metrics(IBM 维护)用于采集应用原始性能数据,可与现有监控栈集成。
可用性与日志聚合建议
- 可用性探测
- 自托管状态页与告警:Uptime Kuma 支持 HTTP(s)、TCP、Ping、DNS 等探测与多通道通知,适合对公网/内网接口做 可达性与 SLA 监控。
- 日志集中与分析
- 结构化日志:使用 winston 输出 JSON 日志;
- 集中分析:将日志接入 ELK Stack(Elasticsearch + Logstash + Kibana)、Graylog 或 Splunk,实现 错误聚类、检索与可视化。