kubernetes 仅计算非重复值的和,同时显示其他列

uwopmtnx  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(94)

我尝试使用promql/prometheus创建一个警报,但在生成正确的时间序列时遇到了问题。在K8s中,我的目标是显示位于多个集群中的特定应用程序的任何代码/版本不匹配。通过使用count,任何值大于1的应用程序都会告诉我部署了> 1个版本。目前,我的查询将生成以下内容:
第一个月

| label_app |  label_version  |  Value #A |
-------------------------------------------
| app_1     |   0.0.111       |     2     |
| app_1     |   0.0.222       |     1     |
| app_2     |   0.0.111       |     2     |
| app_2     |   0.0.222       |     1     |
| app_3     |   0.0.111       |     3     |

字符串
第4列的值表示部署在每个集群中的所述代码的#(label_version);例如,app_1app_2在两个集群中部署了0.0.111版本,在一个集群中部署了0.0.222版本,但app_3在三个集群中部署的版本相同。
我的最终目标是只计算distinct label_version,并以这种方式填充时间序列:

| label_app |  Value #A  |
 -------------------------
| app_1     |      2     |
| app_2     |      2     |
| app_3     |      1     |


执行(count(group by(label_version)kube_deployment_labels{label_app=~".*"}))给我正确的 * 值 *,但我想列出所有的应用程序相关联的 * 值 * 以及。我尝试了各种各样的组合,但都没有成功。
任何帮助将不胜感激!先谢谢你。

gxwragnw

gxwragnw1#

您可以在之前的结果上再应用一个count by

count(
 count(
  kube_deployment_labels{label_app=~".*"}
 ) by (label_version, label_app)
) by (label_app)

字符串
将返回与每个label_app关联的label_version的数量。
在这个demo中可以看到类似的查询。

相关问题