我在 nodejs 中使用prom-client来发布/metrics
端点。我想监控随着时间的推移偶尔发生的不同数量的销售。
在普罗米修斯中跟踪零星或不连续指标的最佳方法是什么?现有的指标类型似乎都不合适。
- 用于跟踪单个值 (
Gauge
) 的基本 prometheus 指标类型面向连续数据(例如 CPU 速度或并发请求)。 - 该
Histogram
指标可以捕获不连续的数据,但需要手动百分位数并且显然只估计分位数(https://prometheus.io/docs/practices/histograms/#errors-of-quantile-estimation)。当指标服务器重新启动时,计数也会被清除。 - 该
Summary
指标可以捕获不连续的数据,但“通常不可聚合”(https://latencytipoftheday.blogspot.com/2014/06/latencytipoftheday-you-cant-average.html)。
这是一个带有 a 的简单设置Gauge
,它显然没有捕获
import express from 'express'
import promClient, { Gauge } from 'prom-client'
export const someMetric = new Gauge({
name: 'some_metric',
help: 'Track some metric; type = [a, b, c]',
labelNames: ['one', 'two'],
})
const metricServer = express()
metricServer.get('/metrics', async (req, res) => {
console.log('Metrics scraped')
res
.set('content-type', 'text/plain')
.send(await promClient.register.metrics())
})
// intermittent callback that reports sales
service.onSale(value => {
// this will simply overwrite the previous sale :(
someMetric.labels('a', 'all').set(value)
})
metricServer.listen(9991, () =>
console.log(` Prometheus listening on http://localhost:9991/metrics`)
)
我目前的计划是创建一个新数据库来内部跟踪滚动的 24 小时平均销售额,然后将其作为一个单一的连续指标公开给 prometheus。不过,除了 prometheus 的聚合功能之外,在内部保持滚动平均值似乎很尴尬。