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, --data
https://curl.haxx.se/docs/manpage.html#-d
其中谈到了多次使用 cli 标志。
如果在同一命令行上多次使用这些选项中的任何一个,则指定的数据片段将与分隔符 &-symbol 合并在一起。因此,使用'-d name=daniel -d Skill=lousy'会生成一个看起来像'name=daniel&skill=lousy'的帖子块。
【讨论】:
以上是关于Prometheus query_range 函数无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章