You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中提取Prometheus查询的结果数值?

提取Prometheus Vector查询结果的数值(无需字符串解析)

你可以利用prometheus/client_golang返回的强类型数据结构直接提取数值,完全不需要做字符串解析,具体实现如下:

核心逻辑

Query方法返回的res是model.Value接口类型,已知返回结果为vector时,可将其断言为model.Vector类型(需引入github.com/prometheus/common/model包)。每个Vector包含多个model.Sample对象,其中Sample.Value就是目标数值,它是model.SampleValue类型(本质是float64的别名),可直接转换为Go原生数值类型。

完整代码示例

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/prometheus/client_golang/api"
    v1 "github.com/prometheus/client_golang/api/prometheus/v1"
    "github.com/prometheus/common/model"
)

func main() {
    // 假设client已完成初始化
    promAPI := v1.NewAPI(client)
    promquery := "minio_cluster_usage_total_bytes{job=\"1\"}"

    res, _, err := promAPI.Query(context.Background(), promquery, time.Now())
    if err != nil {
        log.Fatal(err)
    }

    // 类型断言为Vector
    vector, ok := res.(model.Vector)
    if !ok {
        log.Fatal("查询结果非vector类型")
    }

    // 遍历样本提取数值
    for _, sample := range vector {
        // 根据需求转换为int64或float64
        numericValue := int64(sample.Value)
        fmt.Printf("提取到的集群总占用字节数:%d\n", numericValue)
        
        // 若需要标签信息,可直接从Metric获取,比如:
        // jobLabel := string(sample.Metric["job"])
    }
}

额外说明

  • 若查询可能返回多种类型(如matrix、scalar),可先通过res.Type()判断类型,再执行断言,避免程序panic。
  • model.Sample的Metric字段可直接获取所有标签键值对,无需手动解析字符串。

内容的提问来源于stack exchange,提问作者conner.mcvay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:15:03