You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus采集Node.js服务时仅抓取部分指标 非nodejs_前缀指标丢失

排查修复步骤

首先明确:能正常抓取nodejs_前缀的指标,说明服务网络连通性、/metrics接口路径、基础抓取认证配置全是正常的,问题要么出在Node.js服务侧的指标生成逻辑,要么出在Prometheus抓取时的指标过滤规则,按以下顺序排查即可:

第一步:先验证服务侧/metrics接口的原始输出

进入Node.js服务所在Pod,执行命令curl localhost:<你的服务监听端口>/metrics,直接看接口返回的原始指标内容,分两种情况处理:

  • 如果返回内容里根本没有http_request_duration_seconds相关的bucket、sum、count系列指标,问题出在express-prom-bundle的配置上,逐一核对以下项:
    • 检查中间件挂载顺序:必须把app.use(promBundle(配置项))写在所有业务路由、其他业务中间件的最前面,要是挂在路由后面,请求不会被中间件捕获,甚至会导致HTTP相关指标根本没完成注册。
    • 检查初始化配置:不要设置metricsPrefix: 'nodejs_',否则所有HTTP类指标会被自动加上nodejs前缀,变成nodejs_http_request_duration_seconds,查不带前缀的指标自然找不到;不要把httpDurationMetricName改成其他自定义名称;确认没有配置全路径匹配的excludeRoutes规则把所有请求都排除统计。
    • 如果你自定义了prom-client的Registry实例,初始化express-prom-bundle的时候必须通过reg参数传入你自定义的注册表,否则HTTP指标会被注册到默认注册表,你对外暴露的/metrics接口如果只返回自定义注册表的内容,就不会包含这些HTTP指标。
  • 如果返回内容里能正常看到完整的http_request_duration_seconds系列指标,问题出在Prometheus侧的抓取过滤配置。

第二步:检查Prometheus侧的指标过滤规则

根据你的Prometheus部署模式对应检查:

  • 如果你是手动维护Prometheus的prometheus.yaml配置,找到对应Node.js服务的scrape_configs抓取任务,检查metric_relabel_configs配置段:
    最常见的错误是加了只保留nodejs前缀指标的keep规则,类似:
    metric_relabel_configs:
    - source_labels: [__name__]
      action: keep
      regex: 'nodejs_.*'
    
    这个规则会直接丢弃所有不带nodejs_前缀的指标,要么删掉这条规则,要么调整正则放行你需要的HTTP指标,比如改成regex: '^(nodejs_.*|http_.*)$'。
  • 如果你是用Prometheus Operator模式部署,检查对应服务的ServiceMonitor/PodMonitor自定义资源,看metricRelabelings字段下有没有和上面一样的前缀过滤规则,做相同调整即可。

第三步:验证指标入库与仪表盘配置

配置修改后等待1-2个抓取周期(默认1分钟),按以下步骤验证:

  • 先到Prometheus自带的Graph页面,直接查询http_request_duration_seconds_bucket,不要加任何额外标签过滤,确认能查到对应Node.js实例的时序数据。
  • 如果Prometheus里能查到数据但仪表盘不显示,检查仪表盘的查询语句,大概率是硬编码了namespace、job、instance这类标签的匹配规则,和你实际服务的标签不匹配导致查不到结果。

内容的提问来源于stack exchange,提问作者malpa222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:39:14