Prometheus基础和函数学习
基础语法
基于向量(vector)的检索⽅式。
基于 metric 查询
http_requests_total 与 http_requests_total{} ⼀样,也可以写成
{name=“http_requests_total”} 。
label 查询
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200525153220939.png
⽀持基于 label 的查询
正则匹配
、 != 、 =~ 、 !~ 。
Prometheus 的 正则是基于 Google 的 re2,具体语法参⻅
https://github.com/google/re2/wiki/Syntax。
推荐写法 {job=~".+"} 、 {job=~".",method=“get”} 。
不推荐写法 {job=~"."}
时间范围查询
s 秒
m 分钟
h ⼩时
d 天
w 周
y年
时间位移查询
http_request_total{} 查询当前最新数据。
http_request_total{}[5m] 查询以当前时间为基准,5 分钟内的数据。
http_requests_total{job=“prometheus”,group=“canary”}
node_load1{job!=“node-peiking1”}
http_requests_total{job=“prometheus”}[5m]
操作符
数学运算
- 加 - 减 * 乘 / 除 % 求余
^ 幂运算
布尔运算
== 相等
!= 不相等
⼤于
< ⼩于
= ⼤于等于
<= ⼩于等于
也可以使⽤布尔值来修饰⽐较运算,结果不会返回具体值,只会返回 0 、 1 。
逻辑运算
and 并且
or 或者
unless 排除
运算优先级
^* 、 / 、 % + 、 -
== 、 != 、 <= 、 < 、 >= 、 >
and 、 unless
or
聚合
node_load1{job=“node-peiking1”}[10m] offset 10m
http_requests_total > bool 1000
sum 求和
min 最⼩值
max 最⼤值
avg 平均值
stddev 标准差
stdvar 标准⽅差
count 计数
count_values 对 value 进⾏计数
bottomk 后n条
topk 前n条
quantile 分位数
语法
或者
参数(parameter)只⽀持 count_values、quantile、topk、bottomk。
统计 HTTP 请求的 P95
函数
时间处理函数
timestamp() 返回 UTC 时间戳。
time() UTC 当前时间。
minute() UTC 转换为分钟,0-59。
hour() UTC 转换为⼩时,0-23。
day_of_month() UTC 转换为天。
days_in_month() UTC 转换为天,28-31。
day_of_week() UTC 转换为每周中的每天。
month() UTC 转换为⽉份,1-12。
year() UTC 转换为年份。
label 处理函数
[without|by (
sort() 升序排序的向量元素。
sort_desc() 降序排序的向量元素。
scalar() 以标量形式返回单个元素的值。
vector() 以不包含 label 的向量的形式返回标量。
absent() 聚合 label。在处理告警的时候⽐较有⽤。
absent_over_time() 聚合 label,基于时间段。在处理告警的时候⽐较有⽤。
label_join() label 连接,使⽤分隔符(separator)。
label_replace() label 替换,基于正则。
值处理函数
changes() 返回向量在给定时间范围内更改的次数。
abs() 返回绝对值。
ceil() 数据取整。
floor() 数据取整。
round() 数据取整。通过 to_nearest 指定四舍五⼊倍数,可以是分数。
clamp_max() 采样最⼤值。
clamp_min() 采样最⼩值。
delta() 计算向量中每个元素的第⼀个和最后⼀个值之间的差值。
idelta() 计算向量中最后两个样本的差值。
计算处理函数
sqrt() 计算平⽅根。
deriv() 计算导数,使⽤线性回归。只有数据模型为 Gauge 的时候才可以使⽤。
exp() 计算指数。
ln() 计算⾃然对数。
log2() 计算 log2。
log10() 计算 log10。
rate() 计算向量中时序数据的每秒平均增⻓率。只有数据模型为 Counter 的时候才可以使
⽤。 rate() 优先级⾼于聚合操作(例如 sum() )。
irate() 计算向量中时序数据的每秒平均增⻓率。基于最后两个数据点。只有数据模型为 Counter
的时候才可以使⽤,且适⽤于绘制易失性、快速移动的图形。 irate() 的优先级⼤⾬聚合操作符
(例如 sum() )。
increase() 计算向量中时序数据的增量。只有数据模型为 Counter 的时候才可以使⽤。
histogram_quantile() 计算直⽅图。使⽤ rate() 函数指定分位数计算的时间窗⼝。
holt_winters() 基于时序数据⽣成⼀个平滑值。只有数据模型为 Gauge 的时候才可以使⽤。
predict_linear() 预测 t 值,使⽤线性回归。只有数据模型为 Gauge 的时候才可以使⽤。
聚合处理函数
_over_time() 基于时序聚合向
量。 max_over_time() 、 min_over_time() 、 sum_over_time() 、 avg_over_time() 、 count_o
ver_time() 、 stddev_over_time() 、 stdvar_over_time() 、 quantile_over_time() 。
函数使⽤场景
计算 Counter 指标增⻓率
或者
rate() 或者 increase() 计算的是平均增⻓速率,容易遇到"⻓尾问题"。
采⽤ irate() 可以避免。采样,也更灵敏,但如果是观测⻓期趋势的化,可能会造成⼲扰。
预测 Gauge 指标变化趋势
基于阈值的告警模式对于当资源⽤量是平滑增⻓的情况下是能够有效的⼯作的,但如果遭遇突增、突
降,则容易引发其他问题。
predict_linear() 基于线性回归,可以很好的应对这种情况,⽐如磁盘使⽤率。
统计 Histogram 指标的分位数
Histogram 和 Summary 都可以⽤于统计和分析数据的分布情况。
Summary 直接在客户端计算分位数(数据采样)。
Histogram 计算分位数需要通过 histogram_quantile() 。
数据样本
计算⽅法