理解 prometheus histogram 指标

2023-12-25  本文已影响0人  wayyyy

全文转载自:深入理解和使用 Prometheus 的 Histogram 指标类型

Prometheus的数据格式和指标类型

Prometheus 会将所有采集到的样本数据以时间序列的方式保存在内存数据库中,并且定时保存到硬盘上。时间序列是按照时间戳和值的序列顺序存放的,我们称之为向量(vector),每条时间序列通过指标名称(metrics name)和一组标签集(labelset)命名。如下所示,可以将时间序列理解为一个以时间为 X 轴的数字矩阵:

^
  │   . . . . . . . . . . . . . . . . .   . .   node_cpu_seconds_total{cpu="cpu0",mode="idle"}
  │     . . . . . . . . . . . . . . . . . . .   node_cpu_seconds_total{cpu="cpu0",mode="system"}
  │     . . . . . . . . . .   . . . . . . . .   node_load1{}
  │     . . . . . . . . . . . . . . . .   . .
  v
    <------------------ 时间 ---------------->

在时间序列中的每一个点称为一个样本(sample),样本由以下三部分组成:

指标类型一般分为四类。

Counter 和 Gauge比较好理解,而 Histogram 类型则是相对来说复杂一些的。理解 Histogram 类型是能够帮我们更好地使用 Prometheus 监控,尤其是对于调用耗时P99/P95这一类需要设置分位监控的数据。

Histogram类型

Histogram 中文的含义是直方图,我们在学习概率统计的时候都学习过直方图。直方图是对数据如何分布的一种总结方式——有多少值是高的,有多少是低的,有多少介于两者之间。

image.png

如图所示,Histogram 显示了数据集的分布。有些值低(<=10),有些值中等(>10 和 <=100),有些值高(>100 和 <=1000)。直方图根据这些范围将数据分组到存储桶bucket中,并计算每个存储桶中有多少值。这使我们对数据如何在其值范围内分布有所了解。在决定如何绘制直方图时,通常会选择对数据敏感且对分析有意义的bucket范围。

现在来让我们看一下 Prometheus Histogram。 Prometheus Histogram在三个方面与上述示例略有不同:

下面写个demo代码验证:

package main

import (
   "log"
   "math/rand"
   "net/http"
   "time"

   "github.com/prometheus/client_golang/prometheus"
   "github.com/prometheus/client_golang/prometheus/promauto"
   "github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
   // 定义一个Histogram类型的指标
   histogram := promauto.NewHistogram(prometheus.HistogramOpts{
      Name:    "histogram_showcase_metric",
      Buckets: []float64{5.0, 10.0, 20.0, 50.0, 100.0}, // 根据场景需求配置bucket的范围
   })

   go func() {
      for {
         // 这里搜集一些0-100之间的随机数
         // 实际应用中,这里可以搜集系统耗时等指标
         histogram.Observe(rand.Float64() * 100.0)
         time.Sleep(1 * time.Second)
      }
   }()
   // 指标上报的路径,可以通过该路径获取实时的监控数据
   http.Handle("/metrics", promhttp.Handler())
   log.Fatal(http.ListenAndServe(":8080", nil))
}

打开:http://192.168.48.20:8080/metrics

image.png

如果本地安装了Prometheus,并且配置了对应的服务采集地址,那么 就可以在通过Prometheus自带的可视化界面,看到如下收集的数据

image.png

那么,我们该如何利用该指标进行查询呢?

使用和建议

参考资料
1、https://juejin.cn/post/7152837166190739486
2、 https://cloud.tencent.com/developer/article/1495303

上一篇 下一篇

猜你喜欢

热点阅读