We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本地搭的一套 Prometheus ,scrape_interval 设置为 15s 查询以下语句时,发现查不出数据
scrape_interval
sum by (url) (rate(http_requests_total_c{url="/"}[15s]))
但是在另一套 Grafana 上查询时,使用 15s 是可以查到数据的
本以为是 Grafana 的问题,于是本地也搭了一套 Grafana ,但是查询的结果是一样的
后来想到另一套系统使用的是 VictoriaMetrics
在 Grafana 社区中也查到了十分清楚的解释,感谢这位老哥
以上社区问答中,指明了在 Prometheus 中, rate range 至少需要是 scrape_interval 的两倍
rate
而在另一篇文章中,说明通常 range 会是 scrape_interval 的四倍,以应对无数据、数据缺失等情况
在以往的印象中, rate 就是取 range 区间内的前后两个数据点相减,再除以 range ,然而实际上不是这样的(一直没仔细看文档导致的错误印象)。
PromQL 计算 rate 确实会取头尾两个点,不过并不是直接取数据点,而是会先进行一个 推断(extrapolation) 的过程,例如:
我们要计算 00:05 这个时间点, range 为 5m 的数据,而实际的头尾数据点,并不一定准确落在 00:00 和 00:05 两个时间点上,假设头尾数据点是落在 00:01 和 00:04 两个时间点,这时候, PromQL 会把这两个点连线,得到一个二元一次方程,从而推断出 00:00 与 00:05 时间点的数据。注意,推断出的数据并不是真实的。
如这篇文章中的图片所展示:
这个逻辑会有以下两个问题:
increase
Counter
那么 VictoriaMetrics 使用的 MetricsQL 是如何解决上述两个问题的?
VictoriaMetrics 保留前一个 range 的数据点:
本地 Docker 启动 Prometheus 与 VictoriaMetrics ,配置 Prometheus remote_write 写到 VictoriaMetrics 中,配合 Grafana 对比二者折线图差异
remote_write
scrape_interval 为 15s
语句为
sum by (url) (rate(http_requests_total_c{url="/"}[$range]))
range 1m
range 15s
The text was updated successfully, but these errors were encountered:
No branches or pull requests
背景
本地搭的一套 Prometheus ,
scrape_interval
设置为 15s查询以下语句时,发现查不出数据
但是在另一套 Grafana 上查询时,使用 15s 是可以查到数据的
原因
本以为是 Grafana 的问题,于是本地也搭了一套 Grafana ,但是查询的结果是一样的
后来想到另一套系统使用的是 VictoriaMetrics
在 Grafana 社区中也查到了十分清楚的解释,感谢这位老哥
rate 在 Prometheus 中的限制
以上社区问答中,指明了在 Prometheus 中,
rate
range 至少需要是scrape_interval
的两倍而在另一篇文章中,说明通常 range 会是
scrape_interval
的四倍,以应对无数据、数据缺失等情况PromQL 如何处理 rate
在以往的印象中,
rate
就是取 range 区间内的前后两个数据点相减,再除以 range ,然而实际上不是这样的(一直没仔细看文档导致的错误印象)。PromQL 计算
rate
确实会取头尾两个点,不过并不是直接取数据点,而是会先进行一个 推断(extrapolation) 的过程,例如:我们要计算 00:05 这个时间点, range 为 5m 的数据,而实际的头尾数据点,并不一定准确落在 00:00 和 00:05 两个时间点上,假设头尾数据点是落在 00:01 和 00:04 两个时间点,这时候, PromQL 会把这两个点连线,得到一个二元一次方程,从而推断出 00:00 与 00:05 时间点的数据。注意,推断出的数据并不是真实的。
如这篇文章中的图片所展示:
这个逻辑会有以下两个问题:
rate
,因为 PromQL 只取 range 范围内的数据点。这就是我遇到的 range 调为 15s 无数据的原因,也是网上建议 range 至少是 2倍 ,最好 4倍scrape_interval
的原因。increase
与rate
一样有推断的逻辑,所以increase
的结果可能会有小数,即使我们一般是对Counter
类型(一般单调递增,数据点是整数)应用increase
函数。VictoriaMetrics MetricsQL 与 PromQL 对 rate 处理的区别
那么 VictoriaMetrics 使用的 MetricsQL 是如何解决上述两个问题的?
rate
和increase
抛弃了推断逻辑,解决increase
处理Counter
出现的小数问题。VictoriaMetrics 保留前一个 range 的数据点:
示例
本地 Docker 启动 Prometheus 与 VictoriaMetrics ,配置 Prometheus
remote_write
写到 VictoriaMetrics 中,配合 Grafana 对比二者折线图差异scrape_interval
为 15s语句为
range 1m
range 15s
参考
The text was updated successfully, but these errors were encountered: