从系列结果 PromQL 中省略标签
Posted
技术标签:
【中文标题】从系列结果 PromQL 中省略标签【英文标题】:Omit labels from series results PromQL 【发布时间】:2020-03-13 08:41:39 【问题描述】:假设我写了一个这样的基本 PromQL 查询
查询:
kube_deployment_spec_replicas
结果:
kube_deployment_spec_replicasdeployment="mydeployment",endpoint="myendpoint",instance="myinstance",job="myjob",namespace="default",pod="mypod",service="myservice"
有没有一种干净的方法可以从结果时间序列中省略 instance
和 pod
?
期望:
kube_deployment_spec_replicasdeployment="mydeployment",endpoint="myendpoint",job="myjob",namespace="default",service="myservice"
【问题讨论】:
为什么要这样做?您不能只删除标签,因为作为查询的结果,您需要具有唯一的时间序列,而简单地删除标签会违反该约束。 @Oliver 这些指标是通过 kube-state-metrics 作业收集的。当作业扩大和缩小时,这些指标的实例和 pod 标签会发生变化。这会导致 prometheus alertmanager 可能将 prometheus 警报的状态从触发更改为挂起。 所有指标都一样吗?那么为什么不按照 Sergio 的建议使用 max 或 avg 将时间序列减少到每个部署只有一个。 【参考方案1】:您需要使用 Prometheus 查询运算符。您可以根据用例使用 avg 或 sum。
您可以在这里查看更多信息:here
【讨论】:
如问题所示,我的查询不使用内置函数,使用内置函数不会达到预期的行为。另外,我正在尝试以干净的方式完成此操作(没有嵌套的 label_replaces)【参考方案2】:按照 Sergio 的建议,尝试使用以下内容:
sum(kube_deployment_spec_replicas) without (instance, pod)
此查询将从结果中删除 instance
和 pod
标签。请注意,如果有多个 kube_deployment_spec_replicas
时间序列具有相同的 (instance, pod)
标签集,则查询将无法按预期工作。在这种情况下,查询将总结这些时间序列。
附言MetricsQL 通过label_del
函数提供了更明显的删除标签的解决方案:
label_del(kube_deployment_spec_replicas, "instance", "pod")
【讨论】:
以上是关于从系列结果 PromQL 中省略标签的主要内容,如果未能解决你的问题,请参考以下文章