Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Prometheus Go client library 详解

Prometheus Go client library 详解

作者头像
frank.
发布于 2023-11-22 11:14:45
发布于 2023-11-22 11:14:45
47000
代码可运行
举报
运行总次数:0
代码可运行

01

介绍

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

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

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

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

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

02

使用方式

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

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

CounterVec

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

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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() 方法。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reg := prometheus.NewRegistry()
reg.MustRegister(prometheus_metrics.HttpReqs, prometheus_metrics.OpsQueued, prometheus_metrics.Latencies, prometheus_metrics.Temps)

GaugeVec

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

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 分组统计。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 分组统计。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 创建实例。

03

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不背锅运维:Go:Promethus Eexporter开发,一篇带你玩妥它
本文转载于(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/zbNluVW8eg3U922bEcXKPw
不背锅运维
2022/12/28
4400
Prometheus源码分析:基于Go Client自定义的Exporter,是如何在Local存储Metrics的?
我们想要提高微服务系统的可观察性,因此在go语言写的微服务中,使用Prometheus提供的go client实现上报metrics的功能。
hugo_lei
2021/01/22
3.4K0
Prometheus源码分析:基于Go Client自定义的Exporter,是如何在Local存储Metrics的?
golang prometheus包的使用
prometheus包提供了用于实现监控代码的metric原型和用于注册metric的registry。子包(promhttp)允许通过HTTP来暴露注册的metric或将注册的metric推送到Pushgateway。
charlieroro
2020/03/24
2.7K0
[1228]Python prometheus-client使用方式
github:https://github.com/prometheus/client_python
周小董
2023/10/10
4.2K0
[1228]Python prometheus-client使用方式
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
作者 | 朱瑜坚 腾讯云后台开发工程师 Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期
腾讯云可观测平台
2020/06/05
2.8K0
Prometheus+Grafana监控平台搭建
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
子润先生
2021/07/06
8460
TiKV 源码解析系列文章(四)Prometheus(下)
与上篇一样,以下内部实现都基于本文发布时最新的 rust-prometheus 0.5 版本代码,目前我们正在开发 1.0 版本,API 设计上会进行一些简化,实现上出于效率考虑也会和这里讲解的略微有一些出入,因此请读者注意甄别。
PingCAP
2019/03/14
5610
Go 语言开发的基于指标的监控系统 Prometheus
Go 语言开发的基于指标的监控系统 Prometheus,主要采用拉取方式收集监控数据,通过 Pushgateway 也可以采用推送方式收集监控数据。
frank.
2023/11/06
3430
Go 语言开发的基于指标的监控系统 Prometheus
第04期:Prometheus 数据采集(三)
爱可生上海研发中心成员,研发工程师,主要负责 DMP 平台监控告警功能的相关工作。
爱可生开源社区
2020/08/05
3.1K0
第04期:Prometheus 数据采集(三)
TiKV 源码解析系列文章(三)Prometheus(上)
Prometheus 支持四种指标:Counter、Gauge、Histogram、Summary。rust-prometheus 库目前还只实现了前三种。TiKV 大部分指标都是 Counter 和 Histogram,少部分是 Gauge。
PingCAP
2019/03/11
1.2K0
开发一个接口监控的Prometheus Exporter
!! 大家好,我是乔克,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。
没有故事的陈师傅
2024/02/27
5200
开发一个接口监控的Prometheus Exporter
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期有 Prometheus 监控方案搭建和维护需求的系统开发管理者。通过这篇文章,可以加深对 Prometheus Metrics 的理解,并能针对实际的监控场景提出更好的指标(Metrics)设计。
腾讯云原生
2020/05/22
3.8K0
聊聊dubbo-go的PrometheusReporter
dubbo-go-v1.4.2/metrics/prometheus/reporter.go
code4it
2020/07/31
4940
聊聊dubbo-go的PrometheusReporter
数据采集export使用prometheus_client 和 Flask实现
一、export 1、安装库 pip install prometheus_client flask 2、demo.py from atexit import register import mimetypes from prometheus_client.core import CollectorRegistry from prometheus_client import Gauge,Counter,Info,Enum,generate_latest,start_http_server from fl
master_lu
2022/04/09
1.7K0
构建企业级监控平台系列(十五):Prometheus Exporter 原理与实践
随着Prometheus的流行,很多系统都已经自带了用于Prometheus监控的接口,例如etcd、Kubernetes、coreDNS等,所以这些系统可以直接被Prometheus所监控。但是,有很多应用目前还没有提供用于Prometheus监控的接口,针对这这类应用,Prometheus提出了Exporter的解决方案。
民工哥
2023/10/23
8590
构建企业级监控平台系列(十五):Prometheus Exporter 原理与实践
Golang框架实战-KisFlow流式计算框架(11)-Prometheus Metrics统计
在介绍本章之前,我们先普及一下Prometheus Metrics的服务启动办法。 有关Prometheus是个什么东东,希望大家可以去额外补充下知识,我用一句大白话来解释就是,系统的监控指标。
刘丹冰Aceld
2024/07/22
1630
研究监控系统之prometheus
以前用过nagios和zabbix,nagios用起来太过原始,配置文件维护得很累,监控的图表也比较难看;zabbix的主要开发语言是C和PHP,要暴露一些自定义的监控指标较困难。网上一些云原生的项目都是用prometheus+grafana方案的,刚好花时间研究一下这个。
jeremyxu
2019/03/13
1.6K0
研究监控系统之prometheus
一文带你了解 Prometheus
作者:kevinkrcai,腾讯 IEG 后台开发工程师 Prometheus 是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对 Prometheus 做一个基本的认识。 1. 简介 Prometheus 是古希腊神话里泰坦族的一名神明,名字的意思是"先见之明",下图中是 Prometheus 被宙斯惩罚,饱受肝脏日食夜长之苦。 下面就是我们 CRUD Boy 所了解的 Prometheus,下面是其官网封面图引导语:From metrics to insight,
腾讯技术工程官方号
2022/05/10
1.5K0
一文带你了解 Prometheus
7.Prometheus监控进阶之自定义监控业务应用
描述: Prometheus 可以通过直接测控或者客户端库来测控业务或者应用,目前我们可以采用多种不同语言编写客户端库包括(GO/Python/Java/Ruby)等客户端;
全栈工程师修炼指南
2022/09/29
2.3K0
7.Prometheus监控进阶之自定义监控业务应用
运维监控之Prometheus入门简介篇
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,它将所有信息都存储为时间序列数据;因此实现一种Profiling监控方式,实时分析系统运行的状态、执行时间、调用次数等,以找到系统的热点,为性能优化提供依据。
lyb-geek
2019/07/15
8.3K0
推荐阅读
相关推荐
不背锅运维:Go:Promethus Eexporter开发,一篇带你玩妥它
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档