跳到主要内容

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