【问题标题】:PromQL "where" clausePromQL“where”子句
【发布时间】:2021-04-13 11:42:52
【问题描述】:

如何在 PromQL 中添加 where 子句?

我正在尝试构建一个查询,显示在 Kubernetes 中运行的应用程序何时启动超过一分钟,但我想按命名空间进行过滤。

这就是我的查询目前的样子

100 * (count(up == 1) BY (job, namespace, service) ) > 1

这很好用,但它提供了我不需要的额外信息。

{job="prometheus-grafana", namespace="monitor", service="prometheus-grafana"}
{job="jenkins", namespace="jenkins", service="jenkins"}
{job="kube-state-metrics", namespace="monitor", service="prometheus-kube-state-metrics"}
{job="node-exporter", namespace="monitor", service="prometheus-prometheus-node-exporter"}
{job="kubelet", namespace="kube-system", service="prometheus-kube-prometheus-kubelet"}
{job="apiserver", namespace="default", service="kubernetes"}

我想要完成的是仅获取 jenkinsdefault 命名空间的结果。

{job="apiserver", namespace="default", service="kubernetes"}
{job="jenkins", namespace="jenkins", service="jenkins"}

我试过了

100 * (count(up == 1) BY (job, namespace, service) ) > 1 and ON {namespace="jenkins"}

但我收到 invalid parameter "query": 1:65: parse error: unexpected "{" in grouping opts, expected "(" 错误。

【问题讨论】:

    标签: kubernetes where-clause prometheus promql


    【解决方案1】:

    您必须通过您想要的标签(命名空间)过滤指标“向上”,在您的情况下,它应该看起来像这样:

    100 * count(up{namespace=~"default|jenkins"} == 1) > 1
    

    【讨论】:

    • 非常感谢 Petar。这对我帮助很大。
    【解决方案2】:
    • 你也可以试试这个。在 Kubernetes 中,所有资源都使用 pod。因此,如果您采用 pod 状态指标并减去当前时间,用 60 得出 1 分钟后的 pod 运行状态。

    time()-60 > (kube_pod_start_time)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2015-04-21
      • 2012-04-23
      • 2019-08-22
      • 2011-01-27
      • 1970-01-01
      相关资源
      最近更新 更多