prometheus:prometheus如何处理数据类型溢出?

时间:2018-06-06 10:32:09

标签: prometheus

prometheus客户端不断更新指标,似乎不考虑溢出。例如,counster 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 个答案:

答案 0 :(得分:1)

Prometheus旨在处理这样的计数器重置,rate函数具有代码。当进程重新启动时更常见。

溢出也不大可能。即使你每秒增加十亿,也需要几百年才能溢出。