小团队从0搭建devOPS平台--Prometheus Prom
Prometheus 的强大离不开功臣:PromQL (Prometheus Query Language) ,它是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化以及rule 告警中都会使用到它。
在页面 http://xxxx:9090/graph 中,输入下面的查询语句,查看结果,例如:
node_network_up{device="em1"}
下面是PromQL 的简明教程
1.1 四种数据类型
-
Instant vector : 每个指标返回一个值,且指标集合里面的时间戳都相同.类似于即时数据.
-
Range vector: 每个指标包含多个时序数据.
-
Scalar: 只有一个浮点值
-
String: 未开放使用.
1.2 操作符
Prometheus 查询语句中,支持常见的各种表达式操作符,例如
算术运算符:
支持的算术运算符有 +,-,*,/,%,^, 例如 http_requests_total * 2 表示将 http_requests_total 所有数据 double 一倍。
比较运算符:
支持的比较运算符有 ==,!=,>,<,>=,<=, 例如 http_requests_total > 100 表示 http_requests_total 结果中大于 100 的数据。
逻辑运算符:
支持的逻辑运算符有 and,or,unless, 例如 http_requests_total == 5 or http_requests_total == 2 表示 http_requests_total 结果中等于 5 或者 2 的数据。
聚合运算符:
支持的聚合运算符有 sum,min,max,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile,, 例如 max(http_requests_total) 表示 http_requests_total 结果中最大的数据。
注意,和四则运算类型,Prometheus 的运算符也有优先级,它们遵从(^)> (*, /, %) > (+, -) > (==, !=, <=, <, >=, >) > (and, unless) > (or) 的原则。
1.3 函数
- rate(v range-vector)
根据每个点计算每秒的平均变化率.
- irate(v range-vector)
根据最后两个数据点计算变化率.irate()适合于变化较快的数据,rate()适合变化较慢的数据.
更多的函数
abs()
absent()
ceil()
changes()
clamp_max()
clamp_min()
day_of_month()
day_of_week()
days_in_month()
delta()
deriv()
exp()
floor()
histogram_quantile()
holt_winters()
hour()
idelta()
increase()
irate()
label_join()
label_replace()
ln()
log2()
log10()
minute()
month()
predict_linear()
rate()
resets()
round()
scalar()
sort()
sort_desc()
sqrt()
time()
timestamp()
vector()
year()
<aggregation>_over_time()
1.4 示例
简单的指标查询 Simple time series selection
http_requests_total
子查询
rate(http_requests_total[5m])[30m:1m]
函数、操作符联合使用
假设http_requests_total 都有job 和instance标签,如果我们想要按job分组,累加所有实例的总数
sum(rate(http_requests_total[5m])) by (job)
查询CPU使用率:
100 - (avg by (job) (irate(node_cpu{mode="idle"}[5m])) * 100)
查询网卡即时速率
irate(node_network_receive_bytes[2m])