【发布时间】: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 在抓取此类倒带指标时如何处理这种情况?
【问题讨论】:
标签: prometheus