kubernetes 从多个指标收集标签和查询结果数据

wwtsj6pe  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(1)|浏览(88)

我正在学习和试验Prometheus指标和Grafana Jmeter 板。这些信息来自Kubernetes集群。
我正在努力弄清楚如何收集关于pod的信息,这些信息来自多个指标。我相信所涉及的指标都以某种方式相关。它们都属于kube_pod...“家族”。

后台

我使用了一种类似于以下的技术,适用于一个简单的度量到度量的情况:

(metric_A) + on(<common_label>) group_left(<metric_B_label>, ...) (0 * metric_B)

字符串
这允许我通过一个公共标签从右侧关联一个左侧没有的标签。这里不涉及算术,所以加法和乘法实际上什么也不做。on(或ignoring)运算符显然需要在左侧和右侧之间使用二元运算符。这看起来真的很笨重,但它确实有效,我知道没有其他方法来实现这一点。
这里有一个具体的例子:

(kube_pod_status_phase != 0) + on (pod) group_left (node) (0 * kube_pod_info)


kube_pod_status_phase提供了每个pod(Running、Failed等)的phase(当然还有pod),但没有节点信息。kube_pod_info具有node标签和匹配的pod标签。使用上面的查询提供了一个pod的集合,它们的当前阶段以及它们与哪个节点相关联。

问题

我目前的任务是收集以下信息:
| 豆荚|工作状态|创建|年龄| Age |
| --|--|--|--| ------------ |
| pod_A_1|跑步|月/日/年时:分:秒|{x}d{y}h| {x}d{y}h |
| pod_B_1|跑步|月/日/年时:分:秒|{x}d{y}h| {x}d{y}h |
| pod_C_1|待定|月/日/年时:分:秒|{x}d{y}h| {x}d{y}h |
| pod_A_2|跑步|月/日/年时:分:秒|{x}d{y}h| {x}d{y}h |
| pod_B_2|失败|月/日/年时:分:秒|{x}d{y}h| {x}d{y}h |
| ......这是一个问题。|......这是一个问题。|......这是一个问题。|......这是一个问题。| ... |
我的计划是从kube_pod_status_phase度量中获取状态(阶段),从kube_pod_start_time度量中获取创建日期/时间和年龄,并从kube_pod_info度量中包含相应的节点。年龄计算为time() - kube_pod_start_time
另一个使其复杂化的细节是,phasenode在其各自的度量中是 * 标签 *,而创建的日期/时间和年龄是运行查询的“结果”(即,它们是 * 不是 * 标签)。这在几次尝试中给我带来了问题。
我试着看看我是否可以以某种方式将查询链接在一起,但除了令人难以置信的丑陋和复杂之外,我无法将结果值(创建日期和年龄)包含在我设法开始工作的结果中。
如果有人知道如何做到这一点,我会非常感激知道它。

am46iovg

am46iovg1#

我找到了一种方法来做我需要的事情。感谢https://stackoverflow.com/users/21363224/markalex的评论,让我走上了思考的轨道。
我创建了3个查询:

(kube_pod_status_phase{namespace=~"runner.*"} != 0) + on (pod) group_left (node) (0 * kube_pod_info)

time() - kube_pod_start_time{namespace=~"runner.*"}

kube_pod_start_time{namespace=~"runner.*"}

字符串
然后在pod标签上使用“Join by field”转换将它们连接在一起。最后,使用“Organizefields”转换来隐藏我不关心的列以及一些重新排序。

相关问题