亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中提取 Prometheus 指標

在 Go 中提取 Prometheus 指標

Go
米脂 2022-06-27 09:05:32
我是 Golang 的新手,我想做的是查詢 Prometheus 并將查詢結果保存在具有所有時間戳及其度量值的對象(例如地圖)中。我從這個示例代碼開始,只做了一些更改(https://github.com/prometheus/client_golang/blob/master/api/prometheus/v1/example_test.go)func getFromPromRange(start time.Time, end time.Time, metric string) model.Value {    client, err := api.NewClient(api.Config{        Address: "http://localhost:9090",    })    if err != nil {        fmt.Printf("Error creating client: %v\n", err)        os.Exit(1)    }    v1api := v1.NewAPI(client)    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)    defer cancel()    r := v1.Range{        Start: start,        End:   end,        Step:  time.Second,    }    result, warnings, err := v1api.QueryRange(ctx, metric, r)     if err != nil {        fmt.Printf("Error querying Prometheus: %v\n", err)        os.Exit(1)    }    if len(warnings) > 0 {        fmt.Printf("Warnings: %v\n", warnings)    }    fmt.Printf("Result:\n%v\n", result)    return result}打印的結果例如:“TEST{instance="localhost:4321", job="realtime"} =>\n21 @[1597758502.337]\n22 @[1597758503.337]...這些實際上是 Prometheus 上的正確值和時間戳。如何將這些時間戳和值插入地圖對象(或我可以在代碼中使用的其他類型的對象)?
查看完整描述

3 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

來自的結果QueryRange有類型model.Matrix。


這將包含一個類型的指針*SampleStream。由于您的示例僅包含一個 SampleStream,因此我們可以直接訪問第一個。


SampleStream 然后有一個MetricandValues類型[]SamplePair。您的目標是樣本對的切片。在此之上,我們可以迭代并構建例如地圖。


mapData := make(map[model.Time]model.SampleValue)


for _, val := range result.(model.Matrix)[0].Values {

    mapData[val.Timestamp] = val.Value

}


fmt.Println(mapData)


查看完整回答
反對 回復 2022-06-27
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

也許你可以在這個問題中找到你的答案


https://github.com/prometheus/client_golang/issues/194


switch {

        case val.Type() == model.ValScalar:

            scalarVal := val.(*model.Scalar)

            // handle scalar stuff

        case val.Type() == model.ValVector:

            vectorVal := val.(model.Vector)

            for _, elem := range vectorVal {

                // do something with each element in the vector

        // etc


查看完整回答
反對 回復 2022-06-27
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

您必須知道要返回的結果類型。例如,model.Value 可以是 Scalar、Vector、Matrix 或 String 類型。這些類型中的每一種都有自己獲取數據和時間戳的方式。例如,一個 Vector 有一個 Sample 類型的數組,其中包含您要查找的數據。如果您想更深入地研究,godocs 和 prom/go 客戶端的 github repo 有非常好的文檔。



查看完整回答
反對 回復 2022-06-27
  • 3 回答
  • 0 關注
  • 522 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號