Histogram
2024年06月17日
一、认识
Histogram
是直方图的意思,它不是单纯一个值的指标,是一个复合的指标,可以统计一个值在各种区间之间的分布情况。看demo
如下:
const h = new Histogram({
name: 'test_histogram',
help: 'Example of a histogram',
labelNames: ['code'],
buckets: [0.1, 0.2, 0.3, 0.4, 0.5, 1],
});
h.labels('200').observe(0.4);
h.labels('200').observe(0.6);
h.observe({ code: '200' }, 0.4);
register.metrics().then(str => console.log(str));
指标上报结果:
# HELP test_histogram Example of a histogram
# TYPE test_histogram histogram
test_histogram_bucket{le="0.1",code="200"} 0
test_histogram_bucket{le="0.2",code="200"} 0
test_histogram_bucket{le="0.3",code="200"} 0
test_histogram_bucket{le="0.4",code="200"} 2
test_histogram_bucket{le="0.5",code="200"} 2
test_histogram_bucket{le="1",code="200"} 3
test_histogram_bucket{le="+Inf",code="200"} 3
test_histogram_sum{code="200"} 1.4
test_histogram_count{code="200"} 3
可以看到拿到的结果中有总的次数 test_histogram_count
有总的值 test_histogram_sum
, 有设置的几个区间的值,显示的值是小于该区间值的数量,例如test_histogram_bucket{le="0.5",code="200"} 2
表示值小于0.5
的有2
个,那么也就能计算出0.5-1
的个数是 3-2=1
。
看一个默认指标中的垃圾回收的指标利用的是histogram
# TYPE nodejs_gc_duration_seconds histogram
nodejs_gc_duration_seconds_bucket{le="0.001",kind="major"} 0
nodejs_gc_duration_seconds_bucket{le="0.01",kind="major"} 2
nodejs_gc_duration_seconds_bucket{le="0.1",kind="major"} 2
nodejs_gc_duration_seconds_bucket{le="1",kind="major"} 2
nodejs_gc_duration_seconds_bucket{le="2",kind="major"} 2
nodejs_gc_duration_seconds_bucket{le="5",kind="major"} 2
nodejs_gc_duration_seconds_bucket{le="+Inf",kind="major"} 2
nodejs_gc_duration_seconds_sum{kind="major"} 0.008220480993390084
nodejs_gc_duration_seconds_count{kind="major"} 2