Ily*_*iev 7 grafana prometheus promql
在 Prometheus 中,有时我们需要同时绘制多个指标(例如,具有名称、拟合相同的正则表达式),就像 PromQL 查询一样:
{name=~"camel_proxy.*count"}
Run Code Online (Sandbox Code Playgroud)
它工作正常,相同的标签集线用不同的名称绘制。
当我们想要绘制它们的rate()时,我们面临标题中的错误:
rate({name=~"camel_proxy.*count"}[5m])
Run Code Online (Sandbox Code Playgroud)
因此,这里的方法是使标签集不相同,并将 移动__name__到某个标签,使每个标签集都是唯一的:
rate(label_replace({name=~"camel_proxy.*count"},"name_label","$1","name", "(.+)")[5m])
Run Code Online (Sandbox Code Playgroud)
但我们仍然收到这样的错误
1:90: parse error: ranges only allowed for vector selectors"
Run Code Online (Sandbox Code Playgroud)
如何避免它并正确绘制比率?
Ily*_*iev 10
这里的 PromQL 查询应该是:
rate(label_replace({name=~"camel_proxy.*count"},"name_label","$1","name", "(.+)")[5m:])
Run Code Online (Sandbox Code Playgroud)
请注意:您需要添加冒号:, 而5m:不是5m
内部label_replace()触发rate()子查询处理,这可能会返回意外结果,因为它rate()开始使用从数据库返回的计算样本label_replace()而不是存储在数据库中的原始样本。
VictoriaMetrics 的MetricsQL(这是我从事的类似 Prometheus 的监控解决方案)为vector cannot contain metrics with the same labelset错误keep_metric_names修饰符提供了更优雅的解决方案。只需将此修饰符放在函数后面即可删除指标名称,以指示它保留指标名称:
rate({name=~"camel_proxy.*count"}[5m]) keep_metric_names
Run Code Online (Sandbox Code Playgroud)
此解决方案避免了触发subquery processing,因此该rate()函数继续处理存储在数据库中的原始样本。
| 归档时间: |
|
| 查看次数: |
12481 次 |
| 最近记录: |