指标临时性
在时间序列数据流 (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 索引设置。此设置指定存储每个文档时间特性的字段名称。
时间特性字段必须
其值必须是以下之一
delta:文档中的指标使用增量时间特性cumulative:文档中的指标使用累积时间特性
如果该字段不存在或包含任何其他值,Elasticsearch 将对每种指标类型使用默认时间特性:计数器使用累积,直方图使用增量。您无需显式定义该字段的映射。它是根据索引设置自动创建的。
由于 temporality 是一个维度,因此每个指标可以有混合的时间特性:某些序列可以使用 delta 时间特性,而其他序列则可以使用 cumulative。当数据被查询或降采样时,这会自动处理。
PromQL 和 ES|QL 时间序列查询会自动使用时间特性字段。当使用 TS 命令 查询 TSDS 时,Elasticsearch 会读取每个文档的时间特性值,并相应地调整支持的 时间序列聚合函数 的行为
- 累积指标: Elasticsearch 计算连续值之间的差值以确定变化率。
- 增量指标: Elasticsearch 直接使用这些值,因为它们本身就代表了变化量。
支持考虑时间特性的函数包括 rate、increase 和 irate。因此,只要正确设置了时间特性,无论底层数据是累积的还是增量的,这些函数都能产生语义上预期的结果。在 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) 也遵循时间特性字段。由于时间特性字段是一个维度,因此累积和增量数据点始终位于不同的时间序列中,并独立进行降采样。
有关每种指标类型如何降采样的详细信息,请参阅 降采样方法。