【问题标题】:prometheus: how prometheus handles the data type overflow?prometheus:prometheus如何处理数据类型溢出?
【发布时间】: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


    【解决方案1】:

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

    溢出也不太可能发生。即使你以每秒十亿的速度递增,也需要几百年才能溢出。

    【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2010-09-22
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多