Kubernetes 普罗米修斯对库伯·克朗乔布斯的多对多问题

Kubernetes 普罗米修斯对库伯·克朗乔布斯的多对多问题,kubernetes,prometheus,promql,kube-state-metrics,Kubernetes,Prometheus,Promql,Kube State Metrics,好了 我正在尝试配置Kubernetes Cronjobs监控和警报与普罗米修斯。我觉得这很有帮助 但我总是得到一个不允许的多对多匹配:匹配标签的一侧必须是唯一的错误 例如,这是触发此错误的PromQL查询: max( 工作状态开始时间 *在(职务名称)组右()上 kube_job_labels{label_cronjob!=“”) )按(作业名称、标签和作业) 查询本身会产生这些指标 kube\u作业状态\u开始时间: kube_工作状态开始时间{app=“kube state metri

好了

我正在尝试配置Kubernetes Cronjobs监控和警报与普罗米修斯。我觉得这很有帮助

但我总是得到一个不允许的多对多匹配:匹配标签的一侧必须是唯一的错误

例如,这是触发此错误的PromQL查询:

max(
工作状态开始时间
*在(职务名称)组右()上
kube_job_labels{label_cronjob!=“”)
)按(作业名称、标签和作业)

查询本身会产生这些指标

kube\u作业状态\u开始时间

kube_工作状态开始时间{app=“kube state metrics”,chart=“kube-state-metrics-0.12.1”,heritage=“Tiller”,instance=“REDACTED”,job=“kubernetes服务端点”,job_name=“test-1546295400”,kubernetes_name=“kube state metrics”,kubernetes_namespace=“monitoring”,kubernetes_node=“REDACTED”,namespace=“test develop”,release=“kube state metrics”}

kube\u job\u标签{label\u cronjob!=''}

kube_-job_标签{app=“kube-state-metrics”,chart=“kube-state-metrics-0.12.1”,heritage=“Tiller”,instance=“REDACTED”,job=“kubernetes服务端点”,job_name=“test-1546295400”,kubernetes_-name=“kube-state-metrics”,kubernetes_命名空间=“监控”,kubernetes_节点=“REDACTED”,label_cronjob=“test”,label_-environment=“test开发”,命名空间=“测试开发”,release=“kube state metrics”}

这里有我遗漏的东西吗?我在指南中尝试的每个查询都会出现相同的多对多错误。 即使是我自己从头开始建造,也会导致同样的错误。
希望您能在这里帮助我:)

我深入研究了这个问题,我想它的根本原因在于一对多向量匹配表达式:

kube_job_status_start_time * ON(job_name) GROUP_RIGHT() kube_job_labels{label_cronjob!=""}
组修饰符“group_RIGHT()”表示,左侧的每个向量元素(kube_job_status_start_time)可以基于公共标签(job_name)与右侧的多个元素(kube_job_label)匹配。问题是,我们在这里处理的是多对多匹配,因为右侧的每个向量元素也可以匹配左侧向量的多个元素:

我认为我们这里缺少的是唯一地识别普罗米修斯从K8S导出的工作对象的方法。这篇博文的作者在他的设置中提到了这个功能:

…普罗米修斯通过包含 原始度量值的标签作为导出的作业标签


在我的情况下,当通过helm(stable/Prometheus operator)安装时,我没有从普罗米修斯那里得到这个额外的标签。

kube\u作业状态\u开始时间
替换为
max(kube\u作业状态\u开始时间)
将聚合出所有重复项,并应解决错误

结果查询如下所示

       max(
            max(kube_job_status_start_time) by (job_name)
            * ON(job_name) GROUP_RIGHT()
            kube_job_labels{label_cronjob!=""}
          ) BY (job_name, label_cronjob)
在我的情况下,当通过helm(stable/Prometheus operator)安装时,我没有从普罗米修斯那里获得额外的标签

你需要在普罗米修斯中配置它。它调用:荣誉标签:false

# If honor_labels is set to "false", label conflicts are resolved by renaming
# conflicting labels in the scraped data to "exported_<original-label>" (for
# example "exported_instance", "exported_job") and then attaching server-side
# labels.
# Setting honor_labels to "true" is useful for use cases such as federation and
# scraping the Pushgateway, where all labels specified in the target should be
# preserved
无论如何,如果我有这样的(我现在已经导出了_作业),仍然无法进行正确的查询,但我猜仍然是因为我的LHS

Error executing query: found duplicate series for the match group 
{exported_job="kube-state-metrics"} on the left hand-side of the operation: 
[{__name__=

在遵循此介质的指导时,我在我的Prometheus sandbox env中观察到相同的
多对多
错误。对我来说,这些错误是随机发生的。我的意思是,在某些情况下,相同的查询成功完成,另一次失败。我遇到了相同的问题,作业没有导出的作业标签。你找到了导出此作业的方法吗_同时通过更改任何配置来添加作业标签?