prometheus:prometheus如何处理数据类型溢出?
Posted
技术标签:
【中文标题】prometheus:prometheus如何处理数据类型溢出?【英文标题】:prometheus: how prometheus handles the data type overflow? 【发布时间】:2018-11-16 00:14:18 【问题描述】:prometheus 客户端不断更新指标,似乎不考虑溢出。比如计数器Add()
:
func (c *counter) Add(v float64)
if v < 0
panic(errors.New("counter cannot decrease in value"))
ival := uint64(v)
if float64(ival) == v
atomic.AddUint64(&c.valInt, ival)
return
for
oldBits := atomic.LoadUint64(&c.valBits)
newBits := math.Float64bits(math.Float64frombits(oldBits) + v)
if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits)
return
c.valInt
会溢出并从 0 开始环绕。
prometheus 在抓取此类倒带指标时如何处理这种情况?
【问题讨论】:
【参考方案1】:Prometheus 旨在处理这样的计数器重置,rate
函数有它的代码。当进程重新启动时,这种情况更常见。
溢出也不太可能发生。即使你以每秒十亿的速度递增,也需要几百年才能溢出。
【讨论】:
histogram
类型的sum
呢?加法可能是任意大值,所以可能会很快溢出sum
。 github.com/prometheus/client_golang/blob/master/prometheus/…
类似的逻辑适用,只要您至少每十年重新启动一次应用程序就可以了。以上是关于prometheus:prometheus如何处理数据类型溢出?的主要内容,如果未能解决你的问题,请参考以下文章
如何为多个 Prometheus 数据源配置 Grafana 仪表板?
如何用helm为grafana添加prometheus数据源?