【Prometheus】Prometheus的PromQL语句

2024-01-31 13:28
文章标签 语句 prometheus promql

本文主要是介绍【Prometheus】Prometheus的PromQL语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Prometheus promQL的语法:

#时间序列
node_cpu_guest_seconds_total{cpu="0"}
监控(指标数据)		{标签}

node使用CPU的描述的统计,符合标签CPU=0的时间序列的查询结果

指标+标签生成时间序列

标签:

__address__:双下划线标签,是Prometheus系统的默认标签,不显示在target页面中,只有把光标移动到label的字段上,才能显示默认标签

匹配标签值操作符号:

= 完全相等

!= 不等于,相当于取反

=~ 正则表达式匹配

!~ 正则表达式取反

数学运算符:

+ 加法

- 减法

* 乘法

/ 除法

% 取余

^ 幂运算

常用的通配符:

. 任意单个字符

.* 多个任意字符

.+ 一个或者多个任意字符

时长的单位类型:

s seconds秒

m minute分

h hour时

d day天

w weeks周

y years年

数据类型:

  1. 瞬时向量:一组时序,每个时序只有一个采样值
  2. 区间向量:一组时序,每个时序包含一段时间内的多个采样值
  3. 标量数据:浮点数,小数
  4. 字符串:一个字符串
  5. counter:总数,在整个promQL中没有直接作用。通过rate topk increase irate这些函数生成样本数据的变化情况
topk(3,node_cpu_seconds_total)
#展示当前数据前三位的数据

increase要结合区间向量一起使用,展示时间序列在一定范围内的增量

increase(node_cpu_seconds_total[5m])
#在五分钟之内的增量趋势

irate:高灵敏度的函数,计算指标的瞬时速率,基于样本范围内的最后两个样本进行计算

irate更适合于短期范围内的变化速率分析。rate是长时间的

6、gauge:用于存储值,可增可减的指标样本数据,求和,求平均数,取最小值和最大值。也会结合两个特殊的函数:dalta额redict_linear函数一块使用

delta:计算范围向量中每个时间序列元素的第一个和最后一个指相减的差。展示不同时间点上样本的值的差值

delta(container_memory_cache{instance="node01"}[5m])
#5分钟内的差值
predict_linear:可以预测时间序列,V在T秒之后的变化趋势,对样本数据的变化趋势的预测
predict linear(node_filesystem_files{instance="master01"}[2h],4*3600)
node_filesystem_files
#文件数,选择的标签是master01 2h过去两个小时,4*3600未来四个小时
统计过去两个小时的变化,根据这两小时的变化,预测未来4小时的变化

7、historgram:直方图,对一定时间范围内的数据进行采样,通常是请求持续的时长和响应大小的类型这一类,计入一个可配的桶bucket。通过区间对样本进行筛选,也可以统计求和

node_authorizer_graph_action_duration_seconds_bucket{instance="20.0.0.61:6443",le="0.0002"}
#观测桶的上边界,样本的统计区间,表示所有的样本值小于等于上边界的所有样本数量
#le="+Inf",最大区间,包含的所有样本数量apiserver_current_inqueue_requests{instance="192.168.233.91:6443"} >= 1
#快速的了解监控样本的分布情况

8、summary:分位数计算,类似于historgram,在客户端于一段时间内(默认时间10分钟)

的每个采样点进行统计,计算并且存储了分位数的值。服务端可以直接抓取相应的值

quantile="0.5"
这里的0.5就是分位,他的范围是0<P<1rate(node_cpu_seconds_total{ instance="node01"}[5m])
#展示的是指标node_cpu_seconds_total,指标是过去每五分钟的一个采样值,对应的标签为 instance="node01"

聚合操作符:

sum 求和

min 最小值

max 最大值

avg 平均值

stdev 标准差

stdvar 方差

count 元素个数

count_values 等于某个值的元素个数

topk 最大的元素个数

bottomk 最小的元素个数

quantile 分位数

业务中常用的语句:

#计算 master01 节点所有容器总计内存:
sum(container_memory_usage_bytes{instance=~"master01"})/1024/1024/1024#计算 master01 节点最近 1m 所有容器 cpu 使用率:
sum (rate (container_cpu_usage_seconds_total{instance=~"master01"}[1m])) / sum (machine_cpu_cores{ instance =~"master01"}) * 100#计算最近 1m 所有容器 cpu 使用率
sum by (id)(rate (container_cpu_usage_seconds_total{id!="/"}[1m]))#查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用率
sum by (name)(rate (container_cpu_usage_seconds_total{image!="", name!=""}[1m]))(1)每台主机 CPU 在最近 5 分钟内的平均使用率
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100(2)查询 1 分钟的 load average 的时间序列是否超过主机 CPU 数量 2 倍
node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode="idle"}) by (instance)(3)计算主机内存使用率
可用内存空间:空闲内存、buffer、cache 指标之和
node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes已用内存空间:总内存空间减去可用空间
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)使用率:已用空间除以总空间
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100(4)计算所有 node 节点所有容器总计内存:
sum  by (instance) (container_memory_usage_bytes{instance=~"node*"})/1024/1024/1024(5)计算 node01 节点最近 1m 所有容器 cpu 使用率:
sum (rate(container_cpu_usage_seconds_total{instance="node01"}[1m])) / sum (machine_cpu_cores{instance="node01"}) * 100
#container_cpu_usage_seconds_total 代表容器占用CPU的时间总和(6)计算最近 5m 每个容器 cpu 使用情况变化率
sum (rate(container_cpu_usage_seconds_total[5m])) by (container_name)(7)查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用情况变化率
sum (rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m])) by (pod_name) 
#由于查询到的数据都是容器相关的,所以最好按照 Pod 分组聚合

这篇关于【Prometheus】Prometheus的PromQL语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663920

相关文章

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd