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 的 where
)就能组装成所需的查询:
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 的
GROUP BY
): 将上述查询按照Deployment
进行分组:
Deployment
统计(count)集群中指定 <YOUR_NAMESPACE>
中且指定 <YOUR_DEPLOYMENT_NAME>
的处于 Running
状态Pod数量count by (deployment) (kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running"})
找
cluster
和deployment
分组:
Cluster
和 Deployment
(组合进行分组) 统计(count)集群中指定 <YOUR_NAMESPACE>
中且指定 <YOUR_DEPLOYMENT_NAME>
的处于 Running
状态Pod数量count by (cluster, deployment) (kube_pod_status_phase{namespace="<YOUR_NAMESPACE>", phase="Running"})
快速起步
PromQL
的第一个重要功能是聚合(Aggregation),类似 SQL 中的 GROUP BY
按字段分组并对另一个字段的值进行聚合( AVG()
或 COUBT()
)。在 PromQL
中聚合是指结果通过指标标签(metric label)并由 sum()
等聚合运算符进行处理。