Distribution

Distribution 包含总体值的汇总统计信息。它还可以根据需要包含一个直方图,用于表示这些值在一组分桶中的分布情况。

汇总统计信息是总体值集的数量、平均值、与平均值的平方偏差之和、最小值和最大值。直方图基于一系列分桶,并提供每个分桶中值的数量。分桶的边界以明确方式指定,也可以通过公式指定,用于宽度固定或呈指数增长的桶。

虽然不禁止在总体值中包含非有限值(无穷大或 NaN),但这样做通常不是一个好主意,因为这会使 meansumOfSquaredDeviation 字段变得毫无意义。

JSON 表示法
{
  "count": string,
  "mean": number,
  "sumOfSquaredDeviation": number,
  "range": {
    object (Range)
  },
  "bucketOptions": {
    object (BucketOptions)
  },
  "bucketCounts": [
    string
  ],
  "exemplars": [
    {
      object (Exemplar)
    }
  ]
}
字段
count

string (int64 format)

总体中值的数量。必须为非负数。 如果提供了直方图,则此值必须等于 bucketCounts 中的值之和。

mean

number

总体中值的算术平均值。如果 count 为零,则此字段必须为零。

sumOfSquaredDeviation

number

总体中各值与平均值的平方差之和。对于值 x_i,方法为:

Sum[i=1..n]((x_i - mean)^2)

Knuth 的《计算机程序设计艺术》第 2 卷第 232 页(第 3 版)介绍了 Welford 的方法,该方法可在一次遍历中累积此总和。

如果 count 为零,则此字段必须为零。

range

object (Range)

如果指定,则包含总体值的范围。如果 count 为零,则此字段不得存在。

bucketOptions

object (BucketOptions)

定义直方图分桶边界。如果分布不包含直方图,则省略此字段。

bucketCounts[]

string (int64 format)

直方图中每个分桶的值的数量,如 bucketOptions 中所述。如果分布没有直方图,则省略此字段。如果存在直方图,则 bucketCounts 中各值的总和必须等于分布的 count 字段中的值。

如果存在,bucketCounts 应包含 N 个值,其中 N 是 bucketOptions 中指定的分桶数。如果您提供的值少于 N 个,系统会假定剩余的值为 0。

bucketCounts 中值的顺序遵循针对三种分桶类型描述的分桶编号方案。第一个值必须是下溢分桶的计数(编号 0)。接下来的 N-2 个值是有限分桶的计数(编号 1 到 N-2)。bucketCounts 中的第 N 个值是溢出分桶的计数(编号 N-1)。

exemplars[]

object (Exemplar)

必须按 value 字段以递增顺序排列。

Range

总体值的范围。

JSON 表示法
{
  "min": number,
  "max": number
}
字段
min

number

总体值的最小值。

max

number

总体值的最大值。

BucketOptions

BucketOptions 描述了用于为分布创建直方图的分桶边界。分桶可以按线性序列或指数序列排列,也可以明确指定每个分桶。BucketOptions 不包含每个分桶中的值数量。

分桶的下限值(含)和上限值(不含)之间的值会被计入该分桶。分桶的上限必须严格大于下限。分布的 N 个分桶的序列包括一个下溢分桶(编号为 0)、零个或多个有限分桶(编号为 1 到 N - 2)和一个上溢分桶(编号为 N - 1)。分桶是连续的:分桶 i(i > 0)的下限与分桶 i - 1 的上限相同。分桶涵盖了整个有限值范围:下溢分桶的下限为 -infinity,上溢分桶的上限为 +infinity。之所以称为有限分桶,是因为其上下限都是有限的。

JSON 表示法
{

  // Union field options can be only one of the following:
  "linearBuckets": {
    object (Linear)
  },
  "exponentialBuckets": {
    object (Exponential)
  },
  "explicitBuckets": {
    object (Explicit)
  }
  // End of list of possible types for union field options.
}
字段
联合字段 options。必须设置以下三个字段中的一个。options 只能是下列其中一项:
linearBuckets

object (Linear)

线性分桶。

exponentialBuckets

object (Exponential)

指数分桶。

explicitBuckets

object (Explicit)

显式分桶。

线性

指定一个线性分桶序列,这些桶都具有相同的宽度(溢出分桶和下溢分桶除外)。每个分桶都表示相应分桶中特定值的绝对不确定性保持不变。

numFiniteBuckets + 2 (= N) 个分桶。分桶 i 的边界如下:

上限 (0 <= i < N-1):offset + (width * i)。

下限 (1 <= i < N):offset + (width * (i - 1))。

JSON 表示法
{
  "numFiniteBuckets": integer,
  "width": number,
  "offset": number
}
字段
numFiniteBuckets

integer

必须大于 0。

width

number

必须大于 0。

offset

number

第一个分桶的下限。

Exponential

指定一个指数分桶序列,其宽度与下限值成正比。每个分桶都表示相应分桶中特定值的相对不确定性保持不变。

numFiniteBuckets + 2 (= N) 个分桶。分桶 i 的边界如下:

上限(0 <= i < N-1):scale * (growthFactor ^ i)。

下限(1 <= i < N):scale * (growthFactor ^ (i - 1))。

JSON 表示法
{
  "numFiniteBuckets": integer,
  "growthFactor": number,
  "scale": number
}
字段
numFiniteBuckets

integer

必须大于 0。

growthFactor

number

必须大于 1。

scale

number

必须大于 0。

露骨内容

指定一组宽度任意的分桶。

size(bounds) + 1 (= N) 个分桶。分桶 i 的边界如下:

上限 (0 <= i < N-1):bounds[i] 下限 (1 <= i < N);bounds[i - 1]

bounds 字段必须至少包含一个元素。如果 bounds 只有一个元素,则没有有限分桶,并且该单个元素是上溢分桶和下溢分桶的共同边界。

JSON 表示法
{
  "bounds": [
    number
  ]
}
字段
bounds[]

number

值必须单调递增。

Exemplar

Exemplar 是可用于对汇总分布值进行注解的示例点。它们是元数据,可提供有关添加到分布分桶中的特定值的信息,例如添加值时处于活跃状态的跟踪记录 ID。它们可能包含更多信息,例如示例值和时间戳、来源等。

JSON 表示法
{
  "value": number,
  "timestamp": string,
  "attachments": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}
字段
value

number

范例点的值。此值用于确定范例属于哪个分桶。

timestamp

string (Timestamp format)

上述值的观测(采样)时间。

采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z""2014-10-02T15:01:23+05:30"

attachments[]

object

有关示例值的上下文信息。示例包括:

跟踪记录:type.googleapis.com/google.monitoring.v3.SpanContext

字面量字符串:type.googleapis.com/google.protobuf.StringValue

在汇总期间丢弃的标签:type.googleapis.com/google.monitoring.v3.DroppedLabels

一个范例中只能包含一个指定消息类型的附件,这是由系统强制执行的。

此对象可以包含任意类型的字段。附加字段 "@type" 包含用于标示相应类型的 URI。示例:{ "id": 1234, "@type": "types.example.com/standard/id" }