2
AKS = 1.17.9  
Prometheus = 2.16.0  
kube-state-metrics = 1.8.0  

我的用例:我想在我的 1 个持久卷不处于“绑定”阶段时发出警报,并且仅当它属于预定义的一组命名空间时发出警报。
这让我第一次尝试加入 Prometheus 指标 - 所以,请多多包涵 :)

我选择使用以下方法来获取 pv 阶段:

kube_persistentvolume_status_phase{phase="Bound",job="kube-state-metrics"}

渲染:

kube_persistentvolume_status_phase{instance="10.147.5.110:8080",job="kube-state-metrics",persistentvolume="pvc-33197ae6-d42a-777e-b8ca-efbd66a8750d",phase="Bound"} 1
kube_persistentvolume_status_phase{instance="10.147.5.110:8080",job="kube-state-metrics",persistentvolume="pvc-165d5006-erd4-481e-8acc-eed4a04a3bce",phase="Bound"} 1

这很好用,除了它不包含命名空间。所以我设法用这个确定了 persistentvolumeclaim 命名空间:

kube_persistentvolumeclaim_info{namespace=~"monitoring|vault"} 

渲染:

kube_persistentvolumeclaim_info{instance="10.147.5.110:8080",job="kube-state-metrics",namespace="vault",persistentvolumeclaim="vault-file",storageclass="default",volumename="pvc-33197ae6-d42a-777e-b8ca-efbd66a8750d"}    1
kube_persistentvolumeclaim_info{instance="10.147.5.110:8080",job="kube-state-metrics",namespace="monitoring",persistentvolumeclaim="prometheus-prometheus-db-prometheus-prometheus-0",storageclass="default",volumename="pvc-165d5006-erd4-481e-8acc-eed4a04a3bce"} 1

所以我的想法是将这些集合与以下字段中的匹配值结合起来:
(kube_persistentvolume_status_phase)persistentvolume
on
(kube_persistentvolumeclaim_info)volumename  

但是,如果我理解正确,您只能在完全匹配的标签上加入两个指标集(文本及其值)。因此,我选择了“实例”和“工作”标签,因为它们在双方都很常见并且匹配。 

kube_persistentvolume_status_phase{phase!="Bound",job="kube-state-metrics"}  * on(instance,job) group_left(namespace) kube_persistentvolumeclaim_info{namespace=~"monitoring|vault"}

渲染:

Error executing query: found duplicate series for the match group {instance="10.147.5.110:8080" , job="kube-state-metrics"} on the right hand-side of the operation: [{__name__="kube_persistentvolumeclaim_info", instance="10.147.5.110:8080", job="kube-state-metrics", namespace="monitoring", persistentvolumeclaim="alertmanager-prometheusam-db-alertmanager-prometheusam-0", storageclass="default", volumename="pvc-b8406fb8-3262-7777-8da8-151815e05d75"}, {__name__="kube_persistentvolumeclaim_info", instance="10.147.5.110:8080", job="kube-state-metrics", namespace="vault", persistentvolumeclaim="vault-file", storageclass="default", volumename="pvc-33197ae6-d42a-777e-b8ca-efbd66a8750d"}];many-to-many matching not allowed: matching labels must be unique on one side

所以平心而论,查询确实可以很好地传达问题所在 - 所以我尝试使用“忽略”选项来解决这个问题 - 尝试只保留匹配的标签和值(实例和作业)并“排除/忽略”两边不匹配的。这也不起作用 - 导致解析错误。这反过来又促使我退后一步,重新评估我在做什么。

我只是有点担心我可能在这里吠错了树。
我的问题是:这有可能吗?如果可以,怎么办?或者是否有另一种更谨慎的方法来实现这一目标?

提前致谢!

4

0 回答 0