加载中

指标临时性

在时间序列数据流 (TSDS) 中处理计数器和直方图时,指标的 时间特性 (temporality) 决定了其数值如何随时间相互关联。Elasticsearch 支持两种时间特性模型:累积 (cumulative)增量 (delta)

理解时间特性非常重要,因为它会影响 Elasticsearch 在查询、聚合和 降采样 (downsampling) 过程中如何解释指标数值。

最好使用跟踪服务器已处理 HTTP 请求数的计数器指标来解释累积与增量时间特性之间的区别。

在累积时间特性中,每个数据点代表自进程启动以来的总计数。这些值是单调递增的(或者在进程重启时重置为零)。

时间戳 含义
10:01 27 27 total requests since start (自启动以来的总请求数为 27)
10:02 72 72 total requests since start (自启动以来的总请求数为 72)
10:03 113 113 total requests since start (自启动以来的总请求数为 113)

要确定变化率,Elasticsearch 会计算连续值之间的差值。在 10:01 到 10:02 之间,请求总数增加了 45。因此,increase 函数在此时间间隔内得出 45。rate 将总增量除以秒为单位的时间间隔。在这种情况下,结果为每秒 0.75 个请求,因为 10:01 和 10:02 之间的时间范围是 60 秒。

这是 Elasticsearch 中 counter 指标的默认时间特性。

在增量时间特性中,每个数据点代表自上次测量以来的变化量。这些值彼此独立。

时间戳 含义
10:01 27 27 new requests in this interval (此时间间隔内有 27 个新请求)
10:02 45 45 new requests in this interval (此时间间隔内有 45 个新请求)
10:03 41 41 new requests in this interval (此时间间隔内有 41 个新请求)

要确定变化率,Elasticsearch 直接使用该值。这意味着对于 10:01 到 10:02 之间的时间间隔,与累积时间特性一样,increase 得出 45,rate 得出 0.75。

这是 Elasticsearch 中 histogram 指标的默认时间特性。

如果您使用 HTTP OTLP 端点托管 OTLP 摄入Prometheus 远程写入,则无需进行任何配置。两个 OTLP 摄入均在映射中预配置了名为 temporality 的维度,并保留了来自 OTLP 时间特性元数据 的摄入指标的时间特性。Prometheus 远程写入 V1 仅支持计数器和经典 Prometheus 直方图(表示为计数器),它们始终是累积的。由于这与计数器的默认时间特性相匹配,Elasticsearch 远程写入端点不会设置时间特性字段。

如果您手动将指标摄入到自定义索引中(例如通过 _bulk),则必须在数据流上显式配置时间特性。为此,请使用 index.time_series.temporality_field 索引设置。此设置指定存储每个文档时间特性的字段名称。

时间特性字段必须

  • 映射为 keyword
  • 配置为 维度 (time_series_dimension: true)

其值必须是以下之一

  • delta:文档中的指标使用增量时间特性
  • cumulative:文档中的指标使用累积时间特性

如果该字段不存在或包含任何其他值,Elasticsearch 将对每种指标类型使用默认时间特性:计数器使用累积,直方图使用增量。您无需显式定义该字段的映射。它是根据索引设置自动创建的。

注意

由于 temporality 是一个维度,因此每个指标可以有混合的时间特性:某些序列可以使用 delta 时间特性,而其他序列则可以使用 cumulative。当数据被查询或降采样时,这会自动处理。

PromQL 和 ES|QL 时间序列查询会自动使用时间特性字段。当使用 TS 命令 查询 TSDS 时,Elasticsearch 会读取每个文档的时间特性值,并相应地调整支持的 时间序列聚合函数 的行为

  • 累积指标: Elasticsearch 计算连续值之间的差值以确定变化率。
  • 增量指标: Elasticsearch 直接使用这些值,因为它们本身就代表了变化量。

支持考虑时间特性的函数包括 rateincreaseirate。因此,只要正确设置了时间特性,无论底层数据是累积的还是增量的,这些函数都能产生语义上预期的结果。在 ES|QL 中,您不能对直方图使用这些函数。相反,ES|QL 将自动使用内部的、按序列的聚合,在计算时考虑时间特性。这等同于 increase 在 PromQL 中对原生直方图的工作方式。例如,以下两个查询是等效的

ES|QL

TS my-metrics
| STATS PERCENTILE(request_duration, 80) BY endpoint, TBUCKET(1m)
		

请注意,在 ES|QL 中,您必须使用 TS 命令。如果您使用 FROM,时间特性将被忽略。

PromQL

histogram_quantile(0.8, sum by (endpoint) (increase(request_duration[1m])))
		

降采样 (Downsampling) 也遵循时间特性字段。由于时间特性字段是一个维度,因此累积和增量数据点始终位于不同的时间序列中,并独立进行降采样。

有关每种指标类型如何降采样的详细信息,请参阅 降采样方法

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.