Prometheus query_range 函数无法正常工作

Posted

技术标签:

【中文标题】Prometheus query_range 函数无法正常工作【英文标题】:Prometheus query_range function is not working properly 【发布时间】:2020-03-21 16:45:26 【问题描述】:

我正在运行下面的查询来解析来自 Prometheus 的数据,但得到了

“错误”:“无法将\“\”解析为有效的时间戳

curl -G -v --data-urlencode 'query=sum(irate(istio_requests_totalreporter="source",destination_service="$service",response_code!~"5.*"[5m])) / sum(irate(istio_requests_totalreporter="source",destination_service=~"$service"[5m]))&start=1574750639&end=1574751539&step=15s' 'localhost:9090/api/v1/query_range' | jq

结果:


  "status": "error",
  "errorType": "bad_data",
  "error": "cannot parse \"\" to a valid timestamp"

另一方面,当我在查询下运行时,我得到了正确的结果:

curl -G -v --data-urlencode 'query=sum(irate(istio_requests_totalreporter="source",destination_service="$service",response_code!~"5.*"[5m])) / sum(irate(istio_requests_totalreporter="source",destination_service=~"$service"[5m]))' 'localhost:9090/api/v1/query' | jq

结果:


  "status": "success",
  "data": 
    "resultType": "vector",
    "result": [
      
        "metric": ,
        "value": [
          1574761076.19,
          "1"
        ]
      
    ]
  

谁能告诉我哪里出错了?

【问题讨论】:

【参考方案1】:

您的 Prometheus 查询看起来不错,但 curl 命令似乎不正确。建议使用 --data-urlencode 拆分每个查询参数。

curl --data-urlencode 'query=queryValue' \
     --data-urlencode 'start=startValue' \
     --data-urlencode 'end=endValue' \
     --data-urlencode 'step=stepValue'

所以您的curl 电话将是:

curl -G -v --data-urlencode 'query=sum(irate(istio_requests_totalreporter="source",destination_service="$service",response_code!~"5.*"[5m])) / sum(irate(istio_requests_totalreporter="source",destination_service=~"$service"[5m]))' --data-urlencode 'start=1574750639' --data-urlencode 'end=1574751539' --data-urlencode 'step=15s' 'localhost:9090/api/v1/query_range' | jq

来源

--data-urlencode 的手册页 https://curl.haxx.se/docs/manpage.html#--data-urlencode

提到它的行为类似于-d, --datahttps://curl.haxx.se/docs/manpage.html#-d

其中谈到了多次使用 cli 标志。

如果在同一命令行上多次使用这些选项中的任何一个,则指定的数据片段将与分隔符 &-symbol 合并在一起。因此,使用'-d name=daniel -d Skill=lousy'会生成一个看起来像'name=daniel&skill=lousy'的帖子块。

【讨论】:

以上是关于Prometheus query_range 函数无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus技术分享——prometheus的函数与计算公式详解

FurionLoki查询实现请求信息和日志的获取

Prometheus 速率函数和区间选择

Prometheus 速率函数输出为整数

FurionLoki查询实现请求信息和日志的获取

哪个prometheus查询函数可以监控一个计数器的快速变化?