当前位置:首页 > 科技  > 软件

Prometheus Go client library 详解

来源: 责编: 时间:2024-01-03 11:36:15 347观看
导读介绍Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary。Counter 指标类型,指标值是只能递增,不能递减的数值。需要注意的是,当 Prometheus server 重启时,指标值会被重置为 0。该指标类型可用

介绍

Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary。B7y28资讯网——每日最新资讯28at.com

  • Counter 指标类型,指标值是只能递增,不能递减的数值。需要注意的是,当 Prometheus server 重启时,指标值会被重置为 0。该指标类型可用于统计接口的请求数、错误数等使用场景。
  • Gauge 指标类型,指标值是可增可减的数值。该指标类型可用于统计 CPU、内存和硬盘的使用情况,goroutine 的数量等使用场景。
  • Histogram 指标类型,指标值基于桶分布。开发者可以自定义桶的区间。该指标类型可用于统计接口的延时请求数等使用场景。
  • Summary 指标类型,与 Histogram 类似,区别是 Histogram 直接统计了不同区间中的指标数值,而 Summary 是基于客户端级别,因此不能统计多个实例的聚合数据。该指标类型可用于预先不知道指标桶划分区间的场景。

B7y28资讯网——每日最新资讯28at.com

使用方式

一般在实际应用场景中,通常一个指标需要对应多条时序数据(Label Name 为维度),此时就需要使用支持标签的指标类型。B7y28资讯网——每日最新资讯28at.com

Prometheus 有 4 种支持标签的指标类型,分别是 ConterVec、GaugeVec、HistogramVec、SummaryVec。B7y28资讯网——每日最新资讯28at.com

1.CounterVec

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

示例代码:B7y28资讯网——每日最新资讯28at.com

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。B7y28资讯网——每日最新资讯28at.com

示例代码:B7y28资讯网——每日最新资讯28at.com

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。B7y28资讯网——每日最新资讯28at.com

需要注意的是,在我们创建指标之后,还需要使用 Register() 接口的 Register() 方法,注册之后才可以被收集到指标数据。如果需要注册多个指标,可以使用 MustRegister() 方法。B7y28资讯网——每日最新资讯28at.com

示例代码:B7y28资讯网——每日最新资讯28at.com

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

2.GaugeVec

GaugeVec 与 Gauge 的区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。B7y28资讯网——每日最新资讯28at.com

示例代码:B7y28资讯网——每日最新资讯28at.com

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 创建实例。B7y28资讯网——每日最新资讯28at.com

3.HistogramVec

HistogramVec 与 Histogram 的区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。B7y28资讯网——每日最新资讯28at.com

示例代码:B7y28资讯网——每日最新资讯28at.com

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, ))

4.SummaryVec

SummaryVec 与 Summary 的区别是,它支持 Label,我们可以按照 Lable 维度,将同一个指标的数据按照 Lable 分组统计。B7y28资讯网——每日最新资讯28at.com

示例代码:B7y28资讯网——每日最新资讯28at.com

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 创建实例。B7y28资讯网——每日最新资讯28at.com

总结

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

本文链接:http://www.28at.com/showinfo-26-56597-0.htmlPrometheus Go client library 详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python实战:打造高效多进程TCP服务器,轻松应对并发请求!

下一篇: 11个优秀开源TTS引擎

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
Top