创建汇总作业 API

编辑

在 8.11.0 中已弃用。

汇总将在未来的版本中移除。请改用 降采样

从 8.15.0 开始,在没有汇总用法的集群中调用此 API 将会失败,并显示有关汇总的弃用和计划移除的消息。集群必须包含汇总作业或汇总索引才能允许执行此 API。

创建一个汇总作业。

请求

编辑

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

(必需,对象)定义此汇总作业的组字段和聚合。这些字段随后将在以后可用于聚合到存储桶中。

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

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

groups 的属性
date_histogram

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

date_histogram 的属性
calendar_intervalfixed_interval

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

较小、更精细的间隔会占用成比例的更多空间。

delay

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

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

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

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

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

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

虽然汇总的大小不太可能大于原始数据,但在多个高基数字段上定义 terms 组可以有效地在很大程度上降低汇总的压缩率。出于这个原因,您应该明智地选择包含哪些高基数字段。

terms 的属性
fields
(必需,字符串)要收集术语的字段集。此数组可以包含 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-* 索引模式

resp = client.rollup.put_job(
    id="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"
            ]
        }
    ],
)
print(resp)
const response = await client.rollup.putJob({
  id: "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"],
    },
  ],
});
console.log(response);
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 字段上使用,并且 terms 聚合可以在 node 字段上使用。

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

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

{
  "acknowledged": true
}