带有 pod 标签的 Prometheus kubelet 指标

Prometheus kubelet metrics with pod labels

我正在尝试弄清楚如何使用 prometheus-stack 将 pod 标签从 kubelet 指标中获取到指标标签中。在我们的环境中,我们需要散列 pod 名称(由于长度限制),因此我们的应用名称、环境和单元名称保存在 pod 标签中。

我们正在使用 prometheus-stack(helm 安装)从 kubelet(/metrics/metrics/cadvisor)收集指标,由于指标标签中缺少 pod 标签,因此很难知道是哪个指标属于哪个应用程序。

Prometheus-stack 正在使用 sd_kubernetes_config 和端点规则来收集 kubelet 指标,其中无法使用 pod 标签的 __meta 标签。是否有另一种方法如何在指标标签中获取该标签?

我还尝试使用 kubeStateMetrics 收集 pod_labels 指标,在那里我可以获得包含广告连播标签的指标,但我不知道如何以来自 cadvisor 的指标的方式显示这两个指标将显示其值,kubeStateMetrics 中的指标将用于显示其标签(在 Prometheus 图表中)。

感谢任何建议。

据我所知,您确实可以使用过滤指标 based on pod labels。看原回答:

You can use + operator to join metrics. Here, group_left() will include the extra label: label_source from the right metric kube_pod_labels. The metric you're joining is forced to zero ( i.e. 0 * kube_pod_labels ) so that it doesn't affect the result of first metric.

(
kube_pod_info{namespace="test"}
)
   + on(namespace) group_left(label_source)
(
   0 * kube_pod_labels
)

事实上,指标可能又长又讨厌。然而,这是一种在 prometheus 中创建您所期望的有效方法,即带有 pod 标签的 kubelet 指标。

另请参阅 this guide - it is described how to join Prometheus metrics by label with PromQL and this another guide - 如何使用 PromQL 连接更有效地大规模查询 Prometheus 指标。