前言
#在之前我们了解到Prometheus存储实际上所有的监控数据都是以时间序列的形式,保存在prometheus的TSDB(时序数据库)上.
#从存储上来说,指标metric都是相同的,但是在不同的场景下这些metric⼜有⼀些差异。#例如,
#在Node Exporter返回的样本中指标"node_load1"反应的是当前系统的负载状态,
#随着时间的变化这个指标返回的样本数据是在不断变化的。#⽽指标"node_cpu"所获取到的样本数据却不同,它是⼀个持续增⼤的值
#因为其反应的是CPU的累积使⽤时 间,从理论上讲只要系统不关机,这个值是会⽆限变⼤的。
常见的核心指标
1. Counter(计数器) #类似于计数器,会持续不断的记录资源的信息,用于统计总体的数据
2. Gauge(仪表盘) #动态显示资源或请求的使用百分比
3. Histogram(直方图) #查看某一个时间端的请求持续时间或响应大小
4. Summary(摘要) #和Histogram类似,不过是由客户端计算
一. Counter 只增不减的计数器
#Counter类型的指标其⼯作⽅式和计数器⼀样,只增不减(除⾮系统发⽣重置)。
#常⻅的监控指标,如http_requests_total,node_cpu都是Counter类型的监控指标。
#⼀般在定义Counter类型指标的名称时推荐使⽤"_total"作为后缀。
案例1 查询HTTP请求量
http_request_total
案例2 查询当前系统中访问量前10的HTTP地址
topk(10, http_request_total)
二. Gauge 可增可减的仪表盘
#与Counter不同,Gauge类型的指标侧重于反应系统的当前状态。因此这类指标的样本数据可增可减。
#常⻅指标如
"node_memory_MemFree_bytes"(主机当前空闲的内容⼤⼩)
"node_memory_MemAvailable_bytes"(可⽤内存⼤⼩)
#都是Gauge类型的监控指标。
#对于Gauge类型的监控指标,通过PromQL内置函数"delta()"可以获取样本在⼀段时间返回内的变化情况。
案例1 计算内存在2分钟内的变换值
delta(node_memory_MemAvailable_bytes[2m])
#还可以使⽤deriv()计算样本的线性回归模型,甚⾄是直接使⽤predict_linear()对数据的变化趋势进⾏预测。
案例2 预测系统磁盘空闲空间在4个⼩时之后的剩余情况
#标签可以不写,是为了方便显示单条数据
predict_linear(node_filesystem_free_bytes{mountpoint="/",instance="192.168.1.21:9100",device="/dev/mapper/centos-root"}[1h], 4 * 3600)
#我最近没怎么写入过数据,所以查询到空闲是12G
#一个小时之后也差不多是12G
三 使⽤Histogram和Summary分析数据分布情况
#Histogram和Summary主⽤⽤于统计和分析样本的分布情况
#在⼤多数情况下我们都倾向于使⽤某些量化指标的平均值,
#例如
# CPU的平均使⽤率、⻚⾯的平均响应时间。
#但是这种⽅式的问题很明显,以系统的api调用的平均响应时间为例
#如果大多数api请求响应时间都维持在100s内,而个别请求的响应时间为5s
#那么久会导致一些web页面的响应时间落到中位数的情况,这种情况被称作"⻓尾问题"
#为了区分是平均的慢、还是长尾导致的慢。最简单是方式就是根据请求延迟的范围进行分组
#比如 延迟在0~10ms之间一组、⽽10~20ms之间的一组
#Histogram和Summary都是为了能够解决这样问题的存在
1. Summary
#例如,指标prometheus_tsdb_wal_fsync_duration_seconds的指标类型为Summary。
#它记录了Prometheus Server中 wal_fsync处理的处理时间,通过访问Prometheus Server的/metrics地址
从上⾯的样本中可以得知当前Prometheus Server进⾏wal_fsync操作的总次数为1次(count) 总耗时0.010009577(sum)
2. Histogram
#在Prometheus Server⾃身返回的样本数据中,我们还能找到类型为Histogram的监控指标
prometheus_tsdb_compaction_chunk_range_seconds_bucket
#"Summary"与"Histogram"类型的相同之处在于,都会返回指标的总数(_count)和值的总量(_sum)
#而不同在于"Histogram"指标直接反应了在不同区间内样本的个数,区间通过标签"len"进⾏定义。
#并且对于"Histogram"指标来说,我们还可以通过"histogram_quantile()"函数在服务器端计算分位数。
#而Sumamry的分位数则是直接在客户端计算完成,因此对于分位数的计算⽽⾔
#小结
Summary #在通过PromQL进⾏查询时有更好的性能表现
Histogram #由服务端计算从而减少客户端的压力,但会消耗更多的资