创建汇总作业 API编辑

在 8.11.0 中已弃用。

汇总将在未来版本中移除。请使用 降采样 代替。

创建汇总作业。

请求编辑

PUT _rollup/job/<job_id>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,则必须具有 managemanage_rollup 集群权限才能使用此 API。有关更多信息,请参见 安全权限

描述编辑

汇总作业配置包含有关作业运行方式、何时索引文档以及将来查询能够对汇总索引执行的操作的所有详细信息。

作业配置主要包含三个部分:有关作业的逻辑细节(cron 计划等)、用于分组的字段以及为每个组收集的指标。

作业在 STOPPED 状态下创建。您可以使用 启动汇总作业 API 启动它们。

路径参数编辑

<job_id>
(必需,字符串) 汇总作业的标识符。这可以是任何字母数字字符串,并唯一标识与汇总作业关联的数据。ID 是持久性的;它与汇总数据一起存储。如果您创建了一个作业,让它运行一段时间,然后删除该作业,该作业汇总的数据仍然与该作业 ID 相关联。您不能使用相同的 ID 创建新的作业,因为这会导致作业配置不匹配的问题。

请求正文编辑

cron
(必需,字符串) 一个 cron 字符串,定义汇总作业应执行的间隔。当间隔触发时,索引器尝试汇总索引模式中的数据。cron 模式与正在汇总的数据的时间间隔无关。例如,您可能希望创建文档的每小时汇总,但仅在每天午夜运行索引器,如 cron 所定义。cron 模式与 Watcher cron 计划的定义方式相同。
groups

(必需,对象) 定义为此汇总作业定义的分组字段和聚合。这些字段将在以后用于聚合成桶。

这些 aggs 和字段可以以任何组合使用。将 groups 配置视为定义一组工具,这些工具可以在以后用于聚合以对数据进行分区。与原始数据不同,我们必须提前考虑可能使用哪些字段和聚合。汇总提供了足够的灵活性,您只需要确定哪些字段是必需的,而不是按什么顺序需要它们。

目前有三种类型的分组可用:date_histogramhistogramterms

groups 的属性
date_histogram

(必需,对象) 日期直方图组将 date 字段聚合到基于时间的桶中。此组是 必需的;您目前无法在没有时间戳和 date_histogram 组的情况下汇总文档。 date_histogram 组具有多个参数

date_histogram 的属性
calendar_intervalfixed_interval

(必需,时间单位) 汇总时生成的时段桶的间隔。例如,60m 生成 60 分钟(每小时)汇总。这遵循 Elasticsearch 中其他地方使用的标准时间格式语法。间隔定义了可以聚合的最小间隔。如果配置了每小时 (60m) 间隔,则 汇总搜索 可以执行具有 60m 或更大(每周、每月等)间隔的聚合。因此,将间隔定义为您希望以后查询的最小单位。有关日历时间间隔和固定时间间隔之间差异的更多信息,请参见 日历时间间隔和固定时间间隔

更小、更细粒度的间隔会占用比例更大的空间。

delay

(可选,时间单位) 汇总新文档之前等待的时间。默认情况下,索引器尝试汇总所有可用的数据。但是,数据到达顺序不一致的情况并不少见,有时甚至会延迟几天。索引器无法处理在时间段汇总后到达的数据。也就是说,没有规定更新已存在的汇总。

相反,您应该指定一个与您期望顺序不一致的数据到达的最长时间段相匹配的 delay。例如,delay1d 指示索引器汇总最多 now - 1d 的文档,这为顺序不一致的文档到达提供了 1 天的缓冲时间。

field
(必需,字符串) 要汇总的日期字段。
time_zone
(可选,字符串) 定义汇总文档存储为的时区。与原始数据不同,原始数据可以动态更改时区,汇总文档必须存储在特定时区。默认情况下,汇总文档存储在 UTC 中。
histogram

(可选,对象) 直方图组将一个或多个数字字段聚合到数字直方图间隔中。

histogram 的属性
fields
(必需,数组) 您希望为其构建直方图的字段集。指定的所有字段必须是某种数字。顺序无关紧要。
interval
(必需,整数) 汇总时生成的直方图桶的间隔。例如,值为 5 会创建宽度为 5 个单位的桶 (0-55-10 等)。请注意,在 histogram 组中只能指定一个间隔,这意味着通过直方图分组的所有字段必须共享相同的间隔。
terms

(可选,对象) terms 组可以在 keyword 或数字字段上使用,以便以后通过 terms 聚合进行分组。索引器会枚举并存储每个时间段的字段的所有值。对于高基数组(如 IP 地址),这可能非常昂贵,尤其是在时间段特别稀疏的情况下。

虽然汇总的大小可能永远不会大于原始数据,但在多个高基数字段上定义 terms 组实际上可以很大程度地降低汇总的压缩率。因此,您应该谨慎选择要包含的哪些高基数字段。

terms 的属性
fields
(必需,字符串) 您希望为其收集 terms 的字段集。此数组可以包含 keyword 和数字字段。顺序无关紧要。
index_pattern

(必需,字符串) 要汇总的索引或索引模式。支持通配符样式的模式 (logstash-*)。该作业尝试汇总整个索引或索引模式。

index_pattern 不能是与目标 rollup_index 匹配的模式。例如,模式 foo-* 将与汇总索引 foo-rollup 匹配。这种情况会导致问题,因为汇总作业会在运行时尝试汇总自己的数据。如果您尝试配置与 rollup_index 匹配的模式,则会发生异常以阻止此行为。

metrics

(可选,对象) 定义为每个分组元组收集的指标。默认情况下,仅为每个组收集 doc_counts。为了使汇总有用,您通常会添加平均值、最小值、最大值等指标。指标是在每个字段的基础上定义的,并且对于您配置的每个字段,您都配置要收集的指标。

metrics 配置接受一个对象数组,其中每个对象都有两个参数。

指标对象的属性
field
(必需,字符串) 要为其收集指标的字段。这必须是某种数字。
metrics
(必需,数组) 要为该字段收集的指标数组。必须配置至少一个指标。可接受的指标是 minmaxsumavgvalue_count
page_size
(必需,整数) 在汇总索引器每次迭代中处理的桶结果数量。较大的值往往执行速度更快,但在处理过程中需要更多内存。此值不会影响数据的汇总方式;它仅用于调整索引器的速度或内存成本。
rollup_index
(必需,字符串) 包含汇总结果的索引。该索引可以与其他汇总作业共享。数据存储方式不会干扰无关的作业。
timeout
(可选,时间值) 等待请求完成的时间。默认为 20s(20 秒)。

示例编辑

以下示例创建了一个名为 sensor 的汇总作业,目标是 sensor-* 索引模式

PUT _rollup/job/sensor
{
  "index_pattern": "sensor-*",
  "rollup_index": "sensor_rollup",
  "cron": "*/30 * * * * ?",
  "page_size": 1000,
  "groups": { 
    "date_histogram": {
      "field": "timestamp",
      "fixed_interval": "1h",
      "delay": "7d"
    },
    "terms": {
      "fields": [ "node" ]
    }
  },
  "metrics": [ 
      {
      "field": "temperature",
      "metrics": [ "min", "max", "sum" ]
    },
    {
      "field": "voltage",
      "metrics": [ "avg" ]
    }
  ]
}

此配置允许在 timestamp 字段上使用日期直方图,并在 node 字段上使用 terms 聚合。

此配置定义了两个字段上的指标:temperaturevoltage。对于 temperature 字段,我们收集温度的最小值、最大值和总和。对于 voltage,我们收集平均值。

创建作业后,您将收到以下结果

{
  "acknowledged": true
}