暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Summary 数据类型详解

人人都懂云原生 2018-06-24
2687

很多朋友在学习 Prometheus 的过程中对于 Summary 类型经常会有这样的疑惑?

Prometheus 中 Summary 类型的一个度量下通常有多个 quantile 标签值不同的指标,但同时也有以 _sum
_count
结尾的度量指标,这个标签不同可以理解是采集不同的对应数据,但这两个 _sum
_count
结尾的指标分别做什么的?

大家都知道,在 Prometheus 中一共有四种类型的指标,分别为:Counter,Gauge,Histogram 和 Summary,其中 Histogram 和 Summary 会用到直方图统计相关的知识,具体参考维基百科 Histogram 。

今天我们就来一起好好学习 Prometheus 中的 Summary 类型。

数据存储

对于一个 Summary 类型的 metric, 通常除了有多个带 quantile
的同名 metric 外还会多出两个以 _sum
_count
结尾的 metric,例如一个叫做 go_gc_duration_seconds
的 Summary 类型 metric 对应的存储数据为:

  1. go_gc_duration_seconds{quantile="0"} 3.2851e-05

  2. go_gc_duration_seconds{quantile="0.25"} 6.8908e-05

  3. go_gc_duration_seconds{quantile="0.5"} 9.2441e-05

  4. go_gc_duration_seconds{quantile="0.75"} 0.00011411

  5. go_gc_duration_seconds{quantile="1"} 0.000322082

  6. go_gc_duration_seconds_sum 0.004255185

  7. go_gc_duration_seconds_count 41

PS: 数据来源 Prometheus Server GC 时长统计。

这些不同的 metric 其实并不是独立存在的,它们共同表示了 go_gc_duration_seconds
的耗时分布情况。

数据解读

对于一个 Summary 类型的数据,我们该如何解读呢?例如上面例子中的 GC 时长。

首先将所有从小到大 GC 耗时排序,可以得出如下的统计信息:

  1. 1. 0 25% GC 操作耗时在 3.2851e-05 6.8908e-05 之间

  2. 2. 25 50% GC 操作耗时在 6.8908e-05 9.2441e-05 之间

  3. 3. 50 75% GC 耗时在 9.2441e-05 0.00011411  之间

  4. 4. 75 100% GC 耗时在 0.00011411 0.000322082 之间

  5. 5. GC 总耗时为 go_gc_duration_seconds_sum = 0.004255185

  6. 6. GC 总次数为 go_gc_duration_seconds_count = 41

注意: go_gc_duration_seconds_count
go_gc_duration_seconds_count
在这里相当于 Counter 类型。

数据应用

假如我们有上面的数据,如果我们想:

  • 求最近 5 分钟平均 GC 耗时,可以为:

  1. rate(go_gc_duration_seconds_count[5m]) / rate(go_gc_duration_seconds_count[5m])

  • 求 GC 耗时的 95 值(95% GC 耗时小于某个值),可以为:

  1. go_gc_duration_seconds{quantile="0.95"}

但是这样求 95 值真的好吗?因为 Summary 类型的统计逻辑是在客户端完成的,所以如果想要计算某个特定的 quantile
 (非提前计算),那么需要做一定的近似计算来拟合。

通常在这方面有高要求的情况,更推荐使用 Histogram 类型,故这个例子可以改写为:

  1. histogram_quantile(0.95, rate(go_gc_duration_seconds_bucket[5m]))




PS: 更多精彩提问和回复,请关注我们的知识星球:


文章转载自人人都懂云原生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论