Node.js 接入 Prometheus 监控完全指南

Prometheus 是云原生监控的事实标准。本文实战 Node.js 应用接入:prom-client 自动指标、四大指标类型、PromQL 查询与告警配置,并介绍更省心的托管方案。

最佳实践
事件循环与异步任务流转插画

Node.js 接 Prometheus 用 prom-client:collectDefaultMetrics() 一行获得运行时指标(内存/GC/事件循环),自定义 Counter/Histogram 记录业务指标,/metrics 端点暴露给 Prometheus 抓取。理解四种指标类型(Counter/Gauge/Histogram/Summary)是用对的前提。

指标与 Prometheus 的心智模型

Prometheus 是拉模型:应用暴露 /metrics 端点,Prometheus 定时抓取存入时序数据库。指标 = 名称 + 标签集合 + 数值。查询用 PromQL,告警用 Alertmanager,可视化用 Grafana——生态分工明确。

自动仪表化:一行启动

npm install prom-client
const client = require('prom-client');

client.collectDefaultMetrics();  // 事件循环延迟、GC、堆内存、CPU 全自动

app.get('/metrics', async (req, res) => {
  res.set('Content-Type', client.register.contentType);
  res.end(await client.register.metrics());
});

默认指标已经回答了"进程健康吗"——剩下的工作是"业务健康吗"。

四种指标类型

// Counter:只增计数(请求数、错误数)
const requestCounter = new client.Counter({
  name: 'http_requests_total', help: 'Total HTTP requests', labelNames: ['method', 'route', 'status'],
});

// Gauge:可增可减(当前连接数、队列长度)
const activeConnections = new client.Gauge({ name: 'websocket_connections', help: 'Current WebSocket connections' });

// Histogram:分布统计(耗时——算 P95/P99)
const duration = new client.Histogram({
  name: 'request_duration_seconds', help: 'Request duration in seconds', buckets: [0.1, 0.5, 1, 2, 5],
});

// Summary:类似 Histogram 但分位数在客户端算(聚合受限,优先 Histogram)

选择口诀:累计发生用 Counter,瞬时值用 Gauge,耗时分布用 Histogram。

PromQL 实战查询

# 每秒请求率,使用最近 1 分钟样本
rate(http_requests_total[1m])

# 错误率百分比
100 * sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

# P95 延迟
histogram_quantile(0.95, sum by (le) (rate(request_duration_seconds_bucket[5m])))

告警配置

Prometheus 告警规则示例(由 Alertmanager 路由通知):错误率 5 分钟超 1% 触发告警、P95 延迟超 2 秒触发告警。告警要配"持续时长"(for: 5m)防毛刺误报。

把 Node.js 指标接入观测云

保留 prom-client 暴露的 /metrics 端点,可以配置 DataKit Prom 采集器的目标地址、认证方式和采集周期,将运行时与业务指标送入观测云。先核对指标类型、单位和低基数标签,再为错误率与延迟设置监控器。指标异常后的调用分析需要额外接入 APM;日志跳转还依赖 trace_id、span_id 以及 service、env、version 的正确注入与一致性。

接入文档:Prometheus 指标采集 · Node.js APM 接入 · 日志与链路关联 · 监控器与告警策略。

常见问题(FAQ)

Q:多实例/集群部署 /metrics 怎么抓?

每个实例被抓取(instance 标签区分),聚合查询时按 route 聚合掉实例维度。K8s 中如已部署 Prometheus Operator,可通过 ServiceMonitor 配置发现;它不是 Kubernetes 默认自带的资源。

Q:短生命周期任务(CronJob)怎么暴露指标?

拉模型抓不到短命进程——用 Pushgateway 模式,或在评估保留与清理策略后用 DataKit 抓取 Pushgateway 暴露的指标或直接写日志/链路埋点。

Q:prom-client 的性能开销?

常规量级(几十个指标、低基数标签)开销可忽略。标签基数失控(把用户 ID 当标签)才是性能灾难的真正来源。


参考文档

本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台