我们从外部 API 获取的速率限制为每秒 500 次。我想跟踪随着用户群以周为单位增长,我们离这个限制有多近。我不需要每秒的准确速率,我需要 1 小时窗口内的最大 1 秒速率。提取是突发的,因此超过 1 秒的速率可能远高于 1 小时甚至 1 分钟的平均速率。
我在 fetches 上有一个 Prometheus 计数器,可以使用这个查询:
max_over_time(sum(rate(fetches_counter_total{namespace="$namespace"}[1m]))[1h:1m])
这会正确执行最大窗口,但仅适用于 1 分钟平均速率而不是 1 秒速率。当我将结尾更改为[1s]))[1h:1s])
Grafana 时说“没有数据”并且没有显示任何情节。
我认为可能是 Prometheus 不够快,所以我在代码中添加了一个日志,每次提取发生时,我可以使用以下查询从 Loki 获取日志速率:
sum(count_over_time({namespace="$namespace"} |= "Fetch happened log text" [1s]))
这准确地给出了 1 秒的速率,但是当我将范围设置为一周时,点数比一周内的秒数少得多,并且每次刷新都会显示不同的点子集。为了获得最大窗口,我尝试了这个查询:
max_over_time(sum(count_over_time({namespace="$namespace"} |= "Fetch happened log text" [1s]))[5m:1s])
但它会抛出一个错误:
parse error at line 1, col 15: syntax error: unexpected SUM, expecting NUMBER or { or (
现在我被困住了。从文档看来,unwrap
记录日志可能会有所帮助,但我没有任何标签,也不知道如何应用于unwrap
这种情况。
总之,是否有可能从 Prometheus 获得 1 秒速率或从 Loki 获得日志数量的 max_over_time?