Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary。
一般在实际应用场景中,通常一个指标需要对应多条时序数据(Label Name 为维度),此时就需要使用支持标签的指标类型。
Prometheus 有 4 种支持标签的指标类型,分别是 ConterVec、GaugeVec、HistogramVec、SummaryVec。
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 与 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 与 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 与 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 的指标也提供了简单的使用示例。
本文链接:http://www.28at.com/showinfo-26-56597-0.htmlPrometheus Go client library 详解
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Python实战:打造高效多进程TCP服务器,轻松应对并发请求!
下一篇: 11个优秀开源TTS引擎