待手绾青丝

待手绾青丝

待手绾青丝

庭中三千梨花树,再无一朵入我心。 心中只你一朵,似在心中,不在心中,可望可念可想不可及。

109 文章数
2 评论数
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

第七篇_promQL基本使用

2021-04-25 / 0 评论 / 687 阅读 / 0 点赞

PromQL基本使用

[TOC]

PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化以及rule 告警中都会使用到它。

在页面 http://localhost:9090/graph 中,输入下面的查询语句,查看结果,例如:

一、查询结果类型

PromQL 查询结果主要有 3 种类型:
	1、瞬时数据(Instant vector): 包含一组时序,每个时序只有一个点

	2、区间数据(Range vector): 包含一组时序,每个时序有多个点
	
	3、纯量数据(Scalar): 纯量只有一个数字,没有时序

1、瞬时数据 (Instant vector)

kubelet_http_requests_total

2、区间数据 (Range vector)

[5m] : 5分钟以内的数据
	s:seconds
    m:minutes
    h:hours
    d:days
    w:weeks
    y:years
Offset :查看多少分钟之前的数据

1.查询五分钟前到目前的数据

kubelet_http_requests_total[5m]

2.查询30分钟之前的数据

kubelet_http_requests_total offset 30m

3.查询前30到前25分钟的数据

kubelet_http_requests_total [5m] offset 30m

3、纯量数据(Scalar)

count(kubelet_http_requests_total)

#count 统计监控项的job

二、数据类型

prometheus的底层数据模型有四种。

Counter:---->只增不减的计数器
cpu运行时间
http请求数


gauge:  ---->可憎可减的
系统负载情况
内存使用情况

Histogram & Summary  --->用于统计分析样本的分布情况
http平均响应时间

三、查询条件

Prometheus 存储的是时序数据,而它的时序是由名字和一组标签构成的,其实名字也可以写出标签的形式。

1、标签等值查询

container_spec_cpu_quota{container="config-reloader"}
# 或
container_spec_cpu_quota{container=~"config-reloader"}

2、标签不等值查询

container_spec_cpu_quota{container!="config-reloader"}

3、查询条件支持正则匹配

1.正则匹配

container_spec_cpu_quota{container=~"config.*"}
# 或
container_spec_cpu_quota{container=~".*re.*"}

2.正则剔除

container_spec_cpu_quota{container!~".*re.*"}
# 或
container_spec_cpu_quota{container!~".*config.*"}

3.匹配两个值

container_spec_cpu_quota{container=~"kube-flannel|.*config.*"}

四、操作符

https://prometheus.io/docs/prometheus/latest/querying/operators/

1、算术运算符

+ (添加)
- (减法)
* (乘法)
/ (除法)
% (取模)
^ (幂)

计算内存使用率

node_memory_MemFree_bytes/node_memory_MemTotal_bytes * 100

2、比较运算符

== (等于)
!= (不等于)
> (大于)
< (小于)
>= (大于等于)
<= (小于等于)

计算内存小于1G

node_memory_MemFree_bytes / 1024^2 < 1024

3、逻辑运算符

and 且
or  或
unless 非

alertmanager_cluster_messages_sent_total > 440 and alertmanager_cluster_messages_sent_total < 500

alertmanager_cluster_messages_sent_total > 440 or alertmanager_cluster_messages_sent_total < 400

alertmanager_cluster_messages_sent_total > 440 unless alertmanager_cluster_messages_sent_total < 400

4、聚合运算符

sum (求和)
min (求最小值)
max (求最大值)
avg (求平均值)
group (结果向量中的所有值均为1)
stddev (计算标准差)
		方差的算术平方根
stdvar (计算标准方差)
count (统计元素的数量)
	count(alertmanager_cluster_messages_sent_total)
count_values (统计相同值的元素的数量)
	
bottomk (获取元素最小的k个元素)
	bottomk(2,alertmanager_cluster_messages_sent_total)
	
topk (获取元素最大k个元素)
	topk(2,alertmanager_cluster_messages_sent_total)
	
quantile (在整个尺寸上计算φ分位数(0≤φ≤1))
	quantile(0.3,alertmanager_cluster_messages_sent_total)

1.求和

sum(alertmanager_cluster_messages_sent_total)

2.最小值

min(alertmanager_cluster_messages_sent_total)

3.最大值

max(alertmanager_cluster_messages_sent_total)

4.平均值

avg(alertmanager_cluster_messages_sent_total)

这里就不一一列举了

5、特殊查询

根据不同的标签查询

sum(alertmanager_cluster_messages_sent_total) by (pod)

6、操作符运算优先级

^
*,/,%
+, -
==,!=,<=,<,>=,>
and, unless
or

运算符号与计算对象要以空格分开
和数学中一样,()可以代表一个整体,优先计算

五、内置函数

https://prometheus.io/docs/prometheus/latest/querying/functions/

1、increase(v range-vector) 函数获取区间向量中的第一个和最后一个样本并返回其增长量

返回区间向量中每个时间序列过去 5 分钟内 HTTP 请求数的增长数:
increase(http_requests_total{job="apiserver"}[5m])

计算磁盘的IO延迟:
increase(node_disk_io_time_ms{host_ip=~".+"}[2m]) / (increase(node_disk_reads_completed[2m]) + increase(node_disk_writes_completed[2m]

2、rate(v range-vector) 函数可以直接计算区间向量 v 在时间窗口内平均每秒增长速率

返回区间向量中每个时间序列过去 5 分钟内 HTTP 请求数的每秒增长率:
rate(http_requests_total[5m])

3、irate(v range-vector) 函数用于计算区间向量的增长率,但是其反应出的是瞬时增长率。

irate 函数是通过区间向量中最后两个两本数据来计算区间向量的增长速率,它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。

这种方式可以避免在时间窗口范围内的“长尾问题”,并且体现出更好的灵敏度,通过irate函数绘制的图标能够更好的反应样本数据的瞬时变化状态。

irate 只能用于绘制快速变化的计数器,在长期趋势分析或者告警中更推荐使用 rate 函数。因为使用 irate 函数时,速率的简短变化会重置 FOR 语句,形成的图形有很多波峰,难以阅读。
返回区间向量中每个时间序列过去 5 分钟内最后两个样本数据的 HTTP 请求数的增长率:
irate(http_requests_total{job="api-server"}[5m])

4、delta(v range-vector) 的参数是一个区间向量,返回一个瞬时向量。它计算一个区间向量 v 的第一个元素和最后一个元素之间的差值。

返回过去两小时的 CPU 温度差:
delta(cpu_temp_celsius{host="zeus"}[2h])

5、sort排序

sort(alertmanager_cluster_messages_sent_total)

6、sort_desc倒叙

sort_desc(alertmanager_cluster_messages_sent_total)

7、ceil向上取整

ceil(node_filesystem_free_bytes/1024^2)

8、floor向下取整

floor(node_filesystem_free_bytes/1024^2)

9、round四舍五入

round(node_filesystem_free_bytes/1024^2)

六、grafana模板导入

1、去官方选择合适的模板

https://grafana.com/grafana/dashboards/

2、复制对应id

3、grafana导入

文章不错,扫码支持一下吧~
上一篇 下一篇
评论
最新回复
文章目录
每日一句