【问题标题】:Prometheus HTTP API - POST RequestPrometheus HTTP API - POST 请求
【发布时间】:2022-12-16 16:35:55
【问题描述】:

我们正在使用 Prometheus HTTP API,并将 GET 请求发送到以下端点:

/api/v1/query

一开始一切都按预期进行,但最近当我们的查询变大时,request-URI 变得太大了。

文档说可以发送邮政请求到相同的端点,并直接在请求正文中传递查询参数,而不是将查询参数作为 URL 的一部分传递。

这应该可以解决我们的问题,但我找不到任何示例或指南来解释如何做到这一点。

URL 查询长度有限,所以我们正在寻找一种方法将查询作为正文的一部分发送:

端点:http://server:8082/api/v1/query

身体 :

{
    "query": "count(count(node_cpu_seconds_total{instance=~\"iServer.*\",job=\"events_prometheus\"}) by (cpu))"
}

响应错误:

{
    "status": "error",
    "errorType": "bad_data",
    "error": "invalid parameter 'query': parse error at char 1: no expression found in input"
}

只是提一下,发送相同的查询作为查询参数将起作用并给我们预期的结果。

【问题讨论】:

    标签: http-post prometheus promql httpapi


    【解决方案1】:

    您可以使用 POST 方法和 Content-Type: application/x-www-form-urlencoded 标头直接在请求正文中对这些参数进行 URL 编码。这在指定可能违反服务器端 URL 字符限制的大型查询时很有用。 如果您使用某种编程语言,您应该像下面的示例一样构建这些请求。

    golang 中的示例代码:

    func main() {
        formData := url.Values{
            "query": {"sum(temperature) by(status)"},
            "time":  {"1670859244"},
        }
    
        client := &http.Client{}
    
        req, err := http.NewRequest("POST", "http://localhost:8428/api/v1/query", strings.NewReader(formData.Encode()))
        if err != nil {
            log.Fatalln(err)
        }
    
        req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    
        resp, err := client.Do(req)
        if err != nil {
            log.Fatalln(err)
        }
        defer resp.Body.Close()
    
        body, err := io.ReadAll(resp.Body)
        if err != nil {
            log.Fatalln(err)
        }
    
        log.Println(string(body))
    }
    

    在响应中,您应该会看到类似这样的内容。

    {"status":"success","data":{"resultType":"vector","result":[]}}
    

    但在结果中,应该有一些带有数据的向量。 响应示例可以在此处查看 https://docs.victoriametrics.com/keyConcepts.html#range-query

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 2016-07-12
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多