一、介绍
PromQL(Prometheus Query language)即 Prometheus查询语言的简称,它是 Prometheus 内置的查询语言,Prometheus 作为强大的开源监控系统,它最大的依赖便是PromQL,它是监控数据个性化查询、展示的基础,所以要掌握Prometheus,掌握PromQL是必备的前提。
二、数据类型
1、介绍
PromQL 表达式计算出来的值有以下几种类型:
瞬时向量 (Instant vector): 一组时序,每个时序只有一个采样值
区间向量 (Range vector): 一组时序,每个时序包含一段时间内的多个采样值
标量数据 (Scalar): 一个浮点数
字符串 (String): 一个字符串,暂时未用
2、瞬时向量
普通非[]查询都是瞬时向量,即某个点的值
3、区间向量
以通过在瞬时向量选择器后面添加包含在 [] 里的时长来得到区间向量选择器。
# 这个不支持Graph,需要选择Console,才会看到采集的数据
apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]
三、PromQL之匹配模式
总结:Prometheus匹配模式_小魏的博客的博客-CSDN博客_prometheus 正则匹配
四、内置函数
总结:Prometheus内置函数_小魏的博客的博客-CSDN博客_prometheus sort
五、常用指标
总结:Prometheus常用指标_小魏的博客的博客-CSDN博客
六、Prometheus之PromQL-操作符
十、by的用法
类似于mysql的group by,即按照某个条件聚合
# 按照mode计算主机CPU的平均使用时间
avg(node_cpu) by (mode)# 按照主机查询各个主机的CPU使用率
sum(sum(irate(node_cpu{mode!='idle'}[5m])) / sum(irate(node_cpu[5m]))) by (instance)
十一、案例一
1、语句如下
sum by (label_qke_cloud_qiyi_domain_app_id, label_qke_cloud_qiyi_domain_app_name) (rate(http_server_requests_seconds_count{}[5m]) * on (pod) group_left(label_qke_cloud_qiyi_domain_app_id, label_qke_cloud_qiyi_domain_app_name) kube_pod_labels{label_qke_cloud_qiyi_domain_app_name=\"hubble-biz-log\"})
2、函数与关键词介绍
group_left :
sum by :按照条件求和
on :条件
rate:前后相减
* : 即乘法,为什么要用乘法呢?目的是想让前面的rate结果不变,因为右边的结果是始终1,改成使用 /(除法)也是可以的,效果一致
3、语句拆分分析
3.1、rate(http_server_requests_seconds_count{}[5m]):查最近5分钟所有pod,所有请求的QPS,如下图:
另外由于是5分钟区间,所以一个请求如果step是60秒的话,应该有差不多5条左右的数据,以某一条为例:
rate(http_server_requests_seconds_count{exception="None", uri="/api/open/wo/getWorkorderLog"}[5m])
3.2、