前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Prometheus四种metric类型

Prometheus四种metric类型

作者头像
你大哥
发布2022-11-23 14:35:40
8360
发布2022-11-23 14:35:40
举报
文章被收录于专栏:容器云实践

Prometheus的4种metrics(指标)类型:

  • Counter
  • Gauge
  • Histogram
  • Summary

四种指标类型的数据对象都是数字,如果要监控文本类的信息只能通过指标名称或者 label 来呈现,在 zabbix 一类的监控中指标类型本身支持 Log 和文本,当然在这里我们不是要讨论 Prometheus 的局限性,而是要看一看 Prometheus 是如何把数字玩出花活的。Counter 与 Gauge 比较好理解,我们简单的过一下 然后主要关注 Histogram 和 Summary

Counter 与 Gauge

Counter

单调递增的计数器。

例如 Prometheus自身 中 metrics 的 http 请求总数

Gauge

仪表,也可以认为是一种计数器,不过支持加和减。

例如 node 中的负载数据

Histogram 与 Summary

Histogram

直方图常用于请求持续时间或者响应大小采样,然后将结果记录到存储桶(bucket),每个桶为累加数据。

通过三个metrics名称来完整暴露一组Histogram

  • 桶累积计数器,<basename>_bucket{le="<upper inclusive bound>"}
  • 所有观察值的总和,<basename>_sum
  • 已观察到的事件计数,<basename>_count与上述相同<basename>_bucket{le="+Inf"}

例如K8s中pod启动耗时:

代码语言:javascript
复制
kubelet_pod_start_duration_seconds_bucket
kubelet_pod_start_duration_seconds_count #进行过pod start的数量
kubelet_pod_start_duration_seconds_sum  # 总耗时

具体到某个节点中

le:小于等于。例如le=”5“,即pod启动耗时<=5s的有87次

+inf:无穷。当启动耗时为无穷时,也就是节点下pod启动过的数量,与kubelet_pod_start_duration_seconds_count相等

通过grafana 中 Bar gauge呈现桶的分布如下:

有了直方图数据后我们可以做相应的比例计算:

计算pod启动耗时大于1s,小于2.5s的次数

代码语言:javascript
复制
#kubelet_pod_start_duration_seconds_bucket{instance="node4.**.com",le="2.5"} - ignoring(le) kubelet_pod_start_duration_seconds_bucket{instance="node4.**.com",le="1"}
9

计算pod启动耗时大于2.5s的比例

代码语言:javascript
复制
#kubelet_pod_start_duration_seconds_bucket{instance="node4.**.com",le="2.5"} / ignoring(le) kubelet_pod_start_duration_seconds_bucket{instance="node4.**.com",le="+Inf"}   
0.875

使用 PromQL 函数histogram_quantile计算百分位

代码语言:javascript
复制
#histogram_quantile(0.80,kubelet_pod_start_duration_seconds_bucket{ instance="node4.**.com"} )
1.3000000000000018

即80%的pod启动次数中,耗时<=1.3s,histogram_quantile函数计算百分位得到是一个近似值。

通过histogram_quantile函数聚合

计算Prometheus http所有请求中80百分位的值

代码语言:javascript
复制
histogram_quantile(0.8, sum(rate(prometheus_http_request_duration_seconds_bucket[5m])) by (le))

即80%的请求响应时间<=0.08s

通过histogram计算网站性能指标 - Apdex指数

Apdex 指数 =( 满意数量 + 0.5 * 可容忍数量 ) / 总样本数,假设请求满意时间为0.3s,则可容忍时间为1.2s(4倍)

代码语言:javascript
复制
(
  sum(rate(http_request_duration_seconds_bucket{le="0.3"}[5m])) by (job)
+
  sum(rate(http_request_duration_seconds_bucket{le="1.2"}[5m])) by (job)
) / 2 / sum(rate(http_request_duration_seconds_count[5m])) by (job)
Summary

Summary与Histogram相似,也是通过三个metrics名称来完整暴露一组Summary,不过Summary是直接在客户端帮我们计算出了百分位数(Histogram 则使用上面提到的histogram_quantile函数计算)

  • φ 分位数(0 ≤ φ ≤ 1),<basename>{quantile="<φ>"}
  • 所有观察值的总和,<basename>_sum
  • 已观察到的事件计数,<basename>_count

例如cgroup操作延迟:

代码语言:javascript
复制
kubelet_cgroup_manager_latency_microseconds
kubelet_cgroup_manager_latency_microseconds_sum
kubelet_cgroup_manager_latency_microseconds_count

Summary和Histogram都可以使用rate函数计算平均数

计算cgroup update操作的平均延迟:

代码语言:javascript
复制
rate(kubelet_cgroup_manager_latency_microseconds_sum{instance="node4.**.com",operation_type="update"}[10m]) / rate(kubelet_cgroup_manager_latency_microseconds_count{instance="node4.**.com",operation_type="update"}[10m])

最后我们对比一下Summary与Histogram

通过博客阅读:iqsing.github.io

参考:

[1] Prometheus metric_types: https://prometheus.io/docs/concepts/metric_types/

[2] HISTOGRAMS AND SUMMARIES: https://prometheus.io/docs/practices/histograms/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 容器云实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Counter 与 Gauge
    • Counter
      • Gauge
      • Histogram 与 Summary
        • Histogram
          • Summary
          相关产品与服务
          Prometheus 监控服务
          Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档