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

如何用Prometheus与Node.js绘制每分钟HTTP请求数图表

每分钟HTTP请求数图表实现方案

关于方案一:手动重置Counter的可行性

不推荐这么做。Prometheus的采集间隔并非严格固定,若采集延迟或失败,重置Counter会直接丢失未采集的请求数据。此外,Counter的设计语义是单调递增,手动破坏这一规则会导致Prometheus内置的increase、rate等函数计算出异常值(比如负数增量),完全背离指标监控的初衷。

关于方案二:Increase函数返回浮点值的处理

increase(http_requests_total[1m])返回浮点值是正常现象,因为Prometheus是基于时间序列的采样点插值计算增量,并非精确统计每分钟的请求数。处理方式有三种:

  • 可视化层取整:在Grafana等可视化工具中,将面板的数值格式设置为整数,直接四舍五入或截断小数,不影响趋势展示。
  • 接受近似值:这个浮点值是真实请求增量的近似值,对于流量趋势分析来说足够准确,无需纠结是否为整数。
  • 函数取整:使用round(increase(http_requests_total[1m]))对结果四舍五入,得到整数形式的增量值。

更优实践:用Rate函数计算每分钟请求数

实际监控中更常用rate函数,它返回每秒请求数,乘以60即可得到每分钟请求数:

rate(http_requests_total[1m]) * 60

该结果同样可能是浮点值,处理方式和increase一致。rate函数更适合长期趋势分析,而increase更适合查看特定时间段的绝对增量。

Node.js端代码规范

无需手动重置Counter,保持其单调递增即可。示例代码如下:

const express = require('express');
const { Counter, register } = require('prom-client');

const app = express();
// 定义带标签的请求计数器
const httpRequestsCounter = new Counter({
  name: 'http_requests_total',
  help: 'Total number of HTTP requests',
  labelNames: ['method', 'path']
});

// 中间件统计所有请求
app.use((req, res, next) => {
  httpRequestsCounter.inc({ method: req.method, path: req.path });
  next();
});

// 暴露Prometheus指标端点
app.get('/metrics', async (req, res) => {
  res.set('Content-Type', register.contentType);
  res.send(await register.metrics());
});

app.listen(3000, () => console.log('Server running on port 3000'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:10