1 背景
Prometheus整体架构分为Server端和Exporter端,而Exporter通常是基于官方的SDK开发(例如Go SDK)。
这里要明确一个概念:数据指标类型只是Client端的一个概念,用于维护Metric的生产,以方便在业务上有所区分。
而Server端是不区分数据类型的,因为所有的数据都是一种格式,也即时间序列 Metric<Label01,Label02> value, timestamp.
2 何为Counter类型?
Counter是一个累计类型的数据指标,它代表单调递增的计数器。
其值只能在重新启动时增加或重置为 0。
例如,您可以使用计数器来表示已响应的HTTP请求数,这个数一定是不断增长的。
2.1 Counter定义
参见Prometheus Go SDK
代码语言:javascript复制type Counter interface {
Metric
Collector
// 加1
Inc()
// 增加一个非负的float64类型的值
Add(float64)
}
可见Counter接口原始定义里,只对外暴露了Inc()和Add()这两个增加接口,目的很明确,只希望这个值只增不减。
但是有一点格外需要注意:
若Exporter重启了,则Counter类型的Metric的值,必然是重新从0开始。
3 何为Gauge类型?
Gauge是可以任意上下波动数值的指标类型。
也即Gauge的值可增可减,可升可降。
例如:机器的CPU使用率,可大可小。
3.1 Gauge定义
参见Prometheus Go SDK
代码语言:javascript复制type Gauge interface {
Metric
Collector
// 指定为任意值
Set(float64)
// 加1
Inc()
// 减1
Dec()
// 加任意值,该值可正可负。<注意这里和Counter类型的定义是不同的>
Add(float64)
// 减任意值,该值可正可负
Sub(float64)
// 将值设置成当前时间戳,单位s
SetToCurrentTime()
}
可见Gauge接口原始定义,非常灵活,可加可减,并无过多限制。
4 Counter和Gauge的对比
Counter类型HTTP请求量的变化情况,其中T4时刻服务刚重启完,此时指标值恢复从0开始。
Gauge类型指标CPU使用率的变化情况,通过使用Gauge的Set()方法,可将机器的CPU使用率放到指标里。
【推荐阅读】
- Prometheus核心概念:一图了解瞬时向量Instant vector和区间向量Range vector的区别
- Prometheus源码分析:基于Go Client自定义的Exporter,是如何在Local存储Metrics的?