登录
首页 >  Golang >  Go问答

如何使用golang客户端获取Prometheus计数器当前值?

来源:stackoverflow

时间:2024-03-15 13:27:32 341浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何使用golang客户端获取Prometheus计数器当前值?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在使用计数器来计算请求数。有没有办法获取普罗米修斯计数器的当前值?

我的目标是重用现有计数器而不分配另一个变量。

Golang prometheus 客户端版本为 1.1.0。


解决方案


目前 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)

很简单,有一个获取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()
}

到这里,我们也就讲完了《如何使用golang客户端获取Prometheus计数器当前值?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>