要在 Go 语言中获取不包含 metrics 和 timestamp 的 JSON 数据,您可以使用 Prometheus 的 API 查询端点来请求数据。具体步骤如下:
- 首先,在您的 Go 项目中导入必要的依赖项:
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
- 然后,构造一个 HTTP 请求,查询 Prometheus API 并返回 JSON 数据:
url := "http://localhost:9090/api/v1/query?query=<your-query-here>"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
var result interface{}
err = json.Unmarshal(body, &result)
if err != nil {
panic(err)
}
在此代码中,将 up
指标,请使用以下代码:
url := "http://localhost:9090/api/v1/query?query=up"
- 最后,您可以使用
json.Marshal()
函数将结果转换为 JSON 字符串,然后对其进行处理。
jsonResult, err := json.Marshal(result)
if err != nil {
panic(err)
}
fmt.Println(string(jsonResult))
请注意,这样的结果仍然包含一些其他元数据(例如 status
和 data
)。您可以根据需要从 JSON 对象中提取数据。例如,如果您只想获取查询结果的值,请使用以下代码:
values := result.(map[string]interface{})["data"].(map[string]interface{})["result"].([]interface{})
for _, value := range values {
fmt.Println(value.(map[string]interface{})["value"])
}