我正在使用计数器来计算请求的数量。有没有办法获得普罗米修斯计数器的当前值?
我的目标是重用现有计数器而不分配另一个变量。
Golang prometheus 客户端版本为 1.1.0。
Dee*_*mal 12
很简单,有一个获取 Prometheus 计数器值的函数
import (
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
"github.com/prometheus/common/log"
)
func GetCounterValue(metric *prometheus.CounterVec) float64 {
var m = &dto.Metric{}
if err := metric.WithLabelValues("label1", "label2").Write(m); err != nil {
log.Error(err)
return 0
}
return m.Counter.GetValue()
}
Run Code Online (Sandbox Code Playgroud)
目前 Golang 官方实现中还没有办法获取计数器的值。
您还可以通过增加自己的计数器并使用CounterFunc来收集它来避免重复计数。
注意:使用整型并atomic避免并发访问问题
// declare the counter as unsigned int
var requestsCounter uint64 = 0
// register counter in Prometheus collector
prometheus.MustRegister(prometheus.NewCounterFunc(
prometheus.CounterOpts{
Name: "requests_total",
Help: "Counts number of requests",
},
func() float64 {
return float64(atomic.LoadUint64(&requestsCounter))
}))
// somewhere in your code
atomic.AddUint64(&requestsCounter, 1)
Run Code Online (Sandbox Code Playgroud)