运维监控数据模型

news/2024/7/23 23:54:54 标签: Promethus

Counter(计数器)模型
计数器是一个累积指标,单调递增,其值仅能增长或重置为0。类似于“服务请求数”、“任务完成数”和“错误数”等可以使用计数器模型,而“进程数”等可能会出现下降的指标不适合使用计数器模型

Gauge(数值)模型
数值模型代表了简单的整形或非整形数字值,值可任意上升或下降。类似于“温度”、“内存使用率”等可以使用数值模型。

Histogram(直方图)模型
直方图模型比较复杂,用于对监控数据的采样,这里的采样指的是你不需要完整的记录全部监控数据就可以获取一些统计指标。以“请求响应时间”为例,通过直方图模型可以获取平均响应时间,请求次数,甚至是响应时间按比例的分布情况。
如何实现的呢?Histogram记录了几个关键数据:

  • 总数据条数 count,例如请求次数
  • 数据值汇总 sum,例如响应时间综合
  • 各数据值范围内的数据条数 bucket count,例如0~100ms的请求有20个、100~200ms的请求由30个,数据值范围被称为bucket,bucket可自由设定

数据结构大概是这个样子

# HELP rpc_durations_histogram_seconds RPC latency distributions.
# TYPE rpc_durations_histogram_seconds histogram
rpc_durations_histogram_seconds_bucket{le="-0.00099"} 0
rpc_durations_histogram_seconds_bucket{le="-0.00089"} 0
rpc_durations_histogram_seconds_bucket{le="-0.0007899999999999999"} 0
rpc_durations_histogram_seconds_bucket{le="-0.0006899999999999999"} 5
rpc_durations_histogram_seconds_bucket{le="-0.0005899999999999998"} 18
rpc_durations_histogram_seconds_bucket{le="-0.0004899999999999998"} 98
rpc_durations_histogram_seconds_bucket{le="-0.0003899999999999998"} 422
rpc_durations_histogram_seconds_bucket{le="-0.0002899999999999998"} 1245
rpc_durations_histogram_seconds_bucket{le="-0.0001899999999999998"} 2927
rpc_durations_histogram_seconds_bucket{le="-8.999999999999979e-05"} 5520
rpc_durations_histogram_seconds_bucket{le="1.0000000000000216e-05"} 8845
rpc_durations_histogram_seconds_bucket{le="0.00011000000000000022"} 12333
rpc_durations_histogram_seconds_bucket{le="0.00021000000000000023"} 15034
rpc_durations_histogram_seconds_bucket{le="0.0003100000000000002"} 16696
rpc_durations_histogram_seconds_bucket{le="0.0004100000000000002"} 17452
rpc_durations_histogram_seconds_bucket{le="0.0005100000000000003"} 17749
rpc_durations_histogram_seconds_bucket{le="0.0006100000000000003"} 17840
rpc_durations_histogram_seconds_bucket{le="0.0007100000000000003"} 17862
rpc_durations_histogram_seconds_bucket{le="0.0008100000000000004"} 17866
rpc_durations_histogram_seconds_bucket{le="0.0009100000000000004"} 17866
rpc_durations_histogram_seconds_bucket{le="+Inf"} 17866
rpc_durations_histogram_seconds_sum 0.17511515233805508
rpc_durations_histogram_seconds_count 17866

除了平均值、总和这样比较简单的统计值外,Histogram还提供了Apdex(满意度)和Quantiles(百分占比)这样高级的统计方法。
Apdex常用来代表用户满意度,以响应时间为例,设定某一时间阈值T为用户完全满意,则4T代表用户完全无法忍受,T~4T代表用户略为不满,单次请求响应时间小于T得1分,大于4T得0分,T~4T得0.5分,所有分值求平均即为Apdex,约接近1代表用户满意度越高。套用Histogram模型,小于T的count为a,小于4T的count为b,总count为c,则apdex=(a+b)/2/c
Quantiles代表不同数值的百分占比,比如90%的请求响应时间小于哪个值,类似于percentline

summary(汇总)模型
与histogram模型类似,summary模型也是用来对监控数据进行采样的,区别在于histogram统计的是各个bucket内数据的个数(Count),而summary统计的是不同Quantiles的值,数据结构大概是这个样子

# HELP rpc_durations_seconds RPC latency distributions.
# TYPE rpc_durations_seconds summary
rpc_durations_seconds{service="exponential",quantile="0.5"} 8.061037124684969e-07
rpc_durations_seconds{service="exponential",quantile="0.9"} 2.3397222029430324e-06
rpc_durations_seconds{service="exponential",quantile="0.99"} 4.5890358621042235e-06
rpc_durations_seconds_sum{service="exponential"} 0.02676656013791554
rpc_durations_seconds_count{service="exponential"} 26836
rpc_durations_seconds{service="normal",quantile="0.5"} 2.0027285858645033e-05
rpc_durations_seconds{service="normal",quantile="0.9"} 0.00027552023061180175
rpc_durations_seconds{service="normal",quantile="0.99"} 0.00048129683518079587
rpc_durations_seconds_sum{service="normal"} 0.17511515233805508
rpc_durations_seconds_count{service="normal"} 17866
rpc_durations_seconds{service="uniform",quantile="0.5"} 8.919043658000242e-05
rpc_durations_seconds{service="uniform",quantile="0.9"} 0.00017954262339800665
rpc_durations_seconds{service="uniform",quantile="0.99"} 0.0001980928237747443
rpc_durations_seconds_sum{service="uniform"} 1.3429687752363637
rpc_durations_seconds_count{service="uniform"} 13391

即表示一共采集了1000个样本,这些样本总和为29969.50000000001,其中50%的样本值低于31.1,90%的样本值低于41.3,99%的样本值低于41.9

histogram与summary的区别
histogram与summary的区别主要在于quantiles,百分占比在监控中是一个很重要的统计维度,以请求响应时间为例,仅仅知道平均响应时间是不够的,我们常常还需要90%、95%的请求落在什么响应时间范围内,以更好的掌握响应时间的整体分布。
两者根本的区别在于summary模型在监控数据的采集端计算quantiles,histograms则是在数据的分析端根据bucket count计算。

对比项HistogramSummary
配置要求根据期望的数据范围设置合适的bucket根据期望的占比设置合适的quantile,未设置的quantile将无法再计算
数据采集端性能性能要求很低,因为只需要简单的统计次数性能要求较高,因为需要实时计算百分比
数据分析端性能性能要求高,计算耗时可能较高性能要求低
Quantile统计误差取决于bucket设定的数据范围取决于预先设定的Quantile
数据聚合可聚合一般情况下不能聚合

可以看出来histogram的灵活度更高,尤其是监控数据分散在多个节点,又需要将各个节点的数据汇总起来计算quantiles时,summary的方式是不可行的。

Quantiles(百分占比)统计误差
无论采用哪种方式计算Quantiles都会存在误差,以请求响应时间举例:
histogram的方式下,假设请求响应时间均为220ms,而bucket设置为200ms和300ms,我们需要知道95%的请求在多少ms以内。histogram模型只能保证95th percentline在200ms和300ms之间,并且会通过线性拟合的方式估算95th percentline具体是多少,这就产生了误差。
summary的方式似乎是没有误差的,只要数据采集端的算法正确就应该是准确的,但是如果你需要从多个节点汇总聚合数据,summary的方式是不支持的。
所以选用histogram还是summary需要结合监控数据的特点,但有一点可以确定,如果你需要数据聚合,就需要选择histogram了。



作者:小清新同学
链接:https://www.jianshu.com/p/f59cb2b30430
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


http://www.niftyadmin.cn/n/811372.html

相关文章

SimpleDateFormat时间格式化存在线程安全问题

想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的&…

Swagger从入门到精通

前言 编写目的 本文介绍如何使用Swagger编写API文档。通过阅读本文,你可以: 了解swagger是什么掌握使用swagger编写API文档的基本方法 涉及范围 本文包括对swagger specification(以下译作”规范“)的介绍,如何使用…

eclipse优化:最详细

字体需要修改 tomcat配置 jdk配置 选中文件,快速打开文件位置 eclipse优化 文件默认打开方式设置 每个字母自动提示 checkstyle设置 tomcat内存分配 配置项目热部署 General > Startup and Shutdown : 移除所有在启动时加载的插件。 General > Edito…

Xmanager4注册码

Xmanager简介: Xmanager包含好多工具Xbrowser,Xshell,Xftp等 1、Xbrowser可以远程访问linux/unix的X window桌面,类似windows的远程桌面,非常好用。 2、Xshell可以替代SecureCRT和putty,不过他们的功能都类似。通过t…

理解、学习与使用 JAVA 中的 OPTIONAL

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。 本质上,这是一个包含有可选值的包装类,这意味着 Optiona…

如何在JAVA编程中干掉if/else、switch/case(一)

前言 if...else在每一种语言中都存在,但是代码中如果存在大量的if...else语句,就会造成程序的可读性变差,可维护性变差,进而危害整个系统。同样switch...case也会让代码变得冗余,我们称这样的代码有坏代码的味道&…

如何在JAVA编程中干掉if/else、switch/case(二)

前言 上一篇中介绍了采用表驱动(map)方式和Optional方式取代if...else、switch...case逻辑。本章采用JAVA设计模式之策略模式抽象公共方法,剥离像map这样的紧耦合操作,对扩展开放,只关心自己的handler逻辑即可。 策略…

三十岁应该知道的职场规则

开篇记 千里之行始于足下,做技术这行更多的是要脚踏实地,逐步积累的过程。做编程不能浮躁,要想提高技术不仅要读万卷书,还要加以更多的实践才能提高自己的水平。猫叔毕业以来,参加工作五年半,仍觉编程知识…