【问题标题】:GCP Console: How are percentile charts calculated?GCP Console:如何计算百分位图?
【发布时间】:2020-04-25 08:31:34
【问题描述】:

我不明白显示百分位数的图表是如何在 Google Cloud Platform Monitoring UI 中计算的。

这是我创建标准图表的方式:

日志事件示例

为请求持续时间创建基于日志的指标

这里我配置了20个bucket的直方图,从0开始,每个bucket耗时100ms。

  • 0 - 100,
  • 100 - 200,
  • ...直到 2 秒

创建图表以显示随时间变化的百分位数

我不明白这些直方图桶如何与“聚合器”、“对齐器”和“对齐周期”一起使用。

UI 强制使用“aligner”和“alignment period”。

问题

  • A.如果我要计算百分位数,为什么要对每个“校准期”的所有响应时间求和?

  • B.为基于日志的指标配置的直方图存储桶会影响这些总和吗?

【问题讨论】:

    标签: google-cloud-platform stackdriver percentile google-cloud-stackdriver


    【解决方案1】:

    在查看您的问题之前,我们必须了解直方图。

    通过使用您在帖子中提供的documentation,文档中有一个部分解释了Histogram Buckets。查看此部分并反映您的设置,我们可以看到您正在使用线性类型来指定分布指标的直方图存储桶之间的边界。

    此外,Linear 类型具有三个计算值:

    1. 偏移量值(起始值 [a])
    2. 宽度值(桶宽度 [b])
    3. I 值(桶数 [N])

    每个桶都具有相同的宽度,并且使用以下公式计算边界:offset + width x I(其中 I = 0,1,2,...,∞)。

    例如,如果起始值为5,桶数为4,桶宽为15,则桶范围如下: [-INF, 5), [5, 20), [20, 35), [35, 50), [50, 65), [65, +INF]

    现在我们了解了公式,我们可以查看您的问题并回答它们:

    1. 百分位图是如何计算的?

    如果我们查看关于 Selecting metrics 的 documentation,我们可以看到有一个 section 讲述了聚合的工作原理。我建议研究这部分以了解聚合在 GCP 中的工作原理

    百分位数的计算公式如下:

    R = P / 100 (N + 1)
    

    其中R代表分数的排名顺序。 P 代表百分等级。 N 表示分布中的分数个数。

    1. 如果我要计算百分位数,为什么要对每个“对齐周期”的所有响应时间求和?

    在同一个section中,也解释了Alignment Period是什么,但大部分情况下,alignment period决定了对时间序列进行细分的时间长度。例如,您可以将时间序列分成一分钟或一小时的块。汇总每个时期的数据,以便单个值代表该时期。默认对齐周期为一分钟。

    虽然您可以为数据设置对齐间隔,但当您更改图表上显示的时间间隔或更改缩放级别时,时间序列可能会重新对齐。

    1. 为基于日志的指标配置的直方图存储桶会影响这些总和吗? 我不太确定您在这里应用什么,您是在问是否在创建日志时,总和会被正在生成的日志更改?

    我希望这会有所帮助!

    【讨论】:

    • 说实话还不清楚,但谢谢。我了解直方图桶。以及百分位数是如何工作的。我不明白我的日志事件流(添加到原始帖子)是如何绘制的。似乎有三个步骤我不明白它们是如何协同工作的: 1. 放入直方图桶中。 “基于日志的分布度量” 2. 在 1 分钟内应用sum。 “调整期”。 3. 汇总到 99 个百分位。我想要的是计算“每 1 分钟的第 99 个百分位数”来绘制图表。但是为什么会有step 1(直方图)和step 2(sum)呢?
    • 抱歉之前的答案让您感到困惑,但要回到正轨,这里的重要部分是 Aligner 的不同选项,包括总和、平均值等。如果您不想选择总和,则无需选择。此外,对于绘制图表的日志事件流,系统仅查看生成的相同日志的数量。因此,例如,如果系统生成了 40 个相同的日志(即您在问题中包含的示例日志事件),它只会对这 40 个日志进行采样。
    【解决方案2】:

    我这几天一直在研究同一个问题,发现官方文档中的Understanding distribution percentiles 部分很有帮助。

    百分位数是一个计算值。计算考虑了桶的数量、桶的宽度和样本的总数。由于实际测量值未知,因此百分位数计算不能依赖此数据。

    他们有一个很好的例子,桶[0, 1)[1, 2)[2, 4)[4, 8)[8, 16)[16, 32)[32, 64)[64, 128)[64, 128)[128, 256)在最后一个桶中只有一个测量值@2@none@9876543在所有其他存储桶中)。

    1. 您使用存储桶计数来确定 [128, 256) 存储桶包含第 50 个百分位数。
    2. 您假设所选存储桶内的测量值是均匀分布的,因此第 50 个百分位的最佳估计值是存储桶中点。

    A.如果我要计算百分位数,为什么要对每个“校准期”的所有响应时间求和?

    我发现 Metrics explorer 的 GCP Console UI 的措辞也有点误导/混淆(但也许只是我不熟悉他们的术语)。我认为这里的关键概念是Alignment and Reduction

    对齐器会在每个对齐周期结束时生成一个值。

    reducer 是一个函数,它应用于一组时间序列中的值以生成单个值。

    两者之间的区别在于水平聚合与垂直聚合。在 UI 中,Aggregator(主要和次要)是 reducers

    回到问题,在 percentile 减速器之前应用 sum 对齐似乎在其他用例中比您的用例更有用。简而言之,meanmax 对齐器可能对您的“duration_ms”指标更有用,但它们在 UI 的下拉列表中不可用,老实说,我还没有弄清楚如何在MQL 编辑器。只是从这里的文档中引用。还有其他的矫正器也可能有用,但我暂时将它们排除在外。


    B.为基于日志的指标配置的直方图存储桶会影响这些总和吗?

    和@Anthony 一样,我也不太清楚这个问题意味着什么。假设您要问是否可以使用这些对齐器/缩减器对齐/缩减基于日志的指标,答案是。但是,您需要知道您使用的指标类型(counterdistribution)并根据需要以相应的方式汇总它们。

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 2011-12-29
      • 2013-06-20
      • 2021-11-29
      • 2016-07-28
      • 2017-08-29
      • 2012-10-28
      • 2016-04-12
      • 2016-07-12
      相关资源
      最近更新 更多