PromQL查询基础

Prometheus提供了一种名为 PromQL 的函数式查询语言,可以让用户实时选择和聚合时序数据(series data)。表达式的结果可以显示为图形或表格形式,也可以通过HTTP API在外部调用。

表达式语言数据类型

Prometheus的表达式语言(Expression language)中,表达式 或 子表达式 可以计算为 4种 类型之一:

  • 即时向量(Instant vector) - 一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳

  • 范围向量(Range vector) - 一组时间序列,每个时间序列随时间变化的一系列数据点

  • 标量(Scalar) - 一个简单的浮点数字值

  • 字符串(String) - 一个简单的字符串值,目前未使用

备注

Tips: 其实我开始的时候也不适应 PromQL ,毕竟 PromQL 内置指标非常多,得摸索。不过,我发现 GPT 能够提供很好的起步参考(简单向GPT-3.5提出需要查询prometheus的要求就能返回一些案例和解释,稍加修改就能使用)

内置指标

PromQL提供了很多非常有用的Kubernetes集群内置指标,只需要检查查询这些指标就能获得集群概况,加上一些 label 过滤(类似 SQL Atlaswhere )就能组装成所需的查询:

  • kube_pod_status_phase Pod状态:

查询集群中指定 <YOUR_NAMESPACE> 中处于 Running 状态Pod数量
count(kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running"})
  • 增加限定: 在 kube_pod_status_phase PromQL内置指标,可以使用 namespace , phase , deployment 等标签来筛选指定 Namespace 中处于 Running 状态且属于指定 Deployment 的 Pod:

查询集群中指定 <YOUR_NAMESPACE> 中且指定 <YOUR_DEPLOYMENT_NAME> 的处于 Running 状态Pod数量
count(kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running", deployment="<YOUR_DEPLOYMENT_NAME>"})
  • 分组统计(类似于 SQL AtlasGROUP BY ): 将上述查询按照 Deployment 进行分组:

按照 Deployment 统计(count)集群中指定 <YOUR_NAMESPACE> 中且指定 <YOUR_DEPLOYMENT_NAME> 的处于 Running 状态Pod数量
count by (deployment) (kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running"})
  • clusterdeployment 分组:

按照 ClusterDeployment (组合进行分组) 统计(count)集群中指定 <YOUR_NAMESPACE> 中且指定 <YOUR_DEPLOYMENT_NAME> 的处于 Running 状态Pod数量
count by (cluster, deployment) (kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running"}) 

快速起步

PromQL 的第一个重要功能是聚合(Aggregation),类似 SQL Atlas 中的 GROUP BY 按字段分组并对另一个字段的值进行聚合( AVG()COUBT() )。在 PromQL 中聚合是指结果通过指标标签(metric label)并由 sum() 等聚合运算符进行处理。

参考