在Go中提取普罗米修斯度量

在Go中提取普罗米修斯度量,go,prometheus,Go,Prometheus,我是Golang的新手,我尝试的是查询Prometheus并将查询结果保存在一个对象(如地图)中,该对象具有所有时间戳及其度量值。 我从这个示例代码开始,只做了一些更改() 打印的结果是,例如: “TEST{instance=“localhost:4321”,job=“realtime”}=>\n21@[1597758502.337]\n22@[1597758503.337] 这些实际上是普罗米修斯上正确的值和时间戳。我如何将这些时间戳和值插入到map对象(或我可以在代码中使用的其他类型的对象)

我是Golang的新手,我尝试的是查询Prometheus并将查询结果保存在一个对象(如地图)中,该对象具有所有时间戳及其度量值。 我从这个示例代码开始,只做了一些更改()

打印的结果是,例如: “TEST{instance=“localhost:4321”,job=“realtime”}=>\n21@[1597758502.337]\n22@[1597758503.337]


这些实际上是普罗米修斯上正确的值和时间戳。我如何将这些时间戳和值插入到map对象(或我可以在代码中使用的其他类型的对象)中?

您必须知道返回的结果的类型。例如,model.Value可以是标量、向量、矩阵或字符串类型。每种类型都有自己的获取数据和时间戳的方法。例如,向量有一个包含您正在查找的数据的样本类型数组。godocs和github repo用于e prom/go客户端有非常好的文档,如果您想深入了解。

来自
QueryRange
的结果具有
model.Matrix
类型

然后,它将包含一个类型为
*SampleStream
的指针。由于您的示例只包含一个SampleStream,因此我们可以直接访问第一个SampleStream

然后SampleStream有一个
度量和
类型
[]SamplePair
。您的目标是样本对的切片。在此基础上,我们可以迭代并构建一个映射

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

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

fmt.Println(mapData)

没有“映射对象”这类东西,它只是一个映射,使用映射在中有介绍,我建议您通读其中的全部内容,以熟悉该语言的基础知识。请您详细解释一下此操作的结果(model.Matrix)[0]
。据我所知,您将结果转换为
model.Matrix
,然后选择第一个,对吗?正是@IanZhang。如果您有多个SampleStream,则迭代它们是有意义的。出于简单的原因和作者只有一个的事实,示例直接访问第一个元素。
mapData := make(map[model.Time]model.SampleValue)

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

fmt.Println(mapData)