Prometheus Gauge使用

基础概念

metrics类型

Prometheus客户库提供了四个核心的metrics类型。这四种类型目前仅在客户库和wire协议中区分。

metrics和labels(度量指标名称和标签)

每一个时间序列数据由metric度量指标名称和它的标签labels键值对集合唯一确定。

这个metric度量指标名称指定监控目标系统的测量特征(如:http_requests_total- 接收http请求的总计数). metric度量指标命名ASCII字母、数字、下划线和冒号,他必须配正则表达式。

标签开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/tracks的http请求,打上method=POST的标签,则形成了具体的http请求)。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。改变任何度量上的任何标签值,则会形成新的时间序列图

标签label名称可以包含ASCII字母、数字和下划线。它们必须匹配正则表达式。带有_下划线的标签名称被保留内部使用。

标签labels值包含任意的Unicode码。

Counter(计数器)

counter 是一个累计度量指标,它是一个只能递增的数值。计数器主要用于统计服务的请求数、任务完成数和错误出现的次数等等。计数器是一个递增的值。反例:统计goroutines的数量。

Gauge(测量器)

gauge是一个度量指标,它表示一个既可以递增, 又可以递减的值。

测量器主要测量类似于温度、当前内存使用量等,也可以统计当前服务运行随时增加或者减少的数量,比如线程池的相关指标就可以使用gauge来进行统计。

Histogram(柱状图)

histogram,是柱状图,在Prometheus系统中的查询语言中,有三种作用:

对每个采样点进行统计,打到各个分类值中(bucket)

对每个采样点值累计和(sum)

对采样点的次数累计和(count)

度量指标名称: [basename]的柱状图, 上面三类的作用度量指标名称

[basename]_bucket{le=”上边界”}, 这个值为小于等于上边界的所有采样点数量

[basename]_sum

[basename]_count

小结:所以如果定义一个度量类型为Histogram,则Prometheus系统会自动生成三个对应的指标

使用histogram_quantile()函数, 计算直方图或者是直方图聚合计算的分位数阈值。一个直方图计算Apdex值也是合适的, 当在buckets上操作时,记住直方图是累计的。

summaries(总结)

类似histogram柱状图,summary是采样点分位图统计,(通常的使用场景:请求持续时间和响应大小)。它也有三种作用:

对于每个采样点进行统计,并形成分位图。(如:正态分布一样,统计低于60分不及格的同学比例,统计低于80分的同学比例,统计低于95分的同学比例)

统计班上所有同学的总成绩(sum)

统计班上同学的考试总人数(count)

带有度量指标的[basename]的summary 在抓取时间序列数据展示。

观察时间的φ-quantiles (0 ≤ φ ≤ 1), 显示为[basename]{分位数=“[φ]”}

[basename]_sum, 是指所有观察值的总和

[basename]_count, 是指已观察到的事件计数值

使用背景

公司原先skywalking-agent的对连接池指标的采集实现的原理是在池构造器时拦截,创建定时线程去采集池的指标并使用的 Counter 来记录,这种记录会导致指标值一直上涨,所以有增加了记录采集次数的指标以此来做除获取平均值。这样子的实现不仅浪费了存储还导致出来的数据不准确,因为可能变化的数据被平均了。
那么是否存在一种方式可以直接获取池的指标值呢?答案是存在的。gauge 就可以很好地实现。

使用案例

既然 gauge 用来记录一个可变的值,那么应该有相应的API来实现这个功能。我们使用 micrometer-core 来做prometheus的客户端sdk,它里面的
Metrics.gauge就可以来处理。

public static <T> T gauge(String name, Iterable<Tag> tags, T obj, ToDoubleFunction<T> valueFunction) {
        return globalRegistry.gauge(name, tags, obj, valueFunction);
    }

name:就是我们要指定的指标名
tags:代表标签列表
obj:监控的对象
valueFunction:监控对象执行的方法

对于我们要监控连接池的指标信息,那么 obj 就是数据源,要是druid连接池这里就是 DruidDataSource ,要获取活跃连接数,那么 valueFunction 就是 getActiveCount 。完整的demo案例如下:

   Metrics.gauge(MetricsConfig.SERVICE_MYSQL_CLI_POOL_ACTIVE_CONN, tags, druidDataSource, DruidDataSource::getActiveCount);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Prometheusgauge是用来记录一个可变值的度量类型。在使用Prometheus的Java客户端sdk时,可以使用micrometer-core库中的Metrics.gauge方法来创建gauge指标。该方法接受一个名称、标签、对象和值函数作为参数,并返回一个gauge对象。通过调用valueFunction函数来获取要记录的实际值。 gauge类型的度量指标在Prometheus中是非常有用的,因为它可以表示任意变化的值。与其他度量类型(如counter和histogram)不同,gauge的值可以增加或减少,并且不会自动重置。这使得gauge非常适用于记录像温度、内存使用量等随时间变化的度量指标。 在Prometheus中,度量指标可以通过定义不同的类型来实现不同的功能。例如,如果定义一个度量类型为Histogram,则Prometheus系统会自动生成三个对应的指标。对于gauge类型,它仅表示一个可变的数值,并且没有自动生成其他指标。 需要注意的是,Prometheus客户库提供了四种核心的度量类型,包括counter、gauge、summary和histogram。这些类型主要用于客户库和wire协议中的区分,以便在数据传输和存储时进行正确的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Prometheus Gauge使用](https://blog.csdn.net/SO_zxn/article/details/128446636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值