1 指标类型
prometheus的指标有四种类型,分别是Counter,Gauge,Histogram,Summary。
-
Counter 只增不减的计数器,用于描述某个指标的累计状态,比如请求量统计,http_requests_total -
Gauge 可增可减的计量器,用于描述某个指标当前的状态,比如系统内存余量,node_memory_MemFree_bytes -
Histogram 直方图指标用于描述指标的分布情况,比如对于请求响应时间,总共10w个请求,小于10ms的有5w个,9小于50ms的有9w个,小于100ms的有9.9w个 -
Summary 和直方图类似,summary也是用于描述指标分布情况,不过表现形式不同,比如还是对于请求响应时间,summary描述则是,总共10w个请求,50%小于10ms,90%小于50ms,99%小于100ms Histogram的使用场景会比较多一些,因为对服务端资源需求更少,但是在查询时histogram的资源消耗会比summary相对于更多。其实也就是summary把资源消耗转移到了服务端,指标的分布数据是计算好再导出的。
2 常用聚合函数
sum 求和
min 最小值
max 最大值
avg 平均值
stddev 标准差
stdvar 方差
count 统计元素数量
count_values 统计等于某个值的元素数量
bottomk 最小的k个元素
topk 最大的k个元素
quantile 元素分布的分位数
以上这些聚合函数使用时,有些可以针对所有指标做聚合,有些还可以指定以某个label做聚合,也可以去掉某个label后做聚合,
假如我们以hostname为粒度,统计各个hostname的请求数量,
sum by (hostname) (http_requests_total)
如果统计时,不想关注请求状态码,可以忽略该label后做聚合
sum without(statu_code) (http_requests_total)
3 常用函数
- absent()
用于检查某个指标是否缺失,缺失时返回1,比如查询myjob是否启动,当myjob存在时,返回空,不存在时返回1
absent(job="myjob")
- delta()
返回指定时间段的差值,取的是第一个和最后一个值,不管中间的数据
delta(http_requests_total{job="myjob"}[1h])
- histogram_quantile()
计算histogram指标的分布情况,比如计算90%数据指标分布线
histogram_quantile(0.9, sum by (job, le) (rate(http_request_duration_seconds_bucket[10m])))
而聚合函数quantile()一般计算的是gauge指标的分布,比如计算100机器的90%内存使用分布,
quantile(0.9, node_memory_MemFree_bytes)
也可以理解为,histogram_quantile的操作对象是针对node_memory_MemFree_bytes聚合后的histogram数据,
- rate() and irate()
都是用于计算元素变化速率,irate取的是在指定时间范围内的最近两个数据点,而rate则是取指定时间范围内所有数据点做平均,所以irate常用于变化快的指标,rate则用于缓慢变化的指标,这样指标才不容易失真
rate(http_requests_total{job="myjob"}[1m])
irate(http_requests_total{job="myjob"}[1m])
参考文档:
- https://prometheus.io/docs/prometheus/latest/querying/operators/
- https://prometheus.io/docs/prometheus/latest/querying/functions/
|