PromQL是 Prometheus 内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。
标签:
address双下划线标签是普罗米修斯系统默认标签,不显示在targe当中,只有把光标移动到abel字段上,才显示默认标签
node_cpu_guest_seconds_total{cpu="0"} #时间序列
监控(指标数据) 标签
node使用cpu描述的统计,符合标签cpu=0的时间序列查询结果
container_cpu_load_average_10s 时间序列
匹配标签的操作符号
=完全相当
匹配标签值 操作符号:
=完全相当
!= 不等于 相当于取反
=~ 正则表达式匹配
!~ 正则表达式取反
数学运算
+加法 -减法 *乘法 /除法 %取余 ^幂运算
通配符:
.任意单个字符
.*多个任意资源
.+一个或者多个任意字符
时长的单位类型:
s seconds 秒 h hour 小时 w weeks 周
m minutes 分 d day 天 y years 年
数据类型:一组时序,每个时许只有一个采样值
promql的查询操作可能需要针对若干个时间序列上的样本数据进行,挑选出目标时间序列是构建表达式时最为关键的一步
1、顺时向量:一组时序,每个时许只有一个采样值
2、区间向量::一组时序,每个时序包含的是一段时间内的多个采样值
3、标量数据:浮点数
4、字符串
5、counter:总数,在promql当中没有直接作用,rate topk increase irate函数来生成样本数据的变化情况
increase 要结合区间向量一起使用,时间序列在一定范围的增量
irate:是一个高灵敏度的函数,计算指标是瞬时速率,基于样本范围内的最后两个样本进行计算,irate更适用于短时间内的变化速率分析
6、gauge:用于存储值。可增可减的指标样本数据,用于求和求平均数,取最小值和最大值。也会结合dalta和predict_linear函数来一起适用
predict_linear:可以预测时间序列V 在T秒之后的变化,对样本数据变化趋势做出预测
predict_linear(node_filesystem_files{ instance="master01"}[2h],4*3600)
node_filesystem_files文件数,选择的标签是master01 2h过去两小时,4*3600未来四小时
7、historgram:对一定时间范围内的数据进行采样,通常是请求持续的时长和响应大小的类型,这一类的数据计入可配置的桶(bucket),可以通过区间来对样本进行筛选
node_authorizer_graph_actions_duration_seconds_bucket(instance="20.0.0.92:6443,le="0.0.0002")
观测桶的上边界,样本统计区间表示所有的样本值小于等于上边界值的所有样本数量
apiserver_current_inqueue_requests{instance="20.0.0.92:6443"} >= 1
快速了解看监控样本的分布情况
8、Summary:分位数计算,类似于historgram,在客户端于一段时间内(默认十分钟)的每个采样点进行统计,计算并且存储了分数位的值,服务端可以直接抓取响应的值
rate(container_cpu_load_average_10s){instance="node=01"}[5m])
展示ratecontainer_cpu_load_average_10s指标的过去每五分钟的采样值,对应的标签node01
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="your_job"}[5m])) by (le)
聚合操作符
sum求和 min最小 max最大 avg平均值 stddev标准差 stdvar方差 count原数个数 cpunt_values等于某个值的原数个数 topk最大的原数个数
bottomk最小的原数个数 quantile
topk(3,container_cpu_usage_seconds_total) 需要带入数值,数值表示的是取提前几位还是后几位
业务
计算某个节点的所有容器的适用内存的序列
sum(container_memory_usage_bytes{instance="node01"})/1024/1024/1024
node01节点上最近1m所有容器适用cpu的使用率
最近1分钟所有容器的使用率
sum by (id) (rate (container_cpu_usage_seconds_total{id!="/"}[1m])
查询k8s集群当中最近的1分钟每个pod的cpu使用率
sum by(name) (rate (container_cpu_usage_seconds_total{image!="",name!=""}[1m]))