PromQL "where" 子句

PromQL "where" clause

如何在 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 "(" 错误。

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

100 * count(up{namespace=~"default|jenkins"} == 1) > 1
  • 你也可以试试这个。在 Kubernetes 中,所有资源都使用 pod。因此,如果您采用 pod 状态指标并减去当前时间 60,则得到 post 1 分钟 pods 运行 状态。

time()-60 > (kube_pod_start_time)

Prometheus 提供了以下方式来过滤查询中的数据:

  • Time series selectors. They allow filtering time series by metrics and labels. For example, up{namespace=~"default|jenkins"} is a series selector, which returns only time series with the name up, which contain label namespace matching the given given regular expressiondefault|jenkins。这大致相当于以下 SQL:
SELECT * FROM table WHERE name = 'up' and namespace ~ '^(default|jenkins)$'
  • Comparison operators,允许按值过滤时间序列。例如,名称为 upup == 0 returns 时间序列具有 0 值。这大致相当于以下 SQL:
SELECT * FROM table WHERE name = 'up' and value == 0
  • Time series matching via binary operators。这允许执行 join-like 查询。例如,up * on(instance) group_left(name) node_os_info 通过 instance 标签加入 up 指标和 node_os_info 指标,并从 node_os_info 指标中选择额外的 name 标签。这大致相当于以下 SQL:
SELECT up.*, node_os_info.name
FROM up LEFT JOIN node_os_info ON (instance)