本文介绍: 介绍Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary。Counter 指标类型指标值是只能递增,不能递减的数值需要注意的是,当 Prometheus server 重启时,指标值会被重置为 0。该指标类型用于统计接口请求数、错误数等使用场景。Gauge 指标类型,指标值是可增可减的数值。该指标类型可用于统计 C…

介绍

Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary

Counter 指标类型,指标值是只能递增,不能递减的数值需要注意的是,当 Prometheus server 重启时,指标值会被重置为 0。该指标类型可用于统计接口请求数、错误数等使用场景

Gauge 指标类型,指标值是可增可减的数值。该指标类型可用于统计 CPU、内存硬盘使用情况,goroutine 的数量等使用场景

Histogram 指标类型,指标值基于桶分布。开发者可以自定义桶的区间。该指标类型可用于统计接口延时请求数等使用场景

Summary 指标类型,与 Histogram 类似,区别是 Histogram 直接统计了不同区间中的指标数值,而 Summary基于客户端级别,因此不能统计多个实例聚合数据。该指标类型可用于预先不知道指标桶划分区间的场景

使用方式

一般在实际应用场景中,通常一个指标需要对应多条时序数据(Label Name 为维度),此时就需要使用支持标签的指标类型。

Prometheus 有 4 种支持标签的指标类型,分别是 ConterVec、GaugeVec、HistogramVec、SummaryVec

CounterVec

CounterVec 与 Counter区别是,它支持 Label我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计例如,同一个 Api 接口的请求数,我们可以定义 Lable (Code、Method),按照状态码和 HTTP 请求方式分组统计一个 Api 接口的请求数。

示例代码

var (
 // 标签名
 labelNames = []string{"host", "code", "path", "method"}
 // HttpReqs 实例化 CounterVec
 HttpReqs *prometheus.CounterVec = prometheus.NewCounterVec(prometheus.CounterOpts{
  Name: "http_requests_total",
  Help: "How many HTTP requests processed, partitioned by status code and HTTP method.",
 },
  labelNames,
 )
)

阅读上面这段代码,我们使用了 NewCounterVec 创建一个实例,它支持多个方法,我们可以使用其中一个性能相对较高的方法 WithLabelValues返回一个 Counter

func Metrics() gin.HandlerFunc {
 return func(c *gin.Context) {
  c.Next()
  host := c.RemoteIP()
  code := fmt.Sprintf("%d", c.Writer.Status())
  method := c.Request.Method
  labelsByHttpReqs := []string{host, code, c.FullPath(), method}
  prometheus_metrics.HttpReqs.WithLabelValues(labelsByHttpReqs...).Inc()
 }
}

Counter 支持两个方法,分别是 Inc()Add(),其中 Inc()Counter 增加 1,Add()Counter 增加给定值,需要注意的是,给定值必须为非负值,否则会引发 panic

需要注意的是,在我们创建指标之后,还需要使用 Register() 接口的 Register() 方法注册之后才可以被收集到指标数据。如果需要注册多个指标,可以使用 MustRegister() 方法

示例代码

reg := prometheus.NewRegistry()
reg.MustRegister(prometheus_metrics.HttpReqs, prometheus_metrics.OpsQueued, prometheus_metrics.Latencies, prometheus_metrics.Temps)

GaugeVec

GaugeVec 与 Gauge 的区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。

示例代码

var (
 labelNamesByOpsQueued = []string{
  "user",
  "type",
 }
 OpsQueued = prometheus.NewGaugeVec(
  prometheus.GaugeOpts{
   Name:      "ops_queued",
   Help:      "Number of blob storage operations waiting to be processed, partitioned by user and type.",
  },
  labelNamesByOpsQueued,
 )
)

阅读上面这段代码,我们使用了 NewGaugeVec 创建实例。

HistogramVec

HistogramVec 与 Histogram 的区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。

示例代码

var (
 labelNamesByLatencies = []string{"method", "code"}
 Latencies             = prometheus.NewHistogramVec(
  prometheus.HistogramOpts{
   Name:    "http_request_duration_seconds",
   Help:    "Tracks the latencies for HTTP requests.",
   Buckets: []float64{0.99, 0.9, 0.5},
  },
  labelNamesByLatencies,
 )
)

SummaryVec

SummaryVec 与 Summary区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。

示例代码

var (
 labelNamesByTemps = []string{"species"}
 Temps             = prometheus.NewSummaryVec(
  prometheus.SummaryOpts{
   Name:       "pond_temperature_celsius",
   Help:       "The temperature of the frog pond.",
   Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
  },
  labelNamesByTemps,
 )
)

阅读上面这段代码,使用了 NewSummaryVec 创建实例。

总结

本文主要介绍 4 种指标类型的含义,通过 Label 可以将 4 种类型的指标数据,按照 Label 的维度分组统计,我们以支持 Label 的 CounterVec 为例介绍了它的使用方式,其余 3 种支持 Label 的指标也提供了简单的使用示例。

原文地址:https://blog.csdn.net/Guzarish/article/details/134739595

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25360.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注