Counter(计数器)

Counter 类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。例如,你可以使用 counter 类型的指标来表示服务的请求数、已完成的任务数、错误发生的次数等。counter 主要有两个方法:

//将counter值加1. Inc // 将指定值加到counter值上,如果指定值<0 会panic. Add(float64)

Counter 类型数据可以让用户方便的了解事件产生的速率的变化,在 PromQL 内置的相关操作函数可以提供相应的分析,比如以 HTTP 应用请求量来进行说明:

//通过rate函数获取HTTP请求量的增长率 rate(http_requests_total[5m]) //查询当前系统中,访问量前10的HTTP地址 topk(10, http_requests_total)

不要将 counter 类型应用于样本数据非单调递增的指标,例如:当前运行的进程数量(应该用 Guage 类型)。

不同语言关于 Counter 的客户端库使用文档:

Go: https://godoc.org/github.com/prometheus/client_golang/prometheus#Counter
Java: https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Counter.java
Python: https://github.com/prometheus/client_python#counter
Ruby: https://github.com/prometheus/client_ruby#counter
Guage(仪表盘)

Guage 类型代表一种样本数据可以任意变化的指标,即可增可减。guage 通常用于像温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如:当前并发请求的数量。

对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta 可以获取样本在一段时间内的变化情况,例如,计算 CPU 温度在两小时内的差异:

dalta(cpu_temp_celsius{host="zeus"}[2h])

你还可以通过PromQL 内置函数 predict_linear 基于简单线性回归的方式,对样本数据的变化趋势做出预测。例如,基于 2 小时的样本数据,来预测主机可用磁盘空间在 4 个小时之后的剩余情况:

predict_linear(node_filesystem_free{job="node"}[2h], 4* 3600) < 0

不同语言关于 Guage 的客户端库使用文档:

Go: https://godoc.org/github.com/prometheus/client_golang/prometheus#Gauge
Java: https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Gauge.java
Python: https://github.com/prometheus/client_python#gauge
Ruby: https://github.com/prometheus/client_ruby#gauge
Histogram(直方图)

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统 API 调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。

为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在 0~10ms 之间的请求数有多少而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在,通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。

Histogram 在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。

Histogram 类型的样本会提供三种指标(假设指标名称为<basename>):

样本的值分布在 bucket 中的数量,命名为 _bucket{le="<上边界>"}。解释得更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量。
// 在总共2次请求当中。http 请求响应时间 <=0.005 秒 的请求次数为0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0 
// 在总共2次请求当中。http 请求响应时间 <=0.01 秒 的请求次数为0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0 
// 在总共2次请求当中。http 请求响应时间 <=0.025 秒 的请求次数为0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.05",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.075",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.1",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.25",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.5",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.75",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="1.0",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="2.5",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="5.0",} 0.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="7.5",} 2.0 
// 在总共2次请求当中。http 请求响应时间 <=10 秒 的请求次数为 2 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="10.0",} 2.0 
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="+Inf",} 2.0

所有样本值的大小总和,命名为<basename>_sum。

// 实际含义:发生的2次 http 请求总的响应时间为 13.107670803000001 秒 io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001

样本总数,命名为<basename>_count。值和 <basename>_bucket{le="+Inf"}相同。

// 实际含义:当前一共发生了 2 次 http 请求 io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0

可以通过histogram_quantile 函数来计算 Histogram 类型样本的分位数。分位数可能不太好理解,我举个例子,假设你要计算样本的 9 分位数(quantile=0.9),即表示 90% 的样本的值。Histogram 还可以用来计算应用性能指标值(Apdex score)。

不同语言关于 Histogram 的客户端库使用文档:

Go: https://godoc.org/github.com/prometheus/client_golang/prometheus#Histogram
Java: https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Histogram.java
Python: https://github.com/prometheus/client_python#histogram
Ruby: https://github.com/prometheus/client_ruby#histogram
Summary(摘要)

与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。

Summary 类型的样本也会提供三种指标(假设指标名称为 ):

样本值的分位数分布情况,命名为 <basename>{quantile="<φ>"}。

// 含义:这 12 次 http 请求中有 50% 的请求响应时间是 3.052404983s 
io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983 
// 含义:这 12 次 http 请求中有 90% 的请求响应时间是 8.003261666s 
io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666

所有样本值的大小总和,命名为 <basename>_sum。

// 含义:这12次 http 请求的总响应时间为 51.029495508s 
io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508

样本总数,命名为 <basename>_count。

// 含义:当前一共发生了 12 次 http 请求 
io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0

现在可以总结一下 Histogram 与 Summary 的异同:

它们都包含了 <basename>_sum 和 <basename>_count 指标
Histogram 需要通过 <basename>_bucket 来计算分位数,而 Summary 则直接存储了分位数的值。
关于 Summary 与 Histogram 的详细用法,请参考:

https://prometheus.io/docs/practices/histograms/。

不同语言关于 Summary 的客户端库使用文档:

Go: https://godoc.org/github.com/prometheus/client_golang/prometheus#Summary
Java: https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Summary.java
Python: https://github.com/prometheus/client_python#summary
Ruby: https://github.com/prometheus/client_ruby#summary
原文链接:

https://prometheus.io/docs/concepts/metric_types/

详细解读 Prometheus 四种指标类型相关推荐

  1. 卷积神经网络四种卷积类型

    卷积神经网络四种卷积类型 https://www.toutiao.com/a6631333810287936013/ 一般卷积 首先,我们需要就定义卷积层的一些参数达成一致. 卷积核大小(Kernel ...

  2. 四种依恋类型_“我值得被爱吗?”| 如何在亲密关系中培养安全型依恋

    缺爱的人最后会和什么样的人在一起?文 | 徐非儿(简单心理认证·实习咨询师) 如果我们尝试给"缺爱"下一个笼统的定义,那可能是:在成长过程中缺乏被关爱的经历,例如总是遭到主要养育者 ...

  3. 采购订单管理的四种常见类型

    采购管理对于任何成功的企业都至关重要.如果你的企业没有统一的采购管理流程,那么你可能无法对你的采购进行解释,并可能犯下代价高昂的采购错误.采购订单或许是有效采购管理流程中最重要的部分.让我们来看看采购 ...

  4. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  5. ospf的四种网络类型

    原文链接:https://blog.csdn.net/weixin_37945631/article/details/79498334 https://blog.csdn.net/qq_3921960 ...

  6. VMware vSphere四种迁移类型的区别与适应场景

    最近一直刚开始接触VMware vSphere这款虚拟化软件,每天的过程都是上午学新知识不理解,痛苦:下午实验各种出错,折磨:晚上回顾一天所学,五味陈杂,不过相比上午,下午已经好很多了.然后第二天依旧 ...

  7. python中long类型_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  8. python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  9. 四种依恋类型_依恋关系的研究

    说到依恋关系,大家都会想到安全型.焦虑型.回避型,以及这些类型会影响到成年后的人际关系.本文具体罗列一下心理学家研究依恋关系的都做出了怎样的努力. 第一:哈罗做的恒河猴验. 实验情境:把小猴放在一个笼 ...

最新文章

  1. python如何做散点图-【Python】使用scatter()绘制散点图
  2. 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
  3. js:点击button后返回值
  4. 如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...
  5. 关于blog [转贴]来自网络
  6. MySql基本的操作
  7. Windows一般都用系统进程来加载内核模块
  8. laravel 模型事件 updated 触发条件
  9. android大作业源代码,大作业源代码.doc
  10. L2TP的LAC自动拨号实验
  11. 为什么原理图中元器件下面有红色波浪线?
  12. java必记单词_70个学习JAVA必背的英语单词,了解下
  13. Excel QUARTILE函数计算逻辑
  14. 10+ 张图来探究 Linux 内核,以及如何高效学习
  15. 如何选择自己心仪的U盘
  16. vue中如何动态的绑定图片
  17. 分析如何为便携式电子设备挑选安全可靠的场效应晶体管?
  18. 如何在Windows中使用Socks5代理IP保障网络安全
  19. BN、SyncBN、IN、LN、GN学习记录
  20. Galaxy APP Booster,给你的手机提个速

热门文章

  1. [error] [mysql]:1034 Incorrect key file for table 'table_name'; try to repair it
  2. Morgan IT 面经
  3. 了解常用音频接口,看这篇全了!
  4. 腾讯位置 - 地图构建入门(结尾附视频)
  5. 最全jupyter快捷键
  6. Conda及jupyter安装和配置
  7. 面试题整理(Hive)
  8. 自动化测试(一)基本介绍——测试框架的分类 单元测试工具 E2E测试工具
  9. android 对话框焦点获取_android edittext 获取焦点并弹出软键盘
  10. 该享受时纵情享受,该忍受时拼命忍受