这是我的查询,它应该显示表单的每个计数器的增量taskcnt.*:
delta(label_replace({__name__=~"taskcnt.*"}, "old_name", "$1", "__name__", "(.+)")[1w])
Run Code Online (Sandbox Code Playgroud)
我越来越:
执行查询时出错:1:83:解析错误:范围只允许向量选择器
基本上,没有label_replace我会得到:
向量不能包含具有相同标签集的度量
我怎样才能使这个查询工作?
小智 7
子查询正是您所需要的(感谢上面的评论者 M. Doubez)。这应该对您有用 - 它通过每天计算子查询来计算每周增量(请参阅[1w:1d])
delta(label_replace({__name__=~"desired_metric_prefix_.+_suffix"}, "metric_name", "$1", "__name__", "desired_metric_prefix_(.+)_suffix")[1w:1d])
Run Code Online (Sandbox Code Playgroud)
确保与您的正则表达式匹配的所有指标都与label_replace和 函数兼容delta。如果您在 Grafana 中显示此内容,请使用Legend表达式来显示每个系列的{{ metric_name }}提取内容。metric_name
可能{__name__=~"taskcnt.*"}会返回具有相同标签集但具有不同度量名称的多个时间序列。例如,它可能返回以下时间序列:
taskcnt_foo{job="x",instance="y"}
taskcnt_bar{job="x",instance="y"}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这些时间序列具有相同的标签集 - {job="x",instance="y"},但它们具有不同的指标名称:taskcnt_foovs taskcnt_bar。
delta ()函数从结果中删除指标名称,因此当将系列选择器传递给它时,它会从原始时间序列中删除taskcnt_foo并命名并返回具有相同标签集的两个时间序列。这会导致错误,因为返回的时间序列无法彼此区分。taskcnt_bar{job="x",instance="y"}{__name__=~"taskcnt.*"} vector cannot contain metrics with the same labelset
不幸的是,Prometheus 不允许使用类似label_replace()函数内的任何其他函数delta(),这些函数接受例如range vector以方括号结尾的系列选择器(例如,{__name__=~"taskcnt.*"}[1w])。
有一个使用子查询的半工作解决方案,在这个答案中推荐。不幸的是,这个解决方案有以下缺点:
interval后向查找相比太小: 。window[window:interval]interval当方括号太大时,Prometheus 子查询在计算过程中可能会丢失原始数据。这些问题由VictoriaMetrics在MetricsQL中通过修饰符解决keep_metric_names,该修饰符可以应用于任何函数。例如,以下 MetricsQL 查询不会从结果中删除指标名称,因此它既不返回也不返回vector cannot contain metrics with the same labelset错误ranges only allowed for vector selectors:
increase({__name__=~"taskcnt.*"}[1w]) keep_metric_names
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |