第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Prometheus計(jì)數(shù)器:如何使用golang客戶端獲取當(dāng)前值?

Prometheus計(jì)數(shù)器:如何使用golang客戶端獲取當(dāng)前值?

Go
qq_笑_17 2023-07-26 13:17:03
我正在使用計(jì)數(shù)器來(lái)計(jì)算請(qǐng)求數(shù)。有沒(méi)有辦法獲取普羅米修斯計(jì)數(shù)器的當(dāng)前值?我的目標(biāo)是重用現(xiàn)有計(jì)數(shù)器而不分配另一個(gè)變量。Golang prometheus客戶端版本為1.1.0。
查看完整描述

4 回答

?
桃花長(zhǎng)相依

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊

很簡(jiǎn)單,有一個(gè)獲取 Prometheus 計(jì)數(shù)器值的函數(shù)



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()

}


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
慕無(wú)忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

目前 Golang 官方實(shí)現(xiàn)中還沒(méi)有辦法獲取計(jì)數(shù)器的值。

您還可以通過(guò)增加自己的計(jì)數(shù)器并使用CounterFunc來(lái)收集它來(lái)避免重復(fù)計(jì)數(shù)。

注意:使用整型并atomic避免并發(fā)訪問(wèn)問(wèn)題

// 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)


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

可以在官方 Golang 實(shí)現(xiàn)中讀取計(jì)數(shù)器(或任何指標(biāo))的值。我不確定它是什么時(shí)候添加的。


這對(duì)我來(lái)說(shuō)適用于沒(méi)有向量的簡(jiǎn)單度量:


func getMetricValue(col prometheus.Collector) float64 {

    c := make(chan prometheus.Metric, 1) // 1 for metric with no vector

    col.Collect(c)      // collect current metric value into the channel

    m := dto.Metric{}

    _ = (<-c).Write(&m) // read metric value from the channel

    return *m.Counter.Value

}

更新:這是一個(gè)更通用的版本,適用于向量和直方圖......


// GetMetricValue returns the sum of the Counter metrics associated with the Collector

// e.g. the metric for a non-vector, or the sum of the metrics for vector labels.

// If the metric is a Histogram then number of samples is used.

func GetMetricValue(col prometheus.Collector) float64 {

    var total float64

    collect(col, func(m dto.Metric) {

        if h := m.GetHistogram(); h != nil {

                total += float64(h.GetSampleCount())

        } else {

                total += m.GetCounter().GetValue()

        }

    })

    return total

}


// collect calls the function for each metric associated with the Collector

func collect(col prometheus.Collector, do func(dto.Metric)) {

    c := make(chan prometheus.Metric)

    go func(c chan prometheus.Metric) {

        col.Collect(c)

        close(c)

    }(c)

    for x := range c { // eg range across distinct label vector values

            m := dto.Metric{}

            _ = x.Write(&m)

            do(m)

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
拉丁的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

import (

? "github.com/VictoriaMetrics/metrics"

)


var requestsTotal = metrics.NewCounter(`http_requests_total`)

//...


func getRequestsTotal() uint64 {

? return requestsTotal.Get()

}

例如,只需在所需的計(jì)數(shù)器上調(diào)用Get()函數(shù)即可。


查看完整回答
反對(duì) 回復(fù) 2023-07-26
  • 4 回答
  • 0 關(guān)注
  • 365 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)